2

プログラムの 2 つのインスタンスを実行し、それらを相互に接続できますが、別の IP の他の誰かがサーバーに接続しようとすると、ソケットの接続に失敗します。私のコードには、ユーザーのコンピューターの IP が入力されていませんが、(サーバーを実行しているのは私だけなので) 私の IP がハードコードされています。

サーバークラスの接続関数は次のとおりです。

def connect(self,host,port):
    self.host = host
    self.port = port
    self.unconnected_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.unconnected_socket.bind((self.host,self.port))
    self.unconnected_socket.listen(5)

これは、プログラムがゲームを作成するときです

self.server = server.Server()
self.server.connect(ip,port) #ip is my computer's ip address
self.serverThread = Thread(target=self.server.serve_forever)
self.serverThread.daemon = True
self.serverThread.start()
self.client.connect(ip,port)

次に、クラスのクライアント接続関数を示します。

def connect(self,host,port):
    self.host = host
    self.port = port
    self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.socket.connect((self.host,self.port))

別のコンピューターで誰かがプログラムを実行しているが、ゲームに参加することを選択した場合:

self.client.connect(ip,port)

pygames の Mastermind Networking Lib - 1.5.2 を少し変更して使用しています。

4

1 に答える 1

1

127.0.0.1盲目的な推測: サーバーをアドレス(または)にバインドしている可能性がありますlocalhost。このアドレスは、アウトバウンド接続から到達できません。代わりに、バインドされたアドレスのホストをsocket.INADDR_ANY

于 2012-08-03T06:31:29.943 に答える