0

オンライン ゲーム用に 2 台のコンピューターをバインドする方法を知りたいです。

Server Socket と Client Socket を使用して作成しましたが、動作します。しかし、このプログラムが実行されている場所がわからない場合、どうすれば同じことができますか? そのため、サーバーが誰なのかわからないため、接続できません。ブロードキャストメッセージを送信できると言われましたが、延々と試行して3日目です...

私はこのように書き込もうとしました(c++ builder 6):

ClientSocket->Socket->SendText("Message");

アドレスとホストは 192.168.0.255 です。そして、1台のコンピューターで同時に2回実行しましたが、機能しません(そのとき何をすべきかわからないため))。

事前にわからないサーバーを見つけるのを手伝ってください。

4

1 に答える 1

1

ブロードキャストメッセージを送信できると言われました

はい、それはそれを行う1つの方法です(それが唯一の方法ではありません)。ただし、これはクライアント PC とサーバー PC が同じネットワークに接続されている場合にのみ機能します。

サーバー アプリは、TCP 用と UDP (IPv4 のみ) またはマルチキャスト (IPv4 または IPv6) 用の 2 つのリッスン ソケットを開くことができます。IPv6 は UDP ブロードキャストをサポートしていないため、代わりにマルチキャストを使用する必要があります。

その後、クライアント アプリは次のことができます。

  1. UDP の場合、接続先のサブネットのブロードキャスト IPv4 アドレスを使用して、UDP ポートにメッセージを送信します。メッセージは、そのサブネットに接続されているすべてのデバイスに配信されます。サーバー PC が同じサブネットに接続されていて、サーバー アプリがブロードキャスト メッセージを受信した場合、ブロードキャストを送信した IPv4 アドレスに応答を返すことができます。クライアント アプリは、応答を受信すると、応答を送信した IPv4 アドレスを認識します。

  2. マルチキャストの場合、サーバー PC のマルチキャスト グループ アドレスにサブスクライブします。サーバーは定期的に現在の IP アドレスをグループに送信でき、同じグループに加入しているクライアントはそれを受信します。クライアントは、メッセージを受信すると、メッセージを送信した IP アドレスを認識します。

クライアントがサーバーの IP アドレスを検出すると、TCP ポートを使用して TCP クライアント ソケットをその IP アドレスに接続できます。

2 台の PC が同じネットワーク上にない場合 (つまり、インターネット経由で接続している場合)、上記は当てはまりません。サーバーは、パブリック Web サイトや動的 DNS サービスなど、クライアントが見つけられる場所に現在の IP アドレスを公開する必要があります。

もちろん、最も簡単な解決策は、サーバー管理者にサーバーの現在の TCP IP/ポートを尋ねることです。その後、必要に応じてそれをクライアント アプリの構成に入力できます。

私は次のように書き込もうとしました (c++ builder 6):
ClientSocket->Socket->SendText("Message");

TClientSocketTCP/IP を使用します。UDP を使用してサブネット ブロードキャストを送信するには、代わりに UDP コンポーネントを使用する必要があります。C++Builder 6には、コンポーネントを持つ FastNet と、コンポーネント持つIndy同梱されています。または、WinSock API を直接使用して独自の UDP ソケット コードを作成することもできます。TNMUDPTIdUDPClientTIdUDPServer

Indy はマルチキャストも提供します

アドレスとホストは 192.168.0.255 です

これは、255.255.255.0 サブネット マスクを持つ IPv4 192.168.0.x サブネットのブロードキャスト IP アドレスです。これが実際のサブネット構成であり、クライアント PC とサーバー PC の両方が 192.168.0.x サブネットに接続されている場合、その IP アドレスに UDP ブロードキャスト メッセージを送信できます。

サブネット ブロードキャスト IP アドレスを取得するには、次のいずれかを実行できます。

  1. 手動で計算します。GetAdaptersInfo()またはを使用してローカル PC の現在の IPv4 アドレスとサブネット マスクを取得し、演算子GetAdaptersAddresses()を使用して IP アドレスのビットをサブネット マスクのビットでマスクし、その結果をネットワーク マスクの反転ビットでマスクします。ANDOR

  2. Windowsに聞いてください。ソケットを作成し、bind()それを目的のローカル ネットワーク アダプターに接続します。次にWSAIoctl(SIO_GET_BROADCAST_ADDRESS)、そのネットワークに関連付けられたブロードキャスト IP アドレスを照会するために使用します。

于 2016-03-28T22:03:34.553 に答える