1

ServerSocket听 LAN 连接并很好地接受它们,但是当我尝试通过我的手机连接到相同的设备时 - 使用 3G 连接 - 它似乎没有连接。

  1. 我尝试使用getMyIP站点来获取IP并尝试连接到它,它确实正确IP(用我的路由器检查)但是根本不接受任何连接。

  2. 我尝试在 Windows 7 和我的路由器上完全打开端口。

  3. 我将这些行放在我的服务器构造函数中:

    ss = new ServerSocket(port);
    host=ss.getInetAddress().getHostAddress();
    

    我将主机上的 ip 设置为 0.0.0.0

谢谢你的帮助。

4

3 回答 3

2

-当您在 时LAN,您可以使用Private IP以及Public IP ranges

-但是当您使用Internet访问您所在位置的服务器时,您需要有一个 static Public IP address.

-您可以向static Public IP address您的 ISP 索取额外费用,也有一些基于您的动态 IP 提供静态 IP 的网络站点。

专用 IP 范围 不能通过 Internet 使用。

Class A - 10.0.0.0 - 10.255.255.255  

Class B - 172.16.0.0 - 172.31.255.255

Class C - 192.168.0.0 - 192.168.255.255
于 2012-09-19T09:29:42.633 回答
1

您需要有一个公共 IP 地址。如果你有一个路由器,它必须将你想暴露给互联网的端口的流量传递给你的机器。如果您有防火墙,它必须允许到此端口的外部连接。

无论您使用哪种语言,您所做的所有更改都是相同的,并且您无法从 Java 中做任何事情来解决需要做这些事情的问题。

于 2012-09-19T09:31:40.143 回答
0
  1. 检查您的防火墙是否允许传入连接。你需要在那里制造和例外。
  2. 您需要明确绑定您的机器上的 IP 地址,该地址由您的 ISP 为该时间实例分配。
  3. ipconfig您可以通过在 windows 命令提示符下运行命令来获取分配给您的 IP 地址。
  4. 使用以下代码绑定到特定的 IP 地址

    InetSocketAddress insa = new InetSocketAddress("22.23.23.111", 9090);       
    ServerSocket ss = new ServerSocket();
    ss.bind(insa);
    String host=ss.getInetAddress().getHostAddress();
    System.out.println(host);
    

这将打印分配给您的 IP 地址。

于 2012-09-19T09:41:52.570 回答