【问题标题】:Client does not connect to server over internet客户端未通过 Internet 连接到服务器
【发布时间】: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


【解决方案1】:

首先,您不应该期望在您调用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 查看发送了哪些数据包。

【讨论】:

  • 谢谢。我没有考虑到 LAN -> WAN -> LAN 转发可能与 WAN -> WAN -> LAN 转发有任何不同。我会尝试对此进行调查。作为参考,我的设置是网关路由器(设置为 DMZ)和无线路由器(仅在指定端口上转发)所以我猜它们中的任何一个都可能是问题?关于BeginConnect,当你说它需要几次往返时,你的意思是它只需要时间吗?我用调试器停止了程序来检查值——不管我等了多长时间,它都没有改变。
  • 是的,往返时间是客户端向服务器发送数据包直到收到服务器响应所需的时间。您还应该在几分钟后看到 10060 Connection Timed Out 作为错误代码,但使用调试器可能会改变这一点。
  • 您的建议似乎是正确的,因为我将客户端软件安装在具有单独互联网连接的机器上并且运行良好。我真的不明白为什么路由器应该无法从自己的 LAN 转发请求,我不知道如何更改它,但至少现在我可以使用 LAN IP 地址测试我的程序,并且仍然期望它们分发后在互联网上工作。谢谢你的帮助,垫子。
猜你喜欢
  • 2018-07-29
  • 2013-12-26
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多