2011-01-11 107 views
2

我正在开发一个P2P应用程序,其中一个对等方与服务器对话以通知其私有和公共IP。该应用程序使用UDP进行通信。确定P2P应用程序中的本地IP地址

要获取私有IP,客户端使用gethostbyname并将其绑定到该IP。问题是系统有多个NIC时。问题是其中一个NIC没有连接到互联网。所以为了避免它,我使用INADDR_ANY并绑定它。

现在我需要让我的本地IP地址通知服务器。是否有任何API会告诉我哪个网卡的IP地址处于活动状态?

回答

1

您需要绑定到一个明确的IP地址,而不是作为INADDR_ANY结合INADDR_ANY将意味着套接字上调用getsockname()获取本地地址将简单地返回INADDR_ANY

所以,你需要做的是迭代可用的端点(使用getaddrinfo())并在每个端点上创建一个套接字。如果您稍后致电getsockname(),他们会给您正确的地址。

+0

我们不能使用特定的IP来绑定它,因为我们不知道哪个IP是活动的。这就是为什么我使用INADDR_ANY进行绑定,以便所有到达的数据包都能正确传输。 – Jeeva 2011-01-12 04:25:03