如何获得主机的默认网络适配器的广播地址? C#

假设我想将udp消息发送到子网中的每个主机(然后从我子网中的任何主机接收udp消息):

目前我这样做:

IPAddress broadcast = IPAddress.Parse("192.168.1.255"); 

但是当然,如​​果子网与192.168.1 / 24不同,我希望这可以通过dinamically完成。 我尝试过:

 IPAddress broadcast = IPAddress.Broadcast; 

但IPAddress.Broadcast代表“255.255.255.255”,它不能用于发送消息(它抛出exception)…所以:

我如何获得本地网络适配器广播地址(或网络掩码)?

这是我参加的最终解决方案

 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; } 

如果您获得本地IP和子网,则计算应该没有问题。

这样的事可能吗?

 using System; using System.Net.NetworkInformation; public class test { public static void Main() { NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach(NetworkInterface Interface in Interfaces) { if(Interface.NetworkInterfaceType == NetworkInterfaceType.Loopback) continue; if (Interface.OperationalStatus != OperationalStatus.Up) continue; Console.WriteLine(Interface.Description); UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses; foreach(UnicastIPAddressInformation UnicatIPInfo in UnicastIPInfoCol) { Console.WriteLine("\tIP Address is {0}", UnicatIPInfo.Address); Console.WriteLine("\tSubnet Mask is {0}", UnicatIPInfo.IPv4Mask); } } } } 

如何在给出IP地址和网络掩码时计算IP范围? 应该给你其余的。

Interesting Posts