如何从udp-socket(C/C++)获取自己的(本地)IP地址

Chr*_*her 10 c++ sockets udp

  1. 您有多个网络适配器.
  2. 将UDP套接字绑定到本地端口,而不指定地址.
  3. 在其中一个适配器上接收数据包.

你如何获得收到数据包的适配器的本地IP地址?

问题是,"接收器适配器的IP地址是多少?" 不是我们收到的发件人的地址

receive_from( ..., &senderAddr, ... );
Run Code Online (Sandbox Code Playgroud)

呼叫.

Tim*_*mbo 4

您可以枚举所有网络适配器,获取它们的 IP 地址,并将子网掩码覆盖的部分与发送者的地址进行比较。

喜欢:

IPAddress FindLocalIPAddressOfIncomingPacket( senderAddr )
{
    foreach( adapter in EnumAllNetworkAdapters() )
    {
        adapterSubnet = adapter.subnetmask & adapter.ipaddress;
        senderSubnet = adapter.subnetmask & senderAddr;
        if( adapterSubnet == senderSubnet )
        {
            return adapter.ipaddress;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)