【发布时间】:2011-11-05 20:11:33
【问题描述】:
我设置了一个简单的客户端/服务器系统,但由于某种原因,客户端无法通过互联网连接。我让他们在同一台机器上进行通信,使用本地主机地址 (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);
}
什么可以阻止客户端通过外部 IP 地址连接到服务器,因为它可以通过 LAN IP 地址连接并且服务器正在接受互联网上的连接?
我使用的是 Windows 7 和 .NET 3.0。
感谢任何建议。谢谢。
【问题讨论】:
-
你检查过你的文件墙设置了吗?确保端口对传入连接开放。
-
如果您可以通过某些 IP 地址而不是其他 IP 地址进行连接,这并不是真正的编程问题。
-
是的,端口是开放的。见上文第 2 段。
标签: .net sockets tcp client ip