我正在开发一个P2P应用程序,其中对等方与服务器通信以通知其私有和公共IP。该应用程序使用UDP进行通信。
要获取私有IP,客户端使用gethostbyname
并将其绑定到该IP。问题是系统有多个NIC时。问题是当其中一个NIC未连接到Internet时。所以为了避免它,我使用INADDR_ANY
并绑定它。
现在我需要获取本地IP地址以通知服务器。是否有任何API可以告诉我哪个NIC的IP地址是活动的?
答案 0 :(得分:1)
您需要绑定到显式IP地址而不是INADDR_ANY
,因为绑定到INADDR_ANY
意味着在套接字上调用getsockname()
以获取本地地址将只返回{{1 }}
因此,您需要做的是迭代可用的端点(使用INADDR_ANY
)并在每个端点上创建一个套接字。如果您稍后致电getaddrinfo()
,这些地址将为您提供正确的地址。