Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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 检测clientsocket何时尝试连接到serversocket_Python_Multithreading_Sockets - Fatal编程技术网

Python 检测clientsocket何时尝试连接到serversocket

Python 检测clientsocket何时尝试连接到serversocket,python,multithreading,sockets,Python,Multithreading,Sockets,我创建了一个serversocket并将其绑定到本地端口,然后告诉它在backlog中最多排队5个连接。我想要一种方法来检测clientsocket何时连接到serversocket/backlog何时具有排队连接。我正在一个单独的线程中运行socket.accept(),需要能够停止单独的线程,而当线程挂起到socket.accept()上时,我无法停止单独的线程 原因是我试图让服务器套接字仅在用户运行命令时侦听连接,然后在用户运行其他命令时停止 我想让我的代码读作如下内容: serverso

我创建了一个serversocket并将其绑定到本地端口,然后告诉它在backlog中最多排队5个连接。我想要一种方法来检测clientsocket何时连接到serversocket/backlog何时具有排队连接。我正在一个单独的线程中运行socket.accept(),需要能够停止单独的线程,而当线程挂起到socket.accept()上时,我无法停止单独的线程

原因是我试图让服务器套接字仅在用户运行命令时侦听连接,然后在用户运行其他命令时停止

我想让我的代码读作如下内容:

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind((socket.gethostname(), 1024))
serversocket.listen(5)

class connectListner (threading.Thread):
    def run(self):
        while True:
            if <item in backlog>:
                clientsocket, address = serversocket.accept()
            pass
serversocket=socket.socket(socket.AF\u INET,socket.SOCK\u流)
serversocket.bind((socket.gethostname(),1024))
serversocket.listen(5)
类connectListner(threading.Thread):
def运行(自):
尽管如此:
如果:
clientsocket,地址=serversocket.accept()
通过
然后我可以使用thread.join()停止线程


任何帮助都将不胜感激

我建议您使用将套接字设置为非阻塞模式,并使用
选择
以 知道客户机何时等待接受,因为服务器套接字变得可读:

serversocket.setblocking(False)

readable, writable, err = select.select([serversocket.fileno()], [], [], 1)
if readable:
    clientsocket, address = serversocket.accept()
1秒后,如果未连接任何客户端,则select调用将结束并启动 再次通过
while
循环。因此,如果
readable
为空,则可以退出线程 例如,列表。如果需要,可以为
选择设置较低的超时时间

线程上更精细的粒度控制。

“尝试让服务器套接字仅在用户运行命令时侦听连接,然后在用户运行其他命令时停止”-确定忽略此要求的复杂性,如果要停止侦听器,请设置一些“ServerClose”bool,然后关闭serversocket-accept()然后返回一个错误。这种奇怪的想法是,我使用服务器不是作为数据分发服务器,而是控制客户端,一旦iv'e启动控制,我不想让其他客户端连接,因为控制命令的顺序可能不正确-我知道有更优雅的方法可以做到这一点,但这将是错误的可以通过阻止服务器列出connectionsrunning socket.close()来阻止的其他代码为我提供了一个操作错误,只要一试就可以了,除了:clientsocket,address=serversocket.accept()除了OSerror:breakas这个方法允许我停止接受连接队列连接,然后再次接受它们我更喜欢它-它更灵活