Rangkaian Linux dan TCP/IP untuk Pembangun · Pelajaran

Pengenalan kepada API Soket

Terokai konsep teras pengaturcaraan soket, termasuk jenis soket, alamat dan panggilan API lazim.

Pelajaran 1 daripada 412 langkah

Pengenalan kepada API Soket ialah pelajaran Rangkaian Linux dan TCP/IP untuk Pembangun percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Rangkaian Linux dan TCP/IP untuk Pembangun, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Rangkaian Linux dan TCP/IP untuk Pembangun merangkumi sejumlah 4 pelajaran.

Apakah Itu Socket Rangkaian?

Selamat datang ke pengaturcaraan socket! socket ialah konsep penting dalam komunikasi rangkaian. Anggaplah ia sebagai satu titik hujung bagi pautan komunikasi dua hala antara dua program yang berjalan dalam rangkaian.

Ia seperti soket telefon pada dinding. Anda menyambungkan telefon kepadanya untuk berhubung dengan rangkaian telefon. Begitu juga, program menggunakan socket untuk berhubung dan berkomunikasi melalui rangkaian komputer.

Modul Socket Python

Python memudahkan pengaturcaraan socket melalui modul terbina dalam socket. Modul ini menyediakan semua fungsi dan kelas yang diperlukan untuk mencipta serta mengurus socket.

Biasanya, anda akan mengimportnya pada permulaan skrip anda. Mari lihat cara untuk bermula:

import socket

# Now you can use socket functions!

Keluarga Alamat Socket

Sebelum mencipta socket, kita perlu menentukan keluarga alamatnya. Ini menentukan jenis alamat yang boleh digunakan oleh socket tersebut.

  • socket.AF_INET: Digunakan untuk alamat IPv4 (contohnya, 192.168.1.1). Ini ialah yang paling biasa.
  • socket.AF_INET6: Digunakan untuk alamat IPv6.
  • socket.AF_UNIX: Digunakan untuk komunikasi antara proses pada mesin yang sama.

Kita akan menggunakan AF_INET terutamanya untuk komunikasi internet standard.

Jenis Socket: Strim berbanding Datagram

Seterusnya, kita memilih jenis socket, yang menentukan gaya komunikasi.

  • socket.SOCK_STREAM: Jenis ini menggunakan TCP (Protokol Kawalan Penghantaran). Ia boleh dipercayai, mengikut turutan dan berorientasikan sambungan, seperti panggilan telefon. Data tiba tepat seperti yang dihantar.
  • socket.SOCK_DGRAM: Jenis ini menggunakan UDP (Protokol Datagram Pengguna). Ia tidak berorientasikan sambungan dan kurang boleh dipercayai, seperti menghantar poskad. Data mungkin tiba tidak mengikut turutan atau tidak tiba langsung.

Kebanyakan aplikasi biasa, khususnya pelayaran web, menggunakan SOCK_STREAM.

Mencipta Socket Pertama Anda

Sekarang mari gabungkan semuanya dan cipta objek socket asas. Kita akan menentukan keluarga alamat (IPv4) dan jenis socket (strim TCP).

Baris ini mencipta socket tidak aktif yang sedia dikonfigurasikan untuk peranan klien atau pelayan.

import socket

# Create a TCP/IP socket
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print(f"Socket created: {my_socket}")
# Don't forget to close sockets when done!
my_socket.close()

Mengikat Socket (Bahagian Pelayan)

Bagi pelayan, socket memerlukan alamat untuk mendengar. Proses ini dipanggil pengikatan. Anda menetapkan alamat IP dan nombor port kepada socket anda.

Klien akan menggunakan alamat dan port ini untuk berhubung dengan pelayan anda. Port ialah nombor yang mengenal pasti aplikasi atau perkhidmatan tertentu pada hos.

import socket

HOST = '127.0.0.1'  # Localhost
PORT = 65432        # Port to listen on (> 1023 for non-privileged)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    print(f"Socket bound to {HOST}:{PORT}")
    # The socket is now bound, but not yet listening or accepting.

Mendengar Sambungan

Selepas diikat, socket pelayan mesti mendengar sambungan klien yang masuk. Kaedah listen() meletakkan socket dalam mod pelayan.

Argumen kepada listen() ialah backlog, iaitu bilangan maksimum sambungan yang belum diterima yang dibenarkan oleh sistem sebelum menolak sambungan baharu.

import socket

