C#言語

【C#】NICを指定してMulticastを受信する方法

はじめに

NIC を指定して Multicast を受信する方法をご紹介します。

複数の NIC(Network Interface Card)が実装されているパソコンが増えてきており、
情報を探しておられる方も多いはず。

Socket をローカルホストのエンドポイントへ Bind するだけではダメで、
最初に見つかった NIC を使って IGPM(マルチキャストグループ参加)を投げてしまう。

C# で書いていて、少しハマったので備忘録として本記事を記載します。

 

ネットワーク構成

Windows マシンが 2 つの NIC を搭載していて、それぞれ

  • NIC1:192.168.10.0/24
  • NIC2:192.168.56.0/24

のサブネットに属しているネットワーク構成です。

NIC2 の方のサブネットにネットワークカメラが接続されており、
そのカメラがマルチキャストでストリーム配信している状態です。

SANACHAN
このストリーム配信を受信するのが目的です。

 

Multicast を受信するためのコード

 呼び出し
CreateMulticastSocket("224.1.1.2", 5004, "192.168.56.2");

 

解説

28~31行目で、ローカルホストのIPアドレスを元に IPEndPoint を作成し、
Socket.Bind でバインドしていますが、これだけでは異なる NIC の方へ IGPM を投げてしまいます。

Multicast を受信したい NIC を指定したい場合は、AddMembership で指定する
MulticastOption を生成する際、NIC の Index を指定する必要があります。

SANACHAN
Index を引っ張り出すのが面倒(汗)

 

おわりに

Bind してるんだから、気を利かせてくれよ。。。(愚痴)

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-C#言語
-, ,