我寫了一個使用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();
任何幫助,將不勝感激。如有必要,我可以提供更多代碼。
可能是防火牆問題,可能是端口轉發問題 – MadProgrammer
@MadProgrammer我可以認爲它不是防火牆問題,因爲服務器也在拋出異常嗎?暗示至少有一些交流發生? – 0nyx
我通過禁用防火牆進行測試並查看會發生什麼。但我會檢查服務器連接的端口轉發設置,以確保連接已正確指向服務器。我也會嘗試1-通過本地機器連接到服務器,並且2-連接到同一臺計算機上的服務器,如果你沒有問題,它不可能是防火牆,但是如果防火牆是阻止的外部IP範圍 – MadProgrammer