gpt4 book ai didi

python - 套接字刷新Python

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:54 24 4
gpt4 key购买 nike

我用“select”编写了一个基本的套接字系统。我想立即获取已连接客户端的列表。

当“select”的超时时间过去并且几个客户端随后到来时,这就是戏剧性的事情..

示例 - 关注点:我有 3 个客户端,其中一个在超时之前连接,另外 2 个客户端在超时后连接,因此如果在超时后考虑到其他两个客户端,我将刷新我的列表。

第一个结果:我显示变量“列表”,我看到超时前连接的第一个套接字+超时后连接的另一个套接字。总数:3 个客户中的 2 个

第二个结果:我仍然重新显示我的变量“列表”,并且三个客户端都在那里......

但我想要列表,而不必每次为每个客户重新显示列表,你可以想象我有 10 个客户,我必须显示我的列表 10 次

所以我想到使用更流畅的asyncore模块,你觉得怎么样?你有一个解决方案给我吗(更简单)?我应该使用多线程还是留在 asyncore 或 select 模块上?

编辑代码来源:

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))

最佳答案

您的代码存在三个主要问题:

  1. 您在循环中调用input。此函数将阻塞,直到按下ENTER为止。

  2. 如果从控制台输入非整数,则会出现异常。您处理了该异常,但处理错误。您只需尝试再次执行导致异常的相同操作,而不是再次要求输入。

  3. 您仅在 select 调用中检查传入连接。您永远不会检查任何连接的套接字是否发送了任何内容。

这里对您来说的主要问题是对 input 的调用,因为它会完全停止您的程序,直到输入来自控制台的输入。

关于python - 套接字刷新Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com