【问题标题】:.NET Socket or port forwarding issue?.NET 套接字或端口转发问题?
【发布时间】:2012-08-23 23:57:48
【问题描述】:

我现在正在编写的应用程序有这个问题。

我正在使用 Sockets .NET 编写服务器和客户端应用程序。服务器运行在静态 IP 为 192.168.1.6 的机器上。客户端通过 LAN 连接到该 IP 地址没有问题。但是当我设置客户端连接到我的 WAN IP 时,无法建立连接。

当然,我立即想到了端口转发,因此我将路由器配置为接受我用于应用程序的端口和机器静态 IP 上的传入连接。我什至使用 portforward.com 的 PFPortChecker 工具检查了端口是否正确转发(确实如此),但我似乎无法让它工作。

我在这里忽略了什么? 我真的希望有人能帮助我,因为我现在真的要拔掉最后一根头发了……

编辑:

好的,我已将问题缩小到 .NET 套接字问题。
基本上当我尝试使用以下代码(C#)连接时:

Socket _client;

_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_client.Connect("XX.XXX.XXX.X", XXXX);

只能在 LAN 环境中建立连接。 但是,当我在我的机器上运行一个服务器实例,并且我尝试使用 PFPortChecker 工具 ping WAN IP 和端口时,我实际上在我的服务器中得到了一个响应,它开始将传入连接作为一个新的客户。

知道如何修复我的代码以便可以通过 WAN 建立连接吗?

编辑 2:

好的,所以我弄清楚了问题所在。我无法从我自己的 WAN IP 连接到我自己的 WAN IP。在另一个网络上,我连接到我的服务器没有问题。

还是谢谢你的麻烦。

【问题讨论】:

    标签: .net sockets portforwarding


    【解决方案1】:

    我首先建议在服务器上运行 Wireshark,看看他是否看到了传入的连接。这将确认路由器是否将该端口上的流量转发到机器。

    【讨论】:

    • 在客户端上运行 Wireshark 也无妨,以检查请求是否发送到 WAN 地址。
    • 我运行了 wireshark,使用过滤器 tcp.port == XXXX(XXXX 是我使用的端口),但什么也没出现。我曾经在某处读到应用程序无法连接到它自己的 WAN 地址。这是真的,还是有其他原因我没有收到任何包裹?编辑:在客户端开始使用wireshark,让我们看看这是否能给我带来任何帮助......
    • 您是否尝试在同一台机器上执行此操作?这使它更加混乱,但并非不可能。如果您的公共 IP 是 1.2.3.4,并且您尝试连接到 1.2.3.4,则数据包应该出去,到达您在 WAN 端的路由器,路由器会转身将其发送回 192.168.1.6
    • 不,目前我使用 PC 运行服务器,使用笔记本电脑运行客户端。就像我在同一台电脑上调试两个应用程序时一样工作。编辑:好的,至少wireshark 告诉我客户端正在将包发送到我的WAN IP。我想这会在接收包裹时留下问题。不过很奇怪,因为在我看来这是一个端口转发问题,PFPortChecker 工具告诉我它可以 ping WAN IP 和请求的端口。
    • 我知道我不是用 c++ 而是用 c# 编程,但这可能是我遇到问题的原因吗? cplusplus.com/forum/general/70005/#msg376337 如果是这样,我该如何将此解决方案应用于 c#(我的意思是 htonl(INADDR_ANY); 部分)?
    【解决方案2】:

    192.168.1.6 是 LAN 子网...您的外部 IP 不同。如果端口转发很好,那可能就是问题所在。谷歌“我的 ip 是什么”,它应该会告诉你你的外部 ip 地址

    【讨论】:

    • 不要做个混蛋什么的,但不知道LAN IP和WAN IP区别的人不要插手Socket编程。
    猜你喜欢
    • 2020-03-16
    • 2017-12-19
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多