我已经建立了一个简单的客户端/服务器系统,但由于某种原因客户端无法通过互联网连接。我让他们使用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。
感谢任何建议。感谢。
答案 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来查看发送的数据包。