这是一个简单的socketserver
示例,应该通过UDP接收一条线并将其回显:
import socketserver
class LineHandler(socketserver.DatagramRequestHandler):
def handle(self):
line = self.rfile.readline().strip()
print(line)
server = socketserver.UDPServer(('', 4444), LineHandler)
server.serve_forever()
但是,如果同时出现两行,则仅读取第一行:
(printf 'lol\n'; printf 'what\n') | nc -u localhost 4444
该文档建议readline()
将重复调用recv()
,直到获得换行符为止,这将把下一行保留在套接字的缓冲区中并导致再次调用handle()
。但这似乎并非如此。
相反,您可以使用:
for line in self.rfile:
line = line.strip()
print(line)