1

私は .NET 2.0 を使用しており、かなり単純な udp ブロードキャスト アプリと UDP リスナーを作成しました。

リスナー コード:

Socket listener = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp );
IPEndPoint localEndPoint = new IPEndPoint( IPAddress.Any, 11000 );
listener.Bind( localEndPoint );
EndPoint ep = (EndPoint)localEndPoint;
Console.WriteLine("Ready to receive…");
byte[] data = new byte[1024];
int recv = listener.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
listener.Close();

サーバーコード:

int groupPort = 11000;
IPEndPoint groupEP = new IPEndPoint( IPAddress.Parse( "255.255.255.255" ), groupPort );

if ( radioButton2.Checked )
{
    groupEP = new IPEndPoint( IPAddress.Broadcast, groupPort );
}
    else if ( radioButton3.Checked )
{
    groupEP = new IPEndPoint( IPAddress.Parse( "172.16.75.15" ), groupPort );
}

Socket socket = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp );
socket.SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1 );
socket.SendTo( System.Text.ASCIIEncoding.ASCII.GetBytes( testTextBox.Text ), groupEP );

サーバーは、3 つのラジオ ボタン、ボタン、およびテキスト ボックスを備えた単純な Windows アプリです。

別のコンピューターでサーバーを実行し、radioButton3 を選択すると、クライアント リスナー (IP アドレス 172.16.75.15 で実行されている) で問題なくメッセージを受信します。ただし、最初または 2 番目のラジオボタン (IP アドレスとしてブロードキャストまたは 255.255.255.255 を作成する) を選択すると、何も表示されません。サーバーと同じPCでクライアントを実行すると、これら2つの選択肢を使用してメッセージを受信できます。

何が間違っているのか、またはLAN上のUDPメッセージを防止する何らかのファイアウォールが存在する可能性があるかどうかはわかりません. 何か案は?

ありがとう、

クレイグ

4

7 に答える 7

4

ローカル サブネットのみでブロードキャストを試行します。IE でサブネットが 255.255.255.0 の場合、172.16.75.255 のブロードキャストを試してください。Windows、ルーター、またはネットワーク カードでさえ、予防策としてユニバーサル ブロードキャストを自動的にブロックしている可能性があります。

于 2009-07-20T21:36:22.220 に答える
1

同様の問題がありました。ここで見たすべてのコードで何も機能していないようです。プログラムを開始すると、ファイアウォールがいくつかの機能をブロックしていることを知らせるファイアウォール ウィンドウがポップアップ表示されました。

私の問題は、「プライベートネットワーク、自宅または職場のネットワークとして吸う」というチェックボックスをオンにせずにアクセスを許可するをクリックしていたことです。もちろん、後でファイアウォール設定でこれを変更し、そのチェックボックスをオンにすることができます。サーバーと他のマシンの両方で、そのチェック ボックスがオンになっている必要があります。または、少なくともそれが私の鉱山を機能させるものです。

また、ブロードキャスト IP アドレスを 192.168.1.255 などに変更する必要がありました。私のルーターは、私の本で推奨されている 224.0.0.0 - 239.255.255.255 をブロックします。

于 2015-04-14T04:43:25.977 に答える
1

クライアントはサーバーと同じ物理ネットワーク上にありますか? そうでない場合は、ローカル ブロードキャスト (255.255.255.255) を行うことができず、ダイレクト サブネット ブロードキャストを行う必要があります。ルーターを有効にして、ダイレクト サブネット ブロードキャスト (172.16.75.255) を許可する必要があります。

于 2009-07-20T22:00:25.650 に答える
0

私はちょうどあなたのコードを試してみて、私のために働きました. 私が変更した唯一のことは、サーバーのローカル IP アドレスと一致するように IP アドレスを変更したことです。

于 2012-03-05T20:54:08.103 に答える
0

注意点ですが、新しいアプリを一から作成している場合は、ブロードキャストではなくマルチキャストを使用する必要があります。

于 2009-07-20T21:57:35.467 に答える
0

Craig さん、ブロードキャストを使用して C# udp クライアント/サーバー ツールを開発しました。これは機能します (同じサブネット上のすべてのクライアントがデータグラムを受信します)。255.255.255.255は避けてください。ウィンドウは常に正しいルートを取るとは限りません。適切なサブネットを指定するウィンドウを支援する必要があります。サーバー : udp ソケットを 172.16.75.15 にバインドし、ローカル ブロードキャスト アドレスに送信します (172.16.75.255 についてよろしいですか? サブネット マスクを確認してください)。

于 2013-07-24T00:47:05.057 に答える