2012-09-19 77 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? –