当clientsocket尝试连接到服务器时检测

2024-05-15 22:11:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我希望我的代码读起来像:

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

然后我可以使用螺纹连接()停止线程

任何帮助都将不胜感激


Tags: 方法端口代码用户命令服务器原因socket
1条回答
网友
1楼 · 发布于 2024-05-15 22:11:00

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

serversocket.setblocking(False)

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

1秒后,如果没有客户端连接,select调用结束,并将启动 再次通过您的while循环。因此,如果readable为空,则可以退出线程 例如,列表。如果需要,可以为select设置较低的超时 更精细的线纹控制。在

相关问题 更多 >