比方說,我想在我的子網發送一個UDP報文到每個主機(然後從我的子網中的主機收到UDP報文):此刻如何獲取默認網絡適配器的主機廣播地址? C#
我做的:
IPAddress broadcast = IPAddress.Parse("192.168.1.255");
但我當然希望在子網不同於192.168.1/24的情況下進行此操作。我試着:
IPAddress broadcast = IPAddress.Broadcast;
但IPAddress.Broadcast表示不能被用來發送消息(它拋出一個異常)「255.255.255.255」 ......這樣:
我該怎麼辦獲取本地網絡適配器的廣播地址(或者當然是網絡掩碼)?
這是最後的解決方案,我想出了
public IPAddress getBroadcastIP()
{
IPAddress maskIP = getHostMask();
IPAddress hostIP = getHostIP();
if (maskIP==null || hostIP == null)
return null;
byte[] complementedMaskBytes = new byte[4];
byte[] broadcastIPBytes = new byte[4];
for (int i = 0; i < 4; i++)
{
complementedMaskBytes[i] = (byte) ~ (maskIP.GetAddressBytes().ElementAt(i));
broadcastIPBytes[i] = (byte) ((hostIP.GetAddressBytes().ElementAt(i))|complementedMaskBytes[i]);
}
return new IPAddress(broadcastIPBytes);
}
private IPAddress getHostMask()
{
NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface Interface in Interfaces)
{
IPAddress hostIP = getHostIP();
UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses;
foreach (UnicastIPAddressInformation UnicatIPInfo in UnicastIPInfoCol)
{
if (UnicatIPInfo.Address.ToString() == hostIP.ToString())
{
return UnicatIPInfo.IPv4Mask;
}
}
}
return null;
}
private IPAddress getHostIP()
{
foreach (IPAddress ip in (Dns.GetHostEntry(Dns.GetHostName())).AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
return ip;
}
return null;
}
您發佈的解決方案適合我。我沒有給paqogomez答案,因爲你的直接粘貼。想知道你是否應該改變並接受你自己的答案? – ScottN