C# 为什么是IPAddress。是否需要连接到远程主机?

C# 为什么是IPAddress。是否需要连接到远程主机?,c#,tcp,tcplistener,C#,Tcp,Tcplistener,我正在c#中构建一个客户机-服务器应用程序,其中服务器是远程主机。我的网络中有路由器和防火墙 我的客户端代码是 hostSocket = new TcpClient(); hostSocket.Connect(serverIp, serverPort); 我的服务器端代码是 eqListner=newtcplistener(IPAddress.Parse(eqIp),eqPort) 在这种情况下,我可以通过ip 127.0.0.1连接同一台电脑上的客户端,但在网

我正在c#中构建一个客户机-服务器应用程序,其中服务器是远程主机。我的网络中有路由器和防火墙

我的客户端代码是

hostSocket = new TcpClient();                
hostSocket.Connect(serverIp, serverPort);
我的服务器端代码是

eqListner=newtcplistener(IPAddress.Parse(eqIp),eqPort)

在这种情况下,我可以通过ip 127.0.0.1连接同一台电脑上的客户端,但在网络中的另一台电脑上运行服务器时无法连接

然后,我通过以下方式更改了服务器端代码:

IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, eqPort);
TcpListener eqListner = new TcpListener(ipLocalEndPoint);
但结果仍然是一样的。然后,我通过以下方式再次更改了服务器端代码:

eqListner=新的TcpListener(IPAddress.Any,eqPort)

而且这个效果非常好。我已阅读了
IPAddress.Any的msdn,发现此属性将服务器设置为侦听所有网络接口上的客户端活动

我的问题是为什么要使用IPAddress。是否需要连接到远程主机?其他功能无法连接

提前谢谢

在这种情况下,我可以通过ip 127.0.0.1连接同一台电脑上的客户端,但在网络中的另一台电脑上运行服务器时无法连接

127.0.0.1
是始终为本地主机的环回地址。当服务和客户机仅在同一台机器上时,这会很方便


您最好将服务编码为侦听所有接口,这样,如果服务器更改地址,您的应用程序就不需要更新或重新启动。

问题可能在第一行

IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
它将获得正在运行的主机的第一个ip。这可能是IPv6或本地主机地址。
如果你想在一个特定的地址收听,最好将其添加到。它将存储在app.config中,您可以更改它而无需重新编译。

我在问
IPAddress.Any的重要性。无论如何,谢谢你的回答。
IPAddress。任何
都将接受来自任何接口的连接。这就是它起作用的原因。如果您正在侦听地址列表[0]
,并且无法从主机外部访问它(因为您的网络中没有配置IPv6和IPv6,或者因为它是环回,…),则客户端将永远无法连接。