Hãy nói rằng tôi muốn gửi một thông điệp udp để mỗi máy chủ trong subnet của tôi (và sau đó nhận được một thông udp từ bất kỳ máy chủ trong subnet của tôi):Làm thế nào để bạn nhận được địa chỉ quảng bá của máy chủ của bộ điều hợp mạng mặc định? C#
vào lúc này tôi làm:
IPAddress broadcast = IPAddress.Parse("192.168.1.255");
nhưng tất nhiên tôi muốn điều này được thực hiện trong thực tế trong trường hợp mạng con khác với 192.168.1/24. Tôi đã thử với:
IPAddress broadcast = IPAddress.Broadcast;
nhưng IPAddress.Broadcast đại diện cho "255.255.255.255" mà không thể được sử dụng để gửi tin nhắn (nó ném một ngoại lệ) ... như vậy:
làm cách nào để nhận địa chỉ phát sóng bộ điều hợp mạng cục bộ (hoặc netmask của khóa học)?
Đây là giải pháp cuối cùng tôi đã đưa ra
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;
}
Giải pháp đã đăng của bạn hoạt động tốt cho tôi. Tôi đã không cung cấp cho paqogomez trả lời một đi bởi vì bạn đã làm việc dán trực tiếp. Tự hỏi liệu bạn có nên thay đổi và chấp nhận câu trả lời của riêng mình không? – ScottN