0

我正在尝试学习套接字编程,但在连接到我的服务器应用程序时遇到了这个错误。

这是我在服务器应用程序中对 TcpListener 的声明:

TcpListener listener = new TcpListener(IPAddress.Loopback, 5152);

这是我在客户端应用程序中对 TcpClient 的声明:

TcpClient client = new TcpClient(Dns.GetHostEntry(IPAddress.Loopback).HostName, 5152);

我读过几个这样的问题,我总是得到相同的答案:要么服务器应用程序没有监听端口,要么根本没有运行。但是我已经使用 netstat 仔细检查了资源监视器和 cmd 以查看服务是否正在侦听端口,并且确实如此。我还在防火墙例外中包含了该服务,所以我不确定为什么在尝试连接到服务器应用程序时不断收到此错误。

有任何想法吗?

4

1 回答 1

2

Dns.GetHostEntry(IPAddress.Loopback).HostName返回您机器的主机名。当您将主机名传递给 时TcpClient,它将使用 .将其解析为一个或多个 IP 地址Dns.GetHostAddresses(hostName)。这包括您机器的公共和链接本地 IP 地址(例如,192.168.15.4),但不包括环回地址(127.0.0.1)。

因此,您的客户端正在尝试连接到您机器的任何非环回地址,而您的服务器仅侦听环回地址。因此,无法建立连接。

解决方案:连接到您的服务器正在侦听的同一端点。

IPEndPoint endPoint = new IPEndPoint(IPAddress.Loopback, 5152);

TcpListener listener = new TcpListener(endPoint);

TcpClient client = new TcpClient();
client.Connect(endPoint);
于 2013-05-12T16:59:00.540 回答