问题直接出select.select
在我的套接字服务器中的线路上。
r_list, w_list, x_list = select.select(U_Connections + [ss], Username_List, [])
在哪里:
Username_List = []
U_Connections = []
问题在于Username_List
。
Username_List
只应该做一件事,那就是存储服务器接收到的用户名。每当服务器接收到数据时,它都会检查它是否在Username_List
.
如果它在那里,它会继续前进,并忽略接收到的数据。
如果不是,它将数据添加到列表中,然后向所有连接的客户端发送新用户名。这是程序崩溃的地方。
if data:
translated_data = data.decode()
print(translated_data)
print("2")
if translated_data in Username_List:
pass
else:
translated_data_string = str(translated_data)
Username_List.append(translated_data_string) <--- HERE
print("3")
一旦这个阶段完成,while 循环就会重新执行。并在此过程中遇到一个TypeError
. 每当将任何内容添加到w_list
.
我做错了什么,我应该如何使用该select
模块来完成这项工作?
我需要做的就是将用户名附加到列表中,然后如果它收到的用户名不在现有列表中,则将其发送给每个人。
我一直在尝试解决此问题,并环顾四周,但似乎找不到解决方法。
我读到这个:
“换句话说:每个参数必须是一个平面序列,不允许嵌套。”
在这个线程中。但我真的不明白做错了什么。
服务器的完整代码在这里except:
的pastebin上
(注意我有一个TypeError
)
如果有人可以请解释我如何没有正确解释选择模块,我将不胜感激。我不想问愚蠢的问题。
遇到的错误:
Traceback (most recent call last):
File "C:\Users\Owatch\Documents\Unisung\Produced Content\NetSendClient[0.7]\NetSendClient[0.7]\NetSendClient\files\Program_Files\Username_Server.py", line 23, in <module>
r_list, w_list, x_list = select.select(U_Connections + [ss], Username_List, [])
TypeError: argument must be an int, or have a fileno() method.