如何从Internet建立与ServerSocket的连接?

时间:2012-09-19 09:21:01

标签: java sockets serversocket

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

  1. 我尝试使用getMyIP网站获取IP并尝试连接到它,它确实得到了正确的IP(使用我的路由器检查过)但是没有连接完全接受。

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

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

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

    我将主机上的ip设为0.0.0.0

  4. 感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

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

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

- 您可以从您的ISP请求static Public IP address一些额外的费用,还有一些网站上的网站有些如何根据您的动态IP提供静态IP

专用IP范围无法通过互联网使用。

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

答案 1 :(得分:1)

您需要拥有公共IP地址。如果您有路由器,它必须将您要公开的端口的流量传递给您的计算机。如果您有防火墙,则必须允许外部连接到此端口。

无论您使用哪种语言,您所做的所有更改都是相同的,并且您无法通过Java来解决需要执行这些操作的问题。

答案 2 :(得分:0)

  1. 检查防火墙是否允许传入连接。你需要在那里制造和例外。
  2. 您需要明确绑定您的机器上的IP地址,该地址由您的ISP分配给该时间实例。
  3. 您可以通过在Windows命令提示符下运行ipconfig命令来获取分配给您的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);
    
  5. 这将打印分配给您的IP地址。