【问题标题】:How to specify full ip address to the local server?如何指定本地服务器的完整 IP 地址?
【发布时间】:2017-05-04 19:29:53
【问题描述】:

“完整 ip”表示全局 ip(我有一个静态)+ 本地 ip(192.168.0.xxx - 我本地网络中的地址)。 我相对使用java.net.ServerSocketjava.net.Socket 编写了简单的服务器和客户端应用程序。 在本地主机上它工作得很好。但是我对在本地网络(路由器)的计算机上运行服务器应用程序并使用客户端应用程序从任何地方连接到它很感兴趣。 连接建立如下:

Socket socket = new Socket(IP, PORT);

我尝试了我的绝对静态 ip(但它是路由器 ip),路由器 ip + 本地 ip(192.168.0.100)都不起作用。 如何在路由器本地网络中指定“服务器”的完整路径?

【问题讨论】:

  • 您遇到了什么问题? “不工作”是什么意思?
  • 获取您的公共 IP:ipify.org 或其他 whatismyip 查找站点。确保您的路由器将数据包转发到您的本地服务器,如果您在本地计算机上运行 Linux,您可能必须通过路由器设置和防火墙/iptables 规则设置端口转发。
  • @slambeth “不工作”意味着我得到了一个例外。类似“无效的 ip”
  • 所以,发布例外情况以及您使用的 IP。很难帮助解决“类似”的问题。您必须使用正在执行套接字的机器的 IP。您不能简单地使用路由器的 IP。

标签: java sockets networking


【解决方案1】:

我认为您误解了 IP 地址。

任何 IP 地址都只是一个 IP 地址。没有“相对”IP 地址之类的东西,就像您在文件系统中有相对路径一样。

假设您有一个外部可见的路由器 IP,例如 136.23.75.30。然后,您有一个本地子网 192.168.x.y,您自己的主机的地址为 192.168.1.100 ,您的路由器的地址为 192.168.1.1 。

在这种情况下,当您从子网内部连接到主机时,您可以指定子网上的主机地址 192.168.1.100 。

但是,当您从整个 Internet 连接时,您可以连接的唯一 IP 是路由器的外部 IP,由您的 ISP 提供。在我们的示例中,它是 136.23.75.30 。任何从您自己的子网之外的任何位置连接到 192.168.1.100 的尝试都将转到错误的主机或根本无处。

你怎样才能完成你所需要的?秘密在于您的路由器配置。您需要设置路由器以进行端口转发。基本上,您的路由器将在某个端口(例如 8888)上接收传入连接,并将该连接转换为与您的主机 192、168.1.100 的连接,例如,同一个端口 8888。

换句话说,外界认为它连接到 136.23.75.30,而实际上路由器确保 192.168.1.100 正在响应。

假设这是家庭设置,您需要进入路由器的管理屏幕。您可以在浏览器的地址栏中输入“http://192.168.1.1”。提供合适的身份验证(通常印在路由器背面)后,您需要找到某种高级设置选项卡,然后查找“端口转发”。通常在此处输入目标地址 192.168.1.100,以及源端口和目标端口(假设都是 8888)。

【讨论】:

    猜你喜欢
    • 2017-01-23
    • 2011-07-02
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多