读取 SocketServer 处理程序中的所有等待行
Reading all waiting lines in a SocketServer handler
这是一个简单的 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)
这是一个简单的 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)