3

私はただ遊んでいて、に設定するか、または(副作用がないUdpClientことに気づきました)、どちらの方法でもブロードキャストできます:UdpClient.EnableBroadcasttruefalse

using (UdpClient client = new UdpClient())
{
    byte[] data = Encoding.ASCII.GetBytes("Hello");
    while (true)
    {
        client.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, 45678));
        Console.WriteLine("sent");
        Console.ReadKey();
    }
}

MSDN ページはこれについてかなり曖昧ですが、プロパティを次のように設定してブロードキャストすると、例外が発生するはずですfalse

UdpClient がブロードキャスト パケットを送受信できるかどうかを指定するブール値を取得または設定します。... UdpClient がブロードキャスト パケットを許可する場合は true。それ以外の場合は false。デフォルトは false です。

重大な問題ではありませんが、不思議に思いました。これはバグですか、それともプロパティはそこにあるので、後で参照して、ブロードキャストするつもりかどうかを確認できますか?

4

1 に答える 1

0

udp ソケットを初期化するときにブロードキャスト モードを有効にする必要があります。

this.someUdpSocket.EnableBroadcast = true;
this.someUdpSocket.Client.Bind(new IPEndPoint(IPAddress.Any, 0));

新しい編集:

上記は機能せず、以下のコード

this.someUdpSocket.Client.EnableBroadcast = false;

も目的を果たせません。あなたの答えについては、「はい、それはバグと呼ばれるか、プロパティが他のコンテキストに関連している可能性があります。」

ただし、ブロードキャストを明示的に無効にしたい場合は、次のようにできます。

this.someUdpSocket.Client.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.Broadcast, false);

モチベーションをありがとう。

于 2012-11-13T13:48:39.283 に答える