none
64位win10电脑上计算广播地址错误怎么办? RRS feed

  • 问题

  •            代码如下:

              ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
    IP_ADAPTER_INFO* pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
    DWORD iRet = GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize);
    if (ERROR_BUFFER_OVERFLOW == iRet){
    delete pAdapterInfo;
    pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
    pAdapterInfoBkp = pAdapterInfo;
    iRet = GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize);
    }

               DWORD dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String);
    in_addr adrMask;
    adrMask.S_un.S_addr = dwMask;
    CString sMask(::inet_ntoa(adrMask));
    in_addr adrBroadcast;
    adrBroadcast.S_un.S_addr = dwIP&dwMask|(~dwMask);
    theApp.adrBroadcast = adrBroadcast.S_un.S_addr;

               该段代码主要实现计算广播地址的功能,比如电脑IP为192.168.1.20则广播地址应该为192.168.1.255.

              在win7上运行正常,但是在win10上则计算出来的广播地址不正确,为255.255.255.255.


    2018年4月23日 3:52

全部回复

  • Hi,

    感谢在MSDN论坛发帖。

    >>该段代码主要实现计算广播地址的功能,比如电脑IP为192.168.1.20则广播地址应该为192.168.1.255.

    在win7上运行正常,但是在win10上则计算出来的广播地址不正确,为255.255.255.255.

    你有没有尝试过使用GetAdaptersAddresses函数来代替GetAdaptersInfo?

    据我所知,Win10和Win7的区别在于,在Windows 10之前的版本中,适配器在该函数返回的列表中出现的顺序可以从“网络连接文件夹”中控制:从高级菜单中选择“高级设置”菜单项。从Windows 10开始,该顺序不可设置。你可以通过adapter ID来获取信息。

    或者你也可以使用WSAIoctl函数,使用SIO_GET_BROADCAST_ADDRESS控制码来获取信息。

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年4月23日 7:12
  • GetAdapterAddresses好像得不到子网掩码,也就没办法计算出广播地址
    2018年4月27日 2:58
  • WSAIoctl这个函数不知道怎么用的,我像下面这样用获取不到。

    sockaddr adrCast;
     adrCast.sin_family = AF_INET;
     int iRet = WSAIoctl(sock, IOC_OUT|SIO_GET_BROADCAST_ADDRESS, NULL, 0, &adrCast, sizeof(sockaddr),NULL,NULL,NULL);

    2018年4月27日 3:07
  • >>GetAdapterAddresses好像得不到子网掩码,也就没办法计算出广播地址、

    >>WSAIoctl这个函数不知道怎么用的,我像下面这样用获取不到。

    这里有篇类似的帖子,里面包含了代码示例,你可以参考一下。

    https://stackoverflow.com/questions/122208/get-the-ip-address-of-local-computer

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年4月30日 8:06