Rangkaian Linux dan TCP/IP untuk Pembangun · Pelajaran

Soket Pelanggan-Pelayan UDP

Bangunkan komunikasi tanpa sambungan berasaskan datagram menggunakan soket UDP untuk aplikasi yang mengutamakan kelajuan berbanding kebolehpercayaan.

Pelajaran 3 daripada 412 langkah

Soket Pelanggan-Pelayan UDP ialah pelajaran Rangkaian Linux dan TCP/IP untuk Pembangun percuma di CoddyKit. Ini ialah pelajaran 3 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 UDP?

Selamat datang ke UDP! Jika TCP menumpukan pada komunikasi yang boleh dipercayai dan berorientasikan sambungan, UDP (Protokol Datagram Pengguna) menawarkan pendekatan yang berbeza: tanpa sambungan dan tidak boleh dipercayai.

Bayangkan UDP seperti menghantar poskad. Anda menulis mesej dan menghantarnya, tetapi anda tidak tahu sama ada mesej itu tiba, dalam turutan apa, atau sama ada mesej itu hilang. Ia pantas, tetapi tiada jaminan.

UDP berbanding TCP: Perbezaan Utama

Untuk memahami bila UDP patut digunakan, anda perlu mengetahui perbezaan utamanya daripada TCP:

  • Tanpa Sambungan: Tiada jabat tangan diperlukan sebelum data dihantar.
  • Tidak Boleh Dipercayai: Tiada jaminan penghantaran, susunan atau perlindungan daripada pendua.
  • Lebih Pantas: Overhed lebih rendah kerana tiada persediaan sambungan atau pemeriksaan kebolehpercayaan.
  • Datagram: Data dihantar dalam paket bebas yang dipanggil datagram.

UDP amat sesuai untuk aplikasi yang mengutamakan kelajuan berbanding penghantaran yang terjamin.

Bila UDP Patut Digunakan

UDP amat berguna dalam keadaan apabila kehilangan sebahagian data boleh diterima, atau apabila aplikasi mengendalikan kebolehpercayaan sendiri. Kegunaan biasa termasuk:

  • Permainan Dalam Talian: Kelajuan amat penting untuk tindakan masa nyata.
  • Penstriman Suara/Video: Kelewatan kecil lebih baik daripada penghantaran semula.
  • DNS (Sistem Nama Domain): Carian pantas diutamakan.
  • SNMP (Protokol Pengurusan Rangkaian Mudah): Memantau peranti rangkaian.

Aplikasi ini mengutamakan kependaman rendah berbanding keutuhan data mutlak.

Modul `socket` Python untuk UDP

Modul socket Python ialah kit alat anda untuk pengaturcaraan rangkaian, termasuk UDP. Untuk mencipta socket UDP, anda menentukan keluarga alamat dan jenis socket.

  • socket.AF_INET: Untuk alamat IPv4.
  • socket.SOCK_DGRAM: Menentukan socket UDP (socket datagram).

Mari lihat cara menciptanya.

Mencipta Socket UDP

Berikut ialah cara mencipta socket UDP asas. Perhatikan bahawa caranya hampir sama dengan TCP, tetapi menggunakan SOCK_DGRAM.

Jalankan kod ini untuk melihat socket UDP dimulakan dan kemudian ditutup.

import socket

def main():
    # AF_INET for IPv4, SOCK_DGRAM for UDP
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    print("UDP socket created successfully!")
    udp_socket.close()
    print("Socket closed.")

if __name__ == "__main__":
    main()

Pelayan UDP: Mengikat pada Alamat

Pelayan UDP perlu melakukan bind() pada alamat IP dan port tertentu untuk mendengar datagram yang masuk. Ini memberitahu sistem pengendalian tempat pelayan menjangka menerima data.

Tidak seperti TCP, UDP tiada listen() atau accept() kerana UDP tidak berhubungan. Pelayan hanya menunggu untuk menerima data.

import socket

HOST = '127.0.0.1' # Localhost
PORT = 12345       # Port to listen on

def main():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.bind((HOST, PORT))
    print(f"UDP server bound to {HOST}:{PORT}")
    udp_socket.close()

if __name__ == "__main__":
    main()

Pelayan UDP: Menerima Data

Kaedah recvfrom() digunakan oleh pelayan UDP untuk menerima data. Kaedah ini mengembalikan data dan alamat pengirim.

Pelayan di bawah akan menunggu satu mesej, mencetaknya, kemudian ditutup. Cuba jalankannya, kemudian jalankan kod klien dalam babak seterusnya!