HOST = '127.0.0.1'
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(1) # Allow 1 pending connection
    print(f"Server listening on {HOST}:{PORT}")
    # Now the server is ready to accept a connection.

Menerima Sambungan

Apabila klien cuba berhubung, pelayan menggunakan kaedah accept(). Kaedah ini menyekat pelaksanaan (menunggu) sehingga klien berhubung.

Kemudian, kaedah ini mengembalikan objek socket baharu (conn) yang mewakili sambungan kepada klien, serta alamat klien (addr). Semua komunikasi dengan klien berlaku melalui socket baharu ini.

import socket

HOST = '127.0.0.1'
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(1)
    print("Waiting for a client connection...")
    # This part would typically be in a loop in a real server
    conn, addr = s.accept()
    with conn:
        print(f"Connected by {addr}")
        # Now 'conn' can be used to send/receive data to/from the client.

Berhubung dengan Pelayan (Bahagian Klien)

Socket klien tidak melakukan pengikatan; sebaliknya, ia menggunakan kaedah connect() untuk mewujudkan sambungan dengan pelayan yang sedang mendengar pada alamat IP dan port tertentu.

Selepas berhubung, klien boleh terus mula menghantar dan menerima data. Data sentiasa ditukar dalam bentuk bita.

import socket

HOST = '127.0.0.1'
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    try:
        s.connect((HOST, PORT))
        print(f"Connected to server at {HOST}:{PORT}")
        s.sendall(b'Hello from client!')
        data = s.recv(1024) # Receive up to 1024 bytes
        print(f"Received: {data.decode()}")
    except ConnectionRefusedError:
        print("Error: Server not running or not listening.")

Menghantar dan Menerima Data

Selepas sambungan diwujudkan, data boleh ditukar menggunakan sendall() dan recv().

  • socket.sendall(data): Menghantar semua data yang menyerupai bita kepada socket yang telah berhubung. Ia terus menghantar sehingga semua data dihantar atau ralat berlaku.
  • socket.recv(bufsize): Menerima data daripada socket. bufsize ialah bilangan maksimum bita yang diterima pada satu-satu masa. Ia mengembalikan objek bita kosong (b'') apabila sambungan ditutup.

Semakan Pantas API Socket

Antara pernyataan berikut, yang manakah TRUE tentang modul socket Python dan jenis socket?

Imbas Kembali: Pengenalan kepada Socket

Syabas! Dalam pelajaran ini, anda telah mengambil langkah pertama dalam pengaturcaraan socket dengan Python. Anda telah mempelajari:

  • Apakah socket rangkaian dan peranannya dalam komunikasi.
  • Tentang modul socket Python.
  • Perbezaan antara keluarga alamat (AF_INET, AF_INET6) dan jenis socket (SOCK_STREAM untuk TCP, SOCK_DGRAM untuk UDP).
  • Panggilan API asas: socket() untuk penciptaan, bind() dan listen() untuk pelayan, serta connect() untuk klien.
  • Cara accept() mengendalikan sambungan masuk dan cara sendall()/recv() berfungsi.

Seterusnya, kita akan mendalami pembinaan aplikasi klien-pelayan TCP yang lengkap!

Percuma untuk bermula

Pelajari Rangkaian Linux dan TCP/IP untuk Pembangun dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Pengenalan kepada API Soket” percuma?

Ya — teks penuh “Pengenalan kepada API Soket” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Rangkaian Linux dan TCP/IP untuk Pembangun, tingkat taraf kepada CoddyKit PRO. Kursus Rangkaian Linux dan TCP/IP untuk Pembangun merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengenalan kepada API Soket”?

Terokai konsep teras pengaturcaraan soket, termasuk jenis soket, alamat dan panggilan API lazim. Anda berlatih Rangkaian Linux dan TCP/IP untuk Pembangun menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Rangkaian Linux dan TCP/IP untuk Pembangun?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Rangkaian Linux dan TCP/IP untuk Pembangun di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Pengenalan kepada API Soket” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Rangkaian Linux dan TCP/IP untuk Pembangun ini?

Ya. Setiap pelajaran Rangkaian Linux dan TCP/IP untuk Pembangun menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pengenalan kepada API Soket
  2. Soket Pelanggan-Pelayan TCP
  3. Soket Pelanggan-Pelayan UDP
  4. Soket Tanpa Sekatan dan select()
← Kembali ke Rangkaian Linux dan TCP/IP untuk Pembangun