複数のNICがあるときのC#のUdpClientでブロードキャスト送信時の注意
C#でマルチキャストを送信する際、複数のNICがあったりIPv6とIPv4共に割り当てられたりすると思った通りに送信されないことがある。
その場合UdpClientのコンストラクタに自身のアドレスとして個々のNICのアドレスを指定してあげれば送信できる。
// 使えるネットワークカードを列挙
var nis = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
.Where(v => v.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up);
// ユニキャストアドレスをすべて列挙
var UniAddresses = nis.SelectMany(v => v.GetIPProperties().UnicastAddresses);
foreach (var address in UniAddresses)
{
// アドレス毎に送信
using (var UdpClient = new System.Net.Sockets.UdpClient(LocalEndPoint))
{
// マルチキャストで送信
var multicastEP = LocalEndPoint;// 実際はここで最適なアドレスを指定してください
UdpClient.Send(bytes, bytes.Length, multicastEP);
}
}