Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Socketserver客户端超时_Python_Sockets - Fatal编程技术网

Python Socketserver客户端超时

Python Socketserver客户端超时,python,sockets,Python,Sockets,我有一个Python中的socketserver,它必须使用select.select方法处理多个客户端,如下面的代码所示: import socket import select class Server: def __init__(self): self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.bind(('localhost', 2000))

我有一个Python中的socketserver,它必须使用select.select方法处理多个客户端,如下面的代码所示:

import socket
import select


class Server:

    def __init__(self):
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server.bind(('localhost', 2000))
        self.socket_list = [self.server]
        self.addresses = ['localhost']
        self.commands = [""]
        self.running = True
        self.server.listen(10)

    def listen(self):
        while self.running:
            read, write, error = select.select(self.socket_list, [], self.socket_list, 0)
            for sock in read:
                if sock == self.server and self.running:
                    try:
                        conn, address = self.server.accept()
                        conn.settimeout(30)
                        self.socket_list.append(conn)
                        self.addresses.append(address[0])
                        self.commands.append("")
                    except:
                        self.shutdown()
                        break
                elif self.running:
                    try:
                        packet = sock.recv(60)
                        if not packet:
                            self.close_conn(sock)
                        index = self.socket_list.index(sock)
                        self.commands[index] += packet
                        if '\n' in self.commands[index]:
                            #handle command
                    except:
                        self.close_conn(sock)

    def close_conn(self, conn):
        #close client conn

    def shutdown(self):
        #shutdown server


if __name__ == "__main__":
    Server().listen()
我目前的问题是,客户端的连接应该在30秒后关闭,但这并没有发生,尽管我使用conn.settimeout(30)声明了这一点。我还没有找到任何解释来解释为什么会发生这种情况

注意:注释用于替换与问题无关的部分代码。

也许这会有帮助也许这会有帮助