前言
前文使用TCP面向流的套接字,今天講解的UDP的工作方式與TCP/IP不同。UDP是用戶數據報協議,是一個面向消息的協議。
一方面,UDP不需要一個長期活動連接,所以建立UDP套接字稍微簡單一些。另一方面,UDP消息必須放在一個數據報中。
在IPv4中,數據報包含65507個字節,這些字節信息中還包括首部信息。因為UDP不需要長期的連接,所以它無法得到TCP所能提供的傳輸保障。
服務器代碼
因為UDP並沒有連接,所以服務器不需要監聽和接收連接。它只需要使用bing()將其套接字與一個端口關聯,然後等待各個消息。
示例代碼如下:
import socket
# 1.創建一個套接字,
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('localhost', 10000))
while True:
data, address = sock.recvfrom(4096)
print(data.decode('UTF-8'), address)
if data:
sent = sock.sendto('已接收到你發來的消息'.encode('UTF-8'), address)其中,recvfrom()表示從套接字讀取消息,比如客戶但發送消息後,消息與客戶但地址都在裡面。
至於sendto()很好理解,就是發送消息給別人。參數1表示消息內容,參數2就是發送到哪裡(也就是對方的地址)。
客戶端代碼
客戶端當然比服務器更簡單,因為UDP不需要連接,可以直接將消息發送到服務器,並使用recvfrom()響應。示例如下:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
msg = "發送消息到服務器".encode('utf-8')
sent = sock.sendto(msg, ('localhost', 10000))
data, server = sock.recvfrom(4096)
print(data.decode())
finally:
sock.close()同樣的,這裡sock.recvfrom()用於接收服務器反饋的消息內容與地址。運行之後,效果如下所示:


原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/227918.html
微信掃一掃
支付寶掃一掃