4

答えを探してみましたが、特定の問題に答える答えが見つからないようです。

おそらく、問題を正しく表現する方法がわかりません。

それが何であるかを特定したと思いますが、問題は、それを修正する方法がわからないということです。

編集: 1 つの TCP ソケットで 2 つのクライアントを使用しようとしていました。それはできません。別の方法を考えなければなりません。解決したと思います。

だから私が持っているのは

1: 2 つのクライアント

2: 1 つのサーバー

目的は次のとおり です。接続時にサーバーが新しいユーザー名をすべてのクライアントに配布するようにします。

プログラムを実行すると、次のようになります。

サーバー: ホストとポートを定義し、初期化します。小切手

クライアント 1 : サーバーに接続します。小切手

クライアント 1 : 接続すると、文字列がサーバーに送信されます。小切手

サーバー: 文字列を受け取り、その文字列が作成されたリストにあるかどうかを確認します。そうである場合: 合格、そうでない場合は、全員に新しい文字列を送信します。小切手

クライアント 1 : [データの受信待ち]データを受信し、受信した文字列が送信した文字列と一致するかどうかを確認します。そうであれば、print("It's one of ours!")、そうでなければ、新しい文字列 = をクライアント 2 のユーザー名にします。 小切手

クライアント 2:サーバーに接続: チェック

サーバー: [文字列を受信した場合は、それを出力します。] (機能) 新しい文字列がリストにあるかどうかを確認します。[そうではありません] 新しいユーザー名を全員に送信し、出力します (「全員に送信しました」)チェック

ただし、クライアント 2 が文字列を受信すると、それを出力します。ただし、クライアント 1 は文字列を受け取りません。

クライアント 1 を IDLE で実行しているときに、クライアント 1 がデータを受信しようとしたときに問題が発生したことに気付きました。( data = s.recv が待機する代わりに、非常に高速にループを開始した while ループ)

チャットで聞いてみたのですが、今は誰もいないみたいです。これを調べてみましたが、本当に答えが見つかりません。私が疑っているのは、サーバーが 'connection' に 2 度目に送信するときに、元のクライアント接続を何らかの形でオーバーライドすることです。

ここに私のサーバーコードがあります:

from socket import *
import threading
import os
import csv

Username_List = []

host = input("Host: ")
port = input("Port: ")

ss = socket(AF_INET,SOCK_STREAM)
ss.bind((host,int(port)))
ss.listen(2)




while True:
    try:
        connection,address = ss.accept()
        data = connection.recv(1024)
        if data:
            translated_data = data.decode()
            print(translated_data)

            if translated_data in Username_List:
                pass
            else:
                Username_List.append(translated_data)
                connection.sendall(translated_data.encode())
                print("Sent new username to everyone")
    except IOError:
        connection.close()
        print("An exception with a connected user occured")
        break

そして、これが私のクライアントコードです:[クライアント1と2の唯一の違いは、ユーザー名変数を変更したことです]

# Sample Username Client Service Handler.
from socket import *
import threading
import os
import csv

Username = ("Owatch")
host = input("Host: ")
port = input("Port: ")
try:

    ss = socket(AF_INET,SOCK_STREAM)
    ss.connect((host,int(port)))
except IOError:
    print("Aw no man")

ss.send(Username.encode())

while True:
    try:
        print("Waiting to Recieve Data")
        data = ss.recv(1024)
        if data:
            translated_data = data.decode()
            print(translated_data)
            if translated_data == Username:
                print("It's one of ours!")

            else:
                Client_Username = translated_data
                print (Client_Username)


    except Exception as e:
        print (vars(e))

助けていただければ幸いです。

すでに尋ねられている私の質問への回答を知っている場合は、教えてください。ルールに違反しないように、この投稿を削除します. ありがとう!

4

1 に答える 1