我正在C#中構建一個客戶端服務器應用程序,其中服務器是遠程主機。我的網絡中有路由器和防火牆。爲什麼IPAddress.Any需要連接到遠程主機?
我的客戶端代碼
hostSocket = new TcpClient();
hostSocket.Connect(serverIp, serverPort);
而且我的服務器端代碼是
eqListner = new TcpListener(IPAddress.Parse(eqIp), eqPort);
在這種情況下,我能給予的ip 127.0.0.1在同一臺PC上的客戶端連接但是當我在我的網絡中的另一臺PC上運行服務器時無法連接。
然後我按照改變了我的服務器端代碼:
IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, eqPort);
TcpListener eqListner = new TcpListener(ipLocalEndPoint);
但還是結果是一樣的。然後,我又改變了我的服務器端代碼通過這樣的:
eqListner = new TcpListener(IPAddress.Any, eqPort);
這工作完全正常。我讀過IPAddress.Any
的msdn,發現此屬性設置服務器偵聽所有網絡接口上的客戶端活動。
我的問題是爲什麼IPAddress.Any需要連接到遠程主機?和其他功能無法連接?
在此先感謝....
我在問'IPAddress.Any'的重要性。無論如何感謝您的答案。 – 2013-03-21 10:52:26
'IPAddress.Any'將接受來自任何接口的連接。這就是爲什麼它有效。如果您正在偵聽AddressList [0],並且無法從主機外部訪問它(因爲您的網絡中沒有配置IPv6和IPv6,或者因爲它是環回,...),所以客戶端永遠不會能夠連接。 – 2013-03-21 11:24:31
不,我只使用IP V.4 – 2013-03-21 11:38:12