2011-12-03 70 views
0

我想通過使用它的公共i.pt來連接到java中的服務器機器。但是當我運行客戶端應用程序時,我經常得到連接拒絕錯誤。如果我使用本地主機而不是公共IP,它可以很好地工作。與公共i.ppp的java tcp連接

我在網上搜索了幾個問題的原因,但我無法修復它。

我在路由器設置中將端口轉發到我的機器的本地i.p地址(192.168.1.3)。然後我檢查了端口是否正在監聽,當我使用netstat -an運行服務器應用程序時。我看到線如 0.0.0.0:19999或[]:19999。 19999是我想聽的端口號。然後我將我的ServerSocket構造函數更改爲3參數,它也綁定本地地址。

InetAddress miad = InetAddress.getByAddress(addr); 
ServerSocket socket1 = new ServerSocket(port,10,miad); 

addr是我的機器本地i.p.的InetAddress。這些修改後,當我啓動服務器應用程序,我運行netstat它表明:

TCP 192.168.1.3:19999 0.0.0.0 LISTENING 

在這裏,我認爲我的服務器正確指定的端口上偵聽。

我也禁用了我的防火牆和防病毒軟件。

我已經看到了有關該問題的網絡上的幾個線程和討論,並嘗試了大部分提到那裏的事情,但我不斷收到連接拒絕錯誤。

我能做什麼錯?它運行時沒有任何錯誤,當我測試本地主機。

+0

添加[SSCCE](http://sscce.org/)以更快獲得幫助。 – MockerTim

+0

您是從自己的本地網絡使用公共IP連接到服務器還是從互聯網上的其他地方連接? (前者不適用於很多路由器/調制解調器) – nos

+0

實際上,我在同一臺機器上執行此操作。那是這個問題嗎? – bahti

回答

3

這是因爲路由器(不太確定,但幾乎)。嘗試查看www.canyouseeme.org等web服務是否可以連接到您的服務器。

其主要思想是通過使用外部(公共)IP地址,內部計算機(LAN內部)無法連接到同一LAN內的計算機。

我敢肯定,它會工作,使用你的內部IP(192.168.1.3)。

如果您確定正確轉發了端口,CanYouSeeMe會說您的服務器可以訪問。如果沒有,請確保您的ISP沒有因某種「安全原因」而阻塞端口。

+0

是的,它出來是這個問題。我試圖在不同的網絡上運行客戶端,它工作。非常感謝。但我的程序需要以兩種方式運行。所以,也許我可以嘗試在局域網中訪問服務器,如果它沒有成功,那麼嘗試連接公共i.p.這會是一個合適的解決方案嗎? – bahti

0

要弄清楚,如果你的問題涉及到Java和編程請不要

telnet 192.168.1.3 19999 

如果它不能再superuser.com連接將是一個更好的地方來討論這個問題。