0

我创建了一个 serversocket 并将其绑定到本地端口,然后告诉它在 backlog 中最多排队 5 个连接。我想要一种方法来检测客户端套接字何时连接到服务器套接字/当积压有排队连接时。我在一个单独的线程中运行 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

然后我可以使用 thread.join() 来停止线程

任何帮助,将不胜感激

4

1 回答 1

1

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

serversocket.setblocking(False)

readable, writable, err = select.select([serversocket.fileno()], [], [], 1)
if readable:
    clientsocket, address = serversocket.accept()

1 秒后,如果没有连接客户端,则 select 调用结束,并将由您的while循环再次启动。因此,例如,如果readable是一个空列表,您可以退出线程。select如果您需要对线程进行更细粒度的控制,请随意设置较低的超时时间。

于 2013-10-06T18:51:38.033 回答