import socket

HOST = '127.0.0.1'
PORT = 12345

def main():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.bind((HOST, PORT))
    print(f"UDP server listening on {HOST}:{PORT}")

    print("Waiting for message...")
    data, addr = udp_socket.recvfrom(1024) # Buffer size 1024 bytes
    print(f"Received '{data.decode()}' from {addr}")
    udp_socket.close()

if __name__ == "__main__":
    main()

Klien UDP: Menghantar Data

Klien UDP menggunakan kaedah sendto() untuk menghantar data. Kaedah ini menerima data (sebagai bait) dan alamat destinasi (IP dan port) sebagai argumen.

Klien tidak perlu melakukan bind pada port tertentu kecuali klien menjangka menerima balasan pada port tersebut. Port sementara akan ditetapkan secara automatik.

Jalankan klien ini selepas memulakan pelayan daripada babak sebelumnya!

import socket

SERVER_HOST = '127.0.0.1'
SERVER_PORT = 12345

def main():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    message = "Hello UDP Server!"
    udp_socket.sendto(message.encode(), (SERVER_HOST, SERVER_PORT))
    print(f"Sent '{message}' to {SERVER_HOST}:{SERVER_PORT}")
    udp_socket.close()

if __name__ == "__main__":
    main()

Pelayan dan Klien Gema UDP Lengkap

Mari kita cipta pelayan gema UDP yang ringkas, yang menerima mesej dan menghantarnya kembali kepada klien, serta klien yang menghantar mesej dan menunggu gema tersebut.

Mula-mula, jalankan pelayan. Kemudian, jalankan klien dalam terminal atau persekitaran pelaksanaan yang berasingan.

import socket

# --- UDP Echo Server ---
HOST = '127.0.0.1'
PORT = 12345

def run_server():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.bind((HOST, PORT))
    print(f"Server listening on {HOST}:{PORT}")

    try:
        while True:
            data, addr = udp_socket.recvfrom(1024)
            print(f"Received '{data.decode()}' from {addr}")
            # Echo back to the client
            udp_socket.sendto(b"Echo: " + data, addr)
            print(f"Echoed back to {addr}")
    except KeyboardInterrupt:
        print("Server shutting down.")
    finally:
        udp_socket.close()

if __name__ == "__main__":
    run_server()

Klien Gema UDP Lengkap

Sekarang, jalankan kod klien ini. Kod ini akan menghantar mesej kepada pelayan yang sedang berjalan, kemudian menunggu untuk menerima respons yang digemakan.

Ini menunjukkan gelung komunikasi UDP yang lengkap dan ringkas.

import socket

# --- UDP Echo Client ---
SERVER_HOST = '127.0.0.1'
SERVER_PORT = 12345

def run_client():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    message = "Hello from UDP Client!"
    
    udp_socket.sendto(message.encode(), (SERVER_HOST, SERVER_PORT))
    print(f"Sent '{message}' to {SERVER_HOST}:{SERVER_PORT}")

    print("Waiting for echo...")
    data, addr = udp_socket.recvfrom(1024)
    print(f"Received echo '{data.decode()}' from {addr}")
    udp_socket.close()

if __name__ == "__main__":
    run_client()

Semakan Klien-Pelayan UDP

Antara pernyataan berikut, yang manakah TRUE tentang soket UDP?

Imbas Kembali: Soket UDP

Dalam pelajaran ini, anda telah meneroka dunia soket UDP dan memahami perbezaan asasnya daripada TCP.

  • UDP adalah tanpa hubungan dan tidak boleh dipercayai, dengan mengutamakan kelajuan.
  • UDP menggunakan datagram untuk komunikasi.
  • Modul socket Python bersama SOCK_DGRAM mencipta soket UDP.
  • Pelayan menggunakan bind() dan recvfrom().
  • Klien menggunakan sendto().

Sekarang anda boleh memilih protokol yang sesuai dengan keperluan aplikasi anda!

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 “Soket Pelanggan-Pelayan UDP” percuma?

Ya — teks penuh “Soket Pelanggan-Pelayan UDP” 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 “Soket Pelanggan-Pelayan UDP”?

Bangunkan komunikasi tanpa sambungan berasaskan datagram menggunakan soket UDP untuk aplikasi yang mengutamakan kelajuan berbanding kebolehpercayaan. 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 3 daripada 4.

Berapa lamakah pelajaran “Soket Pelanggan-Pelayan UDP” 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