UDP 编程
服务端例子
TCP 发送数据的时候, 会建立好 TCP 的连接, 所以不需要指定地址, 而 UDP 是面向无连接的, 每次发送都需要指定发送给谁。
# udp_server.pyimport socketHOST = '127.0.0.1'PORT = 5000s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建套接字时类型选择 SOCK_DGRAMs.bind((HOST, PORT)) # 绑定套接字到本地 IP 与端口(传入的是 tuple)# UDP 不需要监听连接print(f'Server start at: {HOST}:{PORT}')while True: data, addr = s.recvfrom(1024) # 不需要接收连接, 直接接收数据 print(f'Received from {addr}') data = data.decode('utf-8') print(data) s.sendto(bytes(f'Server received {data}', encoding='utf-8'), addr) # 给客户端发送数据s.close()
客户端例子
# udp_client.pyimport socketHOST = '127.0.0.1'PORT = 5000s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 不需要用 connect() 方法连接到服务器while True: cmd = input('Input your msg:') s.sendto(bytes(cmd, encoding='utf-8'), (HOST, PORT)) data, addr = s.recvfrom(1024) print(data.decode('utf-8'))
启动服务端和客户端
启动服务器:
> python udp_server.pyServer start at: 127.0.0.1:5000Received from ('127.0.0.1', 55893)你好 # 客户端发送的消息Received from ('127.0.0.1', 55893)告辞 # 客户端发送的消息
启动客户端:
> python udp_client.pyInput your msg:你好 # 输入要发送的内容Server received 你好 # 服务端返回的内容Input your msg:告辞Server received 告辞Input your msg: