0

問題は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.
4

0 に答える 0