Pengenalan kepada API Soket
Terokai konsep teras pengaturcaraan soket, termasuk jenis soket, alamat dan panggilan API lazim.
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 semuadatayang menyerupai bita kepada socket yang telah berhubung. Ia terus menghantar sehingga semua data dihantar atau ralat berlaku.socket.recv(bufsize): Menerima data daripada socket.bufsizeialah 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
socketPython. - Perbezaan antara keluarga alamat (
AF_INET,AF_INET6) dan jenis socket (SOCK_STREAMuntuk TCP,SOCK_DGRAMuntuk UDP). - Panggilan API asas:
socket()untuk penciptaan,bind()danlisten()untuk pelayan, sertaconnect()untuk klien. - Cara
accept()mengendalikan sambungan masuk dan carasendall()/recv()berfungsi.
Seterusnya, kita akan mendalami pembinaan aplikasi klien-pelayan TCP yang lengkap!
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
- Pengenalan kepada API Soket
- Soket Pelanggan-Pelayan TCP
- Soket Pelanggan-Pelayan UDP
- Soket Tanpa Sekatan dan select()