C#/Unity计算局域网广播地址方式

本篇使用环境:

  1. 单播可以播出去
  2. 局域网用 “255.255.255.255”/Broadcast 广播消息播不出去
  3. 前提是关闭了虚拟网卡等一系列用不到的网卡,还是播不出去。关闭路径:“控制面板\所有控制面板项\网络连接”

具体原因看下面的介绍链接吧
直接广播地址和受限广播地址的介绍:https://zhidao.baidu.com/question/79080266.html

受限广播地址:
主机位、网络为全为1(即255):255.255.255.255
用于IP地址请求阶段

直接广播地址:
主机位为1(即255),网络位正常:192.168.1.255
用于子网广播

具体使用方法就是把Broadcast改为直接广播地址:
直接广播地址的C#计算方式如下:
**

广播地址 = 子网掩码按位 求反 再 或 IP地址

**

	public IPAddress IpAddress;
    public IPAddress SubnetMask;
    public IPAddress BroadcastIP;
    void RunFunction()
    {
        IpAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.Last();
        SubnetMask = GetSubnetMask(IpAddress);
        BroadcastIP = GetBroadcast(IpAddress, SubnetMask);
    }

    /// <summary> 
    /// 获得广播地址 
    /// </summary> 
    /// <param name="ipAddress">IP地址</param> 
    /// <param name="subnetMask">子网掩码</param> 
    /// <returns>广播地址</returns> 
    IPAddress GetBroadcast(IPAddress ipAddress, IPAddress subnetMask) 
    {
        byte[] ipAdd = ipAddress.GetAddressBytes(); 
        byte[] subnet = subnetMask.GetAddressBytes();
        for (int i = 0; i < ipAdd.Length; i++) 
        { 
            ipAdd[i] = (byte)(~subnet[i] | ipAdd[i]); 
        } 
        return new IPAddress(ipAdd); 
    }
    /// <summary>
    /// 获取子网掩码
    /// </summary>
    /// <param name="ipAdd">IP地址</param>
    /// <returns></returns>
    IPAddress GetSubnetMask(IPAddress ipAdd)
    {
        foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
        {
            foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses)
            {
                if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork)
                {
                    if (ipAdd.Equals(unicastIPAddressInformation.Address))
                    {
                        return unicastIPAddressInformation.IPv4Mask;
                    }
                }
            }
        }
        //return IPAddress.Parse("255.255.255.0");
        throw new ArgumentException($"没有发现该{ipAdd}对应的子网掩码");
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值