2014-02-08 46 views
2

當我使用INADDR_ANY來指定IP地址綁定到套接字,後來監聽的端口,像這樣:Winsock的綁定地址「INADDR_ANY」澄清

sockaddr_in sockAddr; 

sockAddr.sin_family = AF_INET; 
sockAddr.sin_port = htons(80); 
sockAddr.sin_addr.S_un.S_addr = INADDR_ANY; // use default 

請問這種插座結構允許外部,內部,並回送IP地址連接到我?

我不想通過將我的計算機外部地址(即:122.215.214.3)代替INADDR_ANY來限制可以與我通信的IP地址,因爲內部IP無法連接。

我想知道如果INADDR_ANY將與我的計算機的所有IP地址(外部,內部,回送)3綁定。

回答

4

當綁定偵聽套接字時,INADDR_ANY允許任何直接屬於運行偵聽套接字的計算機的任何本地入站連接,其中包括環回地址。但是,您無法綁定到機器外部的IP地址外部,例如網絡路由器的公共IP。路由器必須配置爲將來自公共IP的傳入連接轉發給分配給可綁定的監聽計算機的專用LAN IP。

+0

假設我的家庭路由器端口將端口205轉發到我的NAT中的端口205上運行服務器的計算機,INADDR_ANY現在可以用於外部,內部(LAN)和環回IP地址嗎? –

+1

是的,但服務器仍然不具備任何外部IP的知識,也不需要。外部連接將首先到達路由器,然後轉發到服務器的內部IP,就像連接來自同一LAN上的另一臺計算機一樣。您的服務器將不知道其中的差異。只要它綁定到路由器轉發的內部IP,外部客戶端就可以連接到您的服務器。 –

+0

好的,這非常簡潔明瞭,謝謝! –