C# で ブロードキャスト 送信 / 受信 する 方法

1 件のコメント

ブロードキャスト で データを送信する場合、 UDP 通信 を利用して行います。 具体的なクラス名だと Socket クラス または UdpClient クラス を利用します。 ここでは、UdpClient を利用して、ブロードキャスト にデータを送信 または ブロードキャストに送信されたデータを受信する サンプルコード を掲載します。

ここで言う ブロードキャストアドレス は リミテッド・ブロードキャストアドレス (255.255.255.255) というアドレスに送信する例としています。 結果としては ローカルブロードキャストアドレス と同じホストへ送信することになりますが、ネットワーク を超えることができない(ルーターを越えられない)点に注意してください。

目次

ブロードキャスト 送信 (クライアント)

ブロードキャストアドレス は IPAddress.Broadcst で取得できます。 この値を利用して、 UDP で ブロードキャスト 送信 します。 ブロードキャスト送信する際は EnableBroadcast プロパティ に true を設定する点に注意してください。

private void SendBroadcastMessage(string data)
{
    // 送受信に利用するポート番号
    var port = 8000;

    // 送信データ
    var buffer = Encoding.UTF8.GetBytes(data);

    // ブロードキャスト送信
    var client = new UdpClient(port);
    client.EnableBroadcast = true;
    client.Connect(new IPEndPoint(IPAddress.Broadcast, port));
    client.Send(buffer, buffer.Length);
    client.Close();
}

ブロードキャスト 受信 (サーバー)

ブロードキャスト送信に対してはどこからデータが飛んでくるかわからないので、すべてのアドレスに対して監視を行います。 すべてのアドレスを表現するため、 IPAddress.Any を利用します。 このサンプルコードでは、ポート番号だけは取り決めごととしてあらかじめ決められている前提で記述しています。

private void ListenBroadcastMessage()
{
    // 送受信に利用するポート番号
    var port = 8000;

    // ブロードキャストを監視するエンドポイント
    var remote = new IPEndPoint(IPAddress.Any, port);

    // UdpClientを生成
    var client = new UdpClient(port);

    // データ受信を待機(同期処理なので受信完了まで処理が止まる)
    // 受信した際は、 remote にどの IPアドレス から受信したかが上書きされる
    var buffer = client.Receive(ref remote);

    // 受信データを変換
    var data = Encoding.UTF8.GetString(buffer);

    // 受信イベントを実行
    this.OnReceive(data);
}

private void OnReceive(string data)
{
    // 受信処理...
}
  1. クライアント側のソースについてですが、UdpClientのインスタンス生成の時ポート番号を指定してしまうと、バインドされてしまいます。
    クライアント時には、コンストラクタにはポート番号が不要と思われます。

    返信削除