目前使用 connect()函數的UDP客戶端 ,這里接收數據 解析的地方 查看一下。
如果使用 bind()、sendto()、recvfrom() 組合 那么返回值 和發送要在做調整,,根據業務需要后續在調整
其余的 和原來的 邏輯都是一樣的,只是協議變了而已。
if server_socket is None:server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 連接到服務器server_socket.connect((host, port))return_message = send_tcp_route(server_socket)
UDP綁定函數的使用
在UDP通信中,bind()函數用于將套接字綁定到指定的IP地址和端口號。這對于服務器端是必要的,因為它允許服務器監聽來自客戶端的數據。對于客戶端,雖然不是必須的,但在某
些情況下使用bind()可以為客戶端套接字指定一個固定的端口號。
客戶端使用bind()函數
客戶端在創建套接字后,通常會使用sendto()函數向服務器發送數據,此時操作系統會為該套接字隨機分配一個端口。但是,如果客戶端需要接收服務器的數據,或者服務器需要知道客戶端的確切端口號以發送數據,那么客戶端就需要使用bind()函數來綁定一個特定的端口號。例如:
import socket
創建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
綁定到特定的地址和端口
client_socket.bind((‘localhost’, 9693))
發送數據
client_socket.sendto(b’Hello, server!', (‘192.168.1.166’, 80))
接收數據
data, server = client_socket.recvfrom(4096)
雖然UDP是無連接的協議,客戶端可以選擇使用connect()函數來指定目的地址和端口號。這樣做的好處是,之后客戶端可以使用send()函數來發送數據,而不需要在每次發送時都指
定目的地址。這也使得套接字知道目的地址和端口號,從而可以接收來自特定服務器的數據。例如:
import socket
創建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
使用connect()指定服務器地址和端口
client_socket.connect((‘192.168.1.166’, 80))
發送數據
client_socket.send(b’Hello, server!')
接收數據
data = client_socket.recv(4096)
使用connect()函數的UDP客戶端套接字稱為已連接的UDP套接字。與未連接的UDP套接字相比,已連接的UDP套接字在發送數據時不需要重復執行連接和斷開連接的步驟,因此在發送多個數據包到同一地址時更高效。但是,已連接的UDP套接字只能與一個特定的服務器地址交換數據,這可能限制了其使用場景。
在實際應用中,如果客戶端需要與多個服務器通信,使用未連接的UDP套接字可能更合適。
如果客戶端在一定時間內需要向同一個地址發送大量數據,使用已連接的UDP套接字可能更高效。