如何让Python socketserver保持Socket连接以接收多个请求?
让TCP服务器保持连接以处理单个Socket的多个请求
你的问题出在服务器的handle方法逻辑上:当前代码只处理一次客户端请求就结束了,socketserver框架会在handle方法执行完毕后自动关闭与客户端的连接,所以第二次发送请求时会触发连接中止错误。
要实现单个Socket连接下处理多个请求,只需要修改handle方法,让它循环接收客户端的消息,直到客户端主动断开连接:
import socketserver class MyTCPServer(socketserver.BaseRequestHandler): def handle(self): # 循环处理当前连接的所有请求 while True: try: message = self.request.recv(4096) # recv返回空字节串,表示客户端已关闭连接 if not message: break self.request.sendall(b'hello') except Exception as e: # 处理连接异常,比如客户端强制断开 print(f"连接出现异常: {e}") break server = socketserver.TCPServer(('127.0.0.1', 4444), MyTCPServer) server.serve_forever()
修改说明:
- 添加
while True循环,让handle方法持续监听当前连接的消息 - 通过
if not message判断客户端是否关闭连接:当客户端调用s.close()时,recv会返回空字节串,此时退出循环,结束当前连接的处理 - 增加异常捕获,避免客户端意外断开导致服务器抛出未处理的异常
修改后,你的客户端代码不需要做任何改动,就可以通过同一个Socket连接发送多次请求了。
内容的提问来源于stack exchange,提问作者SomethingSomething
相关产品推荐
相关产品推荐

