2012-09-19 42 views
1

我的ServerSocket监听LAN连接并接受它们,但是当我尝试通过手机连接到相同的设备时(使用3G连接),它似乎并未连接。如何建立从Internet连接到ServerSocket的连接?

  1. 我试着用getMyIP网站获得的IP并尝试连接到它,它得到正确的IP(我的路由器检查),但是没有任何连接被接受的。

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

  3. 我把这些线在我的服务器构造:

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

    ,我得到的主机IP地址为0.0.0.0

感谢您的帮助。

+0

ServerSocket运行在防火墙后面吗? – Vikdor

+0

只有windows7的防火墙 –

+0

为了连接到你的机器从互联网,你应该有一个公共IP,我想。 – Vikdor

回答

1

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

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

+0

彼得,国际海事组织问题OP正面临绑定到由OPs ISP分配的IP地址的套接字。默认情况下它的'0.0.0.0'。它需要和明确的约束。 – Santosh

+0

当你绑定到'0.0.0.0'时,它绑定到一切。你仍然受束缚,你只是不知道该怎么做。 –

+0

你是指所有的IP? – Santosh

2

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

-但是当你使用Internet访问服务器,该服务器是在你的地方,那么你需要有static Public IP address.

-你可以在一些额外的费用要求由ISP提供的static Public IP address,也有一些SI通过网络,一些如何根据您的动态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 
+0

但仍然,为什么我从该socketserver获得0.0.0.0?以及如何更改我的代码,以便serversocket将托管在公共IP上,而不是在此0.0.0.0 ip上? –

+0

@OfekRon你需要有一个静态的公共IP来承载你的ServerSocket在某些端口号上的IP ...... .....你的ServerSocket不能获得IP, –

+0

我试图使用我的路由器的IP,因为它是由WhatsMyIP网站提供,这肯定不是一个私人IP,但它没有工作... PLZ给我一个更详细的说明,导致我真的很困惑 –

0
  1. 检查防火墙是否允许传入连接。你需要在那里制造和例外。
  2. 您需要明确地绑定您的计算机上由您的ISP为该实例时间分配的IP地址。
  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); 
    

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

+0

公网ip?或网络内的IP? –