2010-04-06 151 views
3

我在將在線應用程序連接到其他網絡上的其他人時遇到問題。當我們在同一個網絡上時,我能夠給它們hostAddress來連接,但是當我們通過互聯網來做時,生成的主機地址不允許連接,也不會使用從在線網站獲得的IP地址,例如whatismyip .com無法通過不同網絡在套接字上連接

我最大的問題是不調試此代碼,因爲它可以通過網絡內部工作,但當我們嘗試移動到不同的網絡時,服務器看不到嘗試。另外,我使用的測試端口是2222

InetAddress addr = InetAddress.getLocalHost(); 
String hostname = addr.getHostName(); 
System.out.println("Hostname: " + hostname); 
System.out.println("IP: " + addr.getHostAddress()); 

我顯示主機到服務器時,它開始

if (isClient) { 
System.out.println("Client Starting.."); 
clientSocket = new Socket(host, port_number); 
} else { 
System.out.println("Server Starting.."); 
echoServer = new ServerSocket(port_number); 
clientSocket = echoServer.accept(); 
System.out.println("Warning, Incoming Game.."); 
} 
+0

哪些IP地址,你看見了什麼? 2222不是IP地址。 – 2010-04-06 19:41:05

+0

您的測試結果如何? – 2010-04-11 19:24:57

+0

你解決了這個問題嗎?請告訴解決方案或任何資源進行調查。我有同樣的問題。 – 2016-03-08 04:43:51

回答

7

如果它工作在LAN上而不是在互聯網上,然後一個或者兩個對等端可能都在NAT'ed connection之間,這意味着您在Internet上看到的公共IP地址與您要與之通話的計算機的IP地址不同。您可能需要設置某種port forwarding以允許您的應用連接。

+0

現在你提到它了,我認爲我的Universitiy Network使用它來掩蓋IP地址。我會在接下來的幾個小時內做一些獨立的確認。我想知道如何解決這個問題。 – maleki 2010-04-06 19:54:04

+0

這兩臺機器都在Uni網絡上還是隻有一臺?你只需要在其中一臺機器上設置端口轉發即可工作。另一種解決方案是使用在互聯網上作爲代理的第三臺機器。 – 2010-04-06 20:00:48

+0

當測試只有一個是。我要測試主機不在大學網絡上。 – maleki 2010-04-06 20:08:19

0

一些其他信息可能會有所幫助。你可以從你所在的位置ping機器嗎?你是否試圖通過防火牆?你說他們通過本地主機或本地網絡工作 - 這些有點不同。您的意思是使用本地空間的網絡(即:10. 。*或192.168。等)?你說你正在使用2222的測試ip--這不是一個ip地址。這是地址的域名嗎?或者是端口號?

1

問題可能是防火牆配置。

假設你正在家裏進行測試(從大學或公司來看,這通常會更復雜)。

通常你需要配置你的路由器讓端口2222打開(你也可以打開端口5555並告訴你的路由器重定向到你想在你的lan上的主機(可能有很多)和端口2222) 。

綜上所述:其他 用戶---->互聯網----> [調制解調器] internet_IP - > [路由器] lan_IP - >計算機lan_IP2

internet_IP由ISP提供;在這裏找到它:http://www.whatismyip.com/ lan_IP:你在你的路由器配置中定義。通常:192.168.0.1 lan_IP2:通常由路由器(DHCP)向您的PC發送。通過輸入ipconfig(Windows)或ifconfig(Linux)來查找它。

你需要你的路由器打開端口2222和路由告訴它lan_IP2端口2222 配置路由器通常是通過連接其http界面上完成:http://192.168.0.1

+0

要小心,如果你在互聯網上打開一個端口......甚至似乎是一個虛擬服務器有時可以被黑客利用。 – 2010-04-08 20:57:22

相關問題