2014-05-16 421 views
0

我試圖建立RMI客戶端服務器連接,其中客戶端和服務器位於使用TCP打孔機制的不同NAT /防火牆後面。目前,我可以使用公共Ip和端口「80」獲得客戶端和服務器之間的連接。建立TCP連接後,我可以檢索RMIServer的存根信息。另外,我可以netstat並查看建立的連接。RMI客戶端 - 服務器:java.rmi.ConnectIOException:JRMP連接建立期間出錯

但是當試圖讀取遠程對象我得到以下異常

java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
java.net.SocketTimeoutException: Read timed out 
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:293) 
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:190) 

監測用netstat的連接,我可以看到TCP連接被立即終止其並不穩定。 這將是有益的如果我可以得到任何提示如何維護或獲得穩定的TCP連接。

謝謝。

+0

定義'嘗試讀取遠程對象'。並提供堆棧跟蹤的其餘部分。 – EJP

回答

-1

超時錯誤表示您能夠在客戶端和服務器之間打開一個套接字,但是沒有及時處理該套接字,因此它關閉並給出了該異常。

最後一次發生在我身上的事情發生了,因爲客戶端無法在其路徑中找到正確的類庫。服務器試圖打開套接字,客戶端去尋找類庫並沒有找到它,套接字最終超時。

仔細檢查客戶端和服務器的類路徑。

+0

你有客戶和服務器在這裏。客戶打開連接:服務器接受它們。客戶端得到讀取超時,所以它是沒有響應的服務器。 – EJP

+0

我見過這發生在服務器試圖發送到客戶端,並得到一個套接字錯誤的其他艾西。服務器在客戶端請求上監聽一個套接字,然後通常產生一個專用線程來處理專用套接字上的客戶端,而衆所周知的端口則被釋放以接受更多的客戶端請求。無論如何,第一步是檢查類路徑。 – bpendell

+0

使用端口「80」建立TCP連接是否正常?我的客戶機在與服務器建立連接後立即獲得「連接超時」。有沒有辦法保持TCP連接活着?我嘗試使用socket.setKeepAlive(true),但這似乎沒有幫助。 – skmr

相關問題