通过 UDP 接收数据
UDP 是一种无连接协议。这意味着发送消息的对等体不需要在发送消息之前建立连接。socket.recvfrom
thus 返回一个元组(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
块。这意味着脚本的执行将一直等到套接字接收数据。