读取SocketServer处理程序中的所有等待行

问题描述 投票:0回答:1

这是一个简单的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
python socketserver
1个回答
0
投票

该文档建议readline()将重复调用recv(),直到获得换行符为止,这将把下一行保留在套接字的缓冲区中并导致再次调用handle()。但这似乎并非如此。

相反,您可以使用:

for line in self.rfile:
    line = line.strip()
    print(line)
© www.soinside.com 2019 - 2024. All rights reserved.