2009-12-10 37 views
2

我有一個服務,用於偵聽TCP \ IP端口號7000上的傳入連接。此外,我的機器有超過1個NIC卡和多個IP地址。 (換句話說,我有2個局域網,LAN和LAN2和2個Ips)。具有超過1個IP地址的機器上的套接字通信

現在我配置了我的客戶端應用程序(在另一臺只有1個IP的機器上)與我的服務器建立連接,並將端口號設置爲7000,並且IP必須嘗試連接到服務器LAN的IP1 。

但是我注意到客戶端無法建立連接,但是當我禁用LAN2時,我注意到客戶端能夠與服務器建立連接。

什麼可能是錯的?

回答

3

當您綁定的端口,你必須指定IP或者您可以使用INADDR_ANY所有接口

memset(&myname, 0, sizeof(myname)); 
myname.sin_family  = AF_INET; 
myname.sin_port  = 7000; 
myname.sin_addr.s_addr = INADDR_ANY; /* all interfaces */ 
rc = bind(s, (struct sockaddr *) &myname, sizeof(myname)); 
MSDN

如果應用程序不關心什麼 本地地址被分配,指定 恆定值INADDR_ANY爲IPv4 本地地址或常量值 in6addr_any,用於名稱爲 參數的sa_data成員中的IPv6本地地址 。這允許底層 服務提供商使用任何適當 網絡地址, 潛在簡化應用 編程 多宿主主機的存在(即,託管該 具有多於一個的網絡接口 和地址)。

+0

謝謝,讓我看看這是否有幫助。 目前我正在做的是這樣的 localIP = inet_ntoa(*(struct in_addr *)* localHost-> h_addr_list); //設置sockaddr結構 ServerSock.sin_family = AF_INET; ServerSock.sin_addr.s_addr = inet_addr(localIP); ServerSock.sin_port = htons(pLantronics-> m_wRIPortNo) 因此,在這種情況下,如果您需要該服務在兩個界面上工作,您必須按照我的示例操作,如果您只需要一個IP,則IP或LAN2或LAN2的IP將爲 – ckv 2009-12-10 07:12:25

+1

接口你必須通過該接口的IP。 – RageZ 2009-12-10 07:30:13

+0

好的感謝您的信息 – ckv 2009-12-10 08:50:24

相關問題