通过 UDP 接收数据

UDP 是一种无连接协议。这意味着发送消息的对等体不需要在发送消息之前建立连接。socket.recvfromthus 返回一个元组(msg [套接字收到的消息],addr [发送者的地址])

仅使用 socket 模块的 UDP 服务器:

from socket import socket, AF_INET, SOCK_DGRAM
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind(('localhost', 6667))

while True:
    msg, addr = sock.recvfrom(8192)  # This is the amount of bytes to read at maximum
    print("Got message from %s: %s" % (addr, msg))

以下是使用 socketserver.UDPServer 的替代实现:

from socketserver import BaseRequestHandler, UDPServer

class MyHandler(BaseRequestHandler):
    def handle(self):
        print("Got connection from: %s" % self.client_address)
        msg, sock = self.request
        print("It said: %s" % msg)
        sock.sendto("Got your message!".encode(), self.client_address) # Send reply

serv = UDPServer(('localhost', 6667), MyHandler)
serv.serve_forever()

默认情况下,sockets 块。这意味着脚本的执行将一直等到套接字接收数据。