TCP服务器正在关闭连接

Mej*_*jmo 6 python

我有这个代码

class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        _data = self.request.recv(1024)

        Utils.log("Received from %s: %s" % (self.client_address, _data))
Run Code Online (Sandbox Code Playgroud)

用它来称呼它

kamcon_server = ThreadedTCPServer((HOST, 3011), ThreadedTCPRequestHandler)

server_thread = threading.Thread(target = kamcon_server.serve_forever)
server_thread.setDaemon(True)
server_thread.start()
Run Code Online (Sandbox Code Playgroud)

我可以连接到主机,服务器可以发送数据,但是当客户端向服务器发送内容时,连接会自动关闭.为什么?谢谢.

sam*_*ias 13

您的handle()方法recv()每个连接只调用一次.如果要处理来自客户端的多条消息,则需要循环.您还应该考虑您的协议,以便您可以处理大于1024字节的请求/响应消息(例如_data,如果您有完整的消息,缓冲部分请求等,则解析并弄清楚).

例如:

def handle(self):
    close = 0
    while not close:
        _data = self.request.recv(1024)
        if not _data:
            # EOF, client closed, just return
            return
        Utils.log("Received from %s: %s" % (self.client_address, _data))
        self.request.send('got %d bytes\r\n' % len(_data))
        if 'quit' in _data:
            close = 1
Run Code Online (Sandbox Code Playgroud)

客户会话:

% telnet localhost 3011
hi
got 4 bytes
bye
got 5 bytes
telnet> quit
Run Code Online (Sandbox Code Playgroud)