問題は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:
のペーストビンにあります(キャッチ
があることに注意してくださいTypeError
)
selectモジュールを正しく解釈していないことを誰かが親切に説明してくれれば、とても感謝しています。私は愚かな質問をしたくありません。
エラーが発生しました:
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.