【发布时间】:2020-02-02 08:19:51
【问题描述】:
目前,我的代码只允许有限数量的套接字连接。这由变量 No_Of_Connections 决定。
我的问题是:我如何使它不是有限的?这意味着我不必对连接数进行硬编码。当客户端关闭连接时,我还需要能够终止或加入线程。
非常感谢任何帮助。谢谢!
def Main():
HOST = '192.168.2.9'
PORT = 65533
No_Of_Connections = 10
trds = []
s = socket(AF_INET, SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(No_Of_Connections)
print("Server is running on port: " + str(PORT))
try:
for i in range(No_Of_Connections):
c, addr = s.accept()
clients.append(c)
t = Thread(target=clientHandler, args=(s, c, addr))
trds.append(t)
t.start()
for t in trds:
t.join()
except KeyboardInterrupt:
print("caught keyboard interrupt in main, exiting")
s.close()
except Exception as e:
print('Socket Server error: ' + str(e))
【问题讨论】:
-
将
for i in range(No_Of_Connections):更改为while True: -
... 并从
s.listen(No_Of_Connections)中删除 backlog 参数,无论如何都没有必要。 -
@EdWard 如果我这样做,当用户关闭连接时它将如何终止线程?
-
@Clifford 你的意思是把它设置为 s.listen() 而不是 s.listen(no_of_connections)?
-
@MDanial:
listen的参数与您的代码能够接受的连接数完全无关。请参阅 here 以了解此参数的用途。此外,您不能拥有无限数量的套接字,因为操作系统会对此进行限制。但是您至少可以拥有不受应用程序设计限制的数量。
标签: python sockets serversocket