客户端无法通过Internet连接到服务器

时间:2011-08-29 07:35:01

标签: .net sockets tcp client ip

我已经建立了一个简单的客户端/服务器系统,但由于某种原因客户端无法通过互联网连接。我让他们使用localhost地址(127.0.0.1)和我的LAN IP地址(192.168.2.2)在同一台机器上进行通信。

我还确认端口是使用http://www.whatsmyip.org/ports/打开的,当我使用此站点时,会在服务器上触发回调函数,所以我假设服务器工作正常。

但是,当我尝试从客户端连接到相同的(Internet)IP地址/端口时,服务器检测不到任何内容,并且客户端在OnConnect回调时抛出异常。我注意到BeginConnect语句没有正确设置clientSocket的RemoteEndPoint属性 - 当我查看它时会抛出SocketException(10057)。 (通过LAN地址连接时,它可以正常工作。)

private void ConnectToServer()
{
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPAddress ipAddress = IPAddress.Parse(txtIPAddress.Text);

    IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Convert.ToInt32(txtPort.Text));
    clientSocket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnect), null);
}

什么可以阻止客户端通过外部IP地址连接到服务器,因为它可以通过LAN IP地址连接,服务器是否通过互联网接受连接?

我正在使用Windows 7和.NET 3.0。

感谢任何建议。感谢。

1 个答案:

答案 0 :(得分:0)

首先,您不应该在调用BeginConnect后立即连接套接字。通常需要几次往返才能建立连接。因此,在建立连接之前询问远程端点时,预计会出现10057 Not Connected的错误代码。

至于为什么您的网络设置不起作用。如果我正确理解您的设置,您将尝试以下列方式发送数据包:

Your machine (LAN) --> Port-forwarding device (WAN) --> Your machine (LAN)

您是否确认端口转发设备支持此设置?

您声明您已验证以下内容:

Remote machine (WAN) --> Port-forwarding device (WAN) --> Your machine (LAN)

您的端口转发设备可能不支持LAN -> WAN -> LAN端口转发。

您可能还想使用Wireshark来查看发送的数据包。