Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Python melaksanakan komunikasi UDP dan TCP?

Bagaimanakah Python melaksanakan komunikasi UDP dan TCP?

王林
王林ke hadapan
2023-05-08 11:46:071955semak imbas

1. UDP

UDP ialah protokol penghantaran tanpa sambungan dan tidak boleh dipercayai Berbanding dengan TCP, UDP mempunyai kelebihan kelajuan penghantaran data yang cepat dan kelewatan penghantaran yang kecil, tetapi ia tidak menjamin kebolehpercayaan data. Penghantaran memerlukan lapisan aplikasi untuk melakukan penghantaran semula data, pengesahan dan pemprosesan lain.

Berikut ialah kod sampel penghantaran UDP ringkas:

import socket

UDP_IP = '127.0.0.1'   # 目标IP地址
UDP_PORT = 5005        # 目标端口号
MESSAGE = b"Hello, World!"   # 要发送的数据

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 发送数据
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

# 关闭套接字
sock.close()

Berikut ialah kod sampel penerima UDP mudah:

import socket

UDP_IP = '127.0.0.1'   # 监听IP地址
UDP_PORT = 5005        # 监听端口号

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定套接字到指定IP地址和端口号
sock.bind((UDP_IP, UDP_PORT))

# 接收数据
data, addr = sock.recvfrom(1024)   # 一次最多接收1024字节的数据

print("Received message:", data)

# 关闭套接字
sock.close()

Perlu diingat bahawa dalam komunikasi UDP, Due kepada had saiz paket data, data yang dihantar mungkin perlu dipecahkan, dan data yang diterima juga mungkin perlu dicache dan disambung untuk memastikan integriti data.

Dalam rangkaian IPv4, panjang maksimum paket UDP ialah 64KB (65535 bait), termasuk saiz pengepala IP dan pengepala UDP. Dalam aplikasi praktikal, disebabkan oleh had peralatan rangkaian dan sistem pengendalian, saiz paket UDP biasanya tertakluk kepada beberapa sekatan. Sebagai contoh, sesetengah penghala dan tembok api mungkin mengehadkan panjang maksimum paket UDP, dan sesetengah sistem pengendalian juga boleh mengenakan beberapa sekatan pada paket UDP.

Apabila menggunakan UDP untuk penghantaran data, anda perlu memberi perhatian kepada had saiz paket data dan cuba mengelak daripada menghantar paket data yang terlalu besar. Anda boleh menggunakan kaedah getsockopt() untuk menanyakan had sistem pada saiz paket UDP, sebagai contoh:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
max_size = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
print(f"Max size of UDP packet: {max_size} bytes")

2 TCP

TCP ialah protokol penghantaran berorientasikan sambungan yang boleh dipercayai yang menyediakan data Kebolehpercayaan dan integriti penghantaran terjamin, tetapi kecekapan penghantaran agak rendah.

Berikut ialah pelayan TCP dan kod contoh pelanggan yang mudah:

Pelayan TCP:

import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

# 创建TCP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP地址和端口号
sock.bind((IP, PORT))

# 开始监听
sock.listen(1)

print(f"Server listening on {IP}:{PORT}...")

# 接受客户端连接
conn, addr = sock.accept()
print(f"Connected by {addr[0]}:{addr[1]}")

# 接收数据
data = conn.recv(1024)
print(f"Received data: {data.decode()}")

# 发送数据
msg = b"Hello, Client!"
conn.sendall(msg)

# 关闭连接
conn.close()

Pelanggan TCP:

import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

# 创建TCP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
sock.connect((IP, PORT))

# 发送数据
msg = b"Hello, Server!"
sock.sendall(msg)

# 接收数据
data = sock.recv(1024)
print(f"Received data: {data.decode()}")

# 关闭连接
sock.close()

Perhatikan Apa lagi, dalam TCP komunikasi, penghantaran data perlu dijalankan melalui sambungan, jadi sambungan perlu diwujudkan terlebih dahulu, kemudian data dihantar, dan akhirnya sambungan ditutup. Oleh kerana TCP ialah protokol penghantaran berorientasikan sambungan, ia memerlukan proses penubuhan sambungan yang kompleks seperti jabat tangan tiga hala Ia kurang cekap daripada UDP, tetapi mempunyai kebolehpercayaan yang lebih tinggi.

Atas ialah kandungan terperinci Bagaimanakah Python melaksanakan komunikasi UDP dan TCP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam