2013-04-19 88 views
1

我寫了一個使用java套接字的客戶端和服務器。這兩臺機器位於同一網絡中。當我使用本地IP地址連接時,沒有問題。但是,如果我使用公共IP地址,連接超時並且客戶端拋出「SocketException:連接重置」,並且服務器拋出「SocketException:通過peer:socket寫入錯誤重置連接」。大多數情況下都會發生這種情況,但一旦發生藍色月亮,連接就會成功。我可以成功地從客戶端計算機ping服務器本地地址和路由器。互聯網上的Java套接字

我已經進入我的路由器,將服務器機器分配給永久IP地址,並將相關端口上的所有流量轉發給該IP地址。不幸的是,這是我認爲可以解決問題的唯一方法,事實並非如此。我也關閉了服務器上的Windows防火牆,仍然沒有運氣。

客戶端:(從whatismyip.com截取IP)

Socket s = new Socket("xx.xxx.xxx.xx", 27499); 

進行連接。

服務器:

InetAddress ip = InetAddress.getLocalHost(); 
ServerSocket ss = new ServerSocket(27499, 0, ip); 
Socket cs = ss.accept(); 

任何幫助,將不勝感激。如有必要,我可以提供更多代碼。

+0

可能是防火牆問題,可能是端口轉發問題 – MadProgrammer

+0

@MadProgrammer我可以認爲它不是防火牆問題,因爲服務器也在拋出異常嗎?暗示至少有一些交流發生? – 0nyx

+0

我通過禁用防火牆進行測試並查看會發生什麼。但我會檢查服務器連接的端口轉發設置,以確保連接已正確指向服務器。我也會嘗試1-通過本地機器連接到服務器,並且2-連接到同一臺計算機上的服務器,如果你沒有問題,它不可能是防火牆,但是如果防火牆是阻止的外部IP範圍 – MadProgrammer

回答

0

「SocketException:通過對等連接復位:套接字寫錯誤」

這意味着服務器實際上是拒絕連接,可能是防火牆的問題,服務器拒絕的連接,服務器實際上是關閉或過載。

+0

當我禁用Windows防火牆時也會發生這種情況。我可以確定服務器已啓動並且不會超載,因爲這是唯一的連接。實際拋出異常的行是'oos = new ObjectOutputStream(clientsocket.getOutputStream());' – 0nyx

+0

將客戶端和服務器上的堆棧跟蹤打印到已知位置。這可以讓你知道爲什麼服務器會拒絕來自客戶端的連接嘗試。 – 2013-04-19 01:04:53