您可以为每个客户端使用一个线程以避免阻塞,
client.recv()然后仅将主线程用于侦听新客户端。当一个连接时,主线程创建一个新线程,该新线程仅侦听新客户端,并在60秒钟不讲话时结束。
import socketimport threadingclass ThreadedServer(object): def __init__(self, host, port): self.host = host self.port = port self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind((self.host, self.port)) def listen(self): self.sock.listen(5) while True: client, address = self.sock.accept() client.settimeout(60) threading.Thread(target = self.listenToClient,args = (client,address)).start() def listenToClient(self, client, address): size = 1024 while True: try: data = client.recv(size) if data: # Set the response to echo back the recieved data response = data client.send(response) else: raise error('Client disconnected') except: client.close() return Falseif __name__ == "__main__": while True: port_num = input("Port? ") try: port_num = int(port_num) break except ValueError: pass ThreadedServer('',port_num).listen()客户端闲置60秒后超时,必须重新连接。看到
client.settimeout(60)函数中的行
ThreadedServer.listen()



