2016-03-28 14 views
0

私が欲しいのは、私のオンラインゲームで2台のコンピュータをバインドする方法を知ることです。C++ Builder 6でブロードキャストメッセージを送信するにはどうすればいいですか?

私はServer SocketとClient Socketを使用して作成しました。しかし、このプログラムがどこで実行されているのかわからない場合は、どうすればいいのですか?だから、私は誰がサーバーであるかわからないので接続できません。私は、私はこの(C++ Builderの6)のようにそれを書き込もうとしました

...私はブロードキャストメッセージを送ることができると言われたが、今ではそれを行うには、私の無限の試みの三日目だた:

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

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

私が前もって知らないサーバーを見つけるのを手伝ってください。

+0

ブロードキャストには多くのオンライン資料があります。 * UDPブロードキャスト*のようなものを探してください。 – SergeyA

+0

私は知っているが、ビルダーでこれを行う方法? –

+0

これにはUDPクライアント/サーバーコンポーネントを使用する必要があります。 'TClientSocket'と' TServerServer'はTCP用です。 –

答えて

1

私は、私はそれを行うための一つの方法であるブロードキャストメッセージ

は、はい(それが唯一の方法ではありません)送ることができると言われました。ただし、クライアントPCとサーバーPCが同じネットワークに接続されている場合にのみ動作します。

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

クライアントアプリケーションは、次のことができます。

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

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

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

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

もちろん、最も簡単な解決策は、サーバー管理者にサーバーの現在のTCP IP /ポートを問い合わせてから、必要に応じてクライアントアプリケーションの構成に入力することができます。

私はこの(C++ Builderの6)のようにそれを書き込もうとしました:
ClientSocket-> Socket-> SendText( "メッセージ");

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

インディは、アドレスとホストが255.255.255.0サブネットを持つIPv4の192.168.0.xのサブネットのブロードキャストIPアドレスである192.168.0.255

マルチキャスト

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

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

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

  2. Windowsにお問い合わせください。希望のローカルネットワークアダプタにソケットとbind()を作成します。 WSAIoctl(SIO_GET_BROADCAST_ADDRESS)を使用して、そのネットワークに関連付けられたブロードキャストIPアドレスを照会します。

関連する問題