【问题标题】:Connecting to a server from a client on a different router从不同路由器上的客户端连接到服务器
【发布时间】:2016-10-04 20:22:17
【问题描述】:

我正在尝试从连接到不同路由器的计算机连接到我家的一台计算机上的 ServerSocket。我已经搜索了几个小时,并且已经设置了端口转发。我已经尝试使用我的公共 IP 地址和端口号创建 Socket,但没有成功。我的问题是:知道我的公网IP地址、服务器本地IP地址和端口号,如何创建一个Socket才能正确连接到服务器?

这些是我尝试过的构造函数,但没有成功:

new Socket(my_public_ip_address, port);
new Socket(my_local_ip_address, port); <- this one works only if both computers are connected to the same router

提前致谢!

【问题讨论】:

  • 1.您可以添加错误输出/堆栈跟踪吗? 2. 您的客户端计算机是否在您的公共 IP 显示的网络内(公共路由器 -> 客户端和公共路由器 -> 第二个路由器 -> 服务器)?您可能无法使用来自内部网络的公共 IP 连接到路由器的公共接口。您可以尝试直接连接到服务器的内部 IP 或第二个路由器的“公共”IP。
  • 这里的问题几乎可以肯定是您在路由器中使用了 NAT,这破坏了进行端到端连接的能力。 Java代码与它无关。您需要配置路由器以允许传入连接;超级用户可能是一个更有帮助的网站。
  • 非常感谢大家的快速回复,明天我一定会尝试您的所有建议!

标签: java sockets client serversocket portforwarding


【解决方案1】:

首先:如果您不走运(像我一样),您将无法与您的服务器计算机建立连接。 (就我而言,大学网络会阻止所有传入连接)。

所以也许你的服务器不是问题,而是到你的路由器的路径(连接)。

在您的情况下,我首先会尝试从您的客户端开始跟踪您的服务器。 Traceroute 至少应该到达您的路由器。 (我不擅长计算机网络,如果我弄错了,请纠正我)

【讨论】:

    【解决方案2】:

    让我们这么说

    • pc X 有 localipX 并通过 publicipX 连接到 routerX
    • pc Y 具有 localipY 并使用 publicipY 连接到 routerY

    您必须执行以下操作:

    1. 通过特定端口 (P) 从 X 向 publicipY 发出请求
    2. 在您的 routerY 中配置以将来自端口 P 的所有请求重定向到 localipX 到 portX(X 应用正在侦听的端口)。

    我知道你提到你做了端口转发等等,但请检查上面的步骤,也许你错过了一些。如果它不起作用,请检查您的防火墙并确保所有使用的端口都已打开并调查所有连接的节点(即 X 正在发送请求,publicipX 发送请求,publicipY 得到它并确保 Y 得到它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      相关资源
      最近更新 更多