2012-01-23 6 views
0

これは動作しますか?非同期ソケットは複数のクライアントに同時にメッセージを送信することをサポートしていますか?

Socket someUdpSocket = new Socket(...); 
EndPoint[] aLotOfClients = { ... }; 

foreach (EndPoint ep in aLotOfClients) 
{ 
    someUdpSocket.BeginSendTo(someData, 0, someData.Length, 
           SocketFlags.None, ep, 
           new AsyncCallback(someMethod), ep); 
} 

私はこの質問に対する回答を見つけることができませんでした。

+0

試してみるとどうなりますか? 2つのコマンドラインクライアントを使用してループとコールバックメソッドをトレースします。 – bryanmac

+0

ソケットの構築方法のコードは表示されません。しかし、その答えはUDP(Raw \ Dgramソケットタイプ)では "yes"です。 TCP(ストリームソケットタイプ)の場合は「いいえ」です。 – selbie

答えて

1

ソケットは、同期ソケットまたは非同期ソケットであるかどうかにかかわらず、一度に1つのアドレスにしかデータを送信できません。

しかし、(IP層で作業していると仮定して)一連の特別なアドレスにデータを送信することができます。これは、ブロードキャストアドレスと呼ばれます。一度に複数のクライアントにデータを送信するための2つの異なる機能:ブロードキャストとマルチキャスト。

ブロードキャストはネットワークに接続されているすべてのクライアントに配信されますが、ほとんどのネットワークはブロードキャストにいくつかの制限を設けています。あなたのサブネットのブロードキャストアドレスは、サブネットマスクによって定義されたサブネット内の最後のアドレスです。複数のサブネットなどにブロードキャストすることもできます。

マルチキャストはチャットルームのようなものです。 IPV4で予約されているマルチキャストアドレスのセットがあり、アドレスで識別されたマルチキャストグループに参加したり、許可したりすることができます。グループに何らかのデータを送信すると、ネットワークハードウェアは、グループに参加したすべてのレシーバにパケットのコピーを確実に配信します。

私は、マルチキャストとブロードキャスト(rfcのisnt悪いのいずれかを読む)のためにあなたの周りにお勧めします、私はあなたが始めることができれば願っています。

関連する問題