我有这个代码
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)
| 归档时间: |
|
| 查看次数: |
5640 次 |
| 最近记录: |