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