目前使用 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套接字可能更高效。