2011-01-11 108 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