gpt4 book ai didi

c# - 如何动态获取本地 IP 广播地址 C#

转载 作者:太空宇宙 更新时间:2023-11-03 18:07:12 37 4
gpt4 key购买 nike

我的第一个问题是,C# UDP Chat receive no message ,解决此问题的一种尝试是避免。

IPAddress.Broadcast

于是我写了一个判断本地广播的函数:

    private IPAddress get_broadcast()
{
try
{
string ipadress;
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); // get a list of all local IPs
IPAddress localIpAddress = ipHostInfo.AddressList[0]; // choose the first of the list
ipadress = Convert.ToString(localIpAddress); // convert to string
ipadress = ipadress.Substring(0, ipadress.LastIndexOf(".")+1); // cuts of the last octet of the given IP
ipadress += "255"; // adds 255 witch represents the local broadcast
return IPAddress.Parse(ipadress);
}
catch (Exception e)
{
errorHandler(e);
return IPAddress.Parse("127.0.0.1");// in case of error return the local loopback
}
}

但这只适用于/24 网络我经常在/24(在家)和/16(在工作)网络之间切换。所以硬编码的子网掩码不符合我的要求。

那么,有没有不用“IPAddress.Broadcast”来判断本地广播的好方法呢?

最佳答案

我知道这是旧的,但我不喜欢这个循环,所以这里还有一个解决方案:

    public static IPAddress GetBroadcastAddress(UnicastIPAddressInformation unicastAddress)
{
return GetBroadcastAddress(unicastAddress.Address, unicastAddress.IPv4Mask);
}

public static IPAddress GetBroadcastAddress(IPAddress address, IPAddress mask)
{
uint ipAddress = BitConverter.ToUInt32(address.GetAddressBytes(), 0);
uint ipMaskV4 = BitConverter.ToUInt32(mask.GetAddressBytes(), 0);
uint broadCastIpAddress = ipAddress | ~ipMaskV4;

return new IPAddress(BitConverter.GetBytes(broadCastIpAddress));
}

关于c# - 如何动态获取本地 IP 广播地址 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281099/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com