我设置了一个简单的客户机/服务器系统,但是由于某些原因,客户机不能通过互联网连接。我让它们在同一台机器上通信,使用本地主机地址(127.0.0.1)和我的LAN IP地址(192.168.2.2)。
我还使用http://www.whatsmyip.org/ports/确认了端口是打开的,并且当我使用这个站点时,回调函数在服务器上触发,所以我假设服务器工作正常。
但是,当我尝试从客户端连接到相同的(互联网) 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);
}假设客户端可以通过LAN IP地址连接到服务器,并且服务器正在接受通过internet的连接,那么什么可以阻止客户端通过外部IP地址连接到服务器?
我使用的是Windows7和.NET 3.0。
任何建议都将不胜感激。谢谢。
发布于 2011-08-29 16:03:00
首先,您不应该期望套接字在调用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查看发送了哪些数据包。
https://stackoverflow.com/questions/7227350
复制相似问题