我用“select”编写了一个基本的套接字系统。我想立即获得连接的客户端列表。
当“选择”的超时时间过去了,几个客户来了,这就是戏剧。
示例 - 问题:我有 3 个客户端,其中一个在超时前连接,另外 2 个在超时后连接,所以如果在超时后考虑到另外两个客户端,我将刷新我的列表。
第一个结果:我显示我的变量“列表”,我看到在超时前连接的第一个套接字 + 在超时后连接的另一个套接字。总计:3 个客户中的 2 个
第二个结果:我仍然重新显示我的变量“列表”,三个客户端都在那里....
但是我想要这个列表,而不必每次都为每个客户重新显示列表,你可以想象我有 10 个客户,我必须显示我的列表 10 次
所以我想用更流畅的asyncore模块,你觉得呢?你有我的解决方案(更简单)吗?我应该使用多线程还是留在异步或选择模块上?
编辑代码源:
import socket, select
hote = ''
port = 81
mainConnection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mainConnection.bind((hote, port))
mainConnection.listen(5)
print("Listen to {}".format(port))
client_online = []
while True:
connection_access, wlist, xlist = select.select([mainConnection], [], [], 10)
for connexion in connection_access:
connection_client, infos_connexion = connexion.accept()
client_online.append(connection_client)
refresh = input(">>> ")
while True:
try:
refresh = int(refresh)
except ValueError:
print("Not allowed")
refresh = int(refresh)
else:
break
if refresh == 1:
print("List client : {}".format(client_online))