2011-07-04 45 views
0

我有我需要確認服務器端套接字是否關閉連接的場景。因此,我正在檢查if(in.read()== - 1)是否爲true,這意味着服務器端關閉了連接。 但問題是,如果它不阻止,因爲它阻止了call.i需要這樣一個解決方案,我可以在特定時間讀取非阻塞或在服務器端關閉連接時取消讀取。 我正在創造像InputStream Non Blocking讀取操作

socket = new Socket(); 
       // if server is not available 3 seconds blocking call other wise Exception 
       socket.connect(new InetSocketAddress(serverAddress , serverPort),3000); 

任何幫助,將不勝感激。

問候, 阿米爾

+0

請發佈您的代碼,因爲幾乎不可能知道您在嘗試做什麼而不知道如何打開連接到服務器。即你使用'HttpClient','URLConnection',原始套接字等? –

回答

0

假設這是對TCP,你嘗試過使用myClientSocket.isClosed()

+0

它總是讓我失望。 –

+0

這不是一個解決方案。它不會告訴你對方是否關閉了連接。它告訴你是否*你*關閉了連接。 – EJP

+0

是的EJP是對的,我沒有控制server.so我不能強制關閉服務器。 –

2

但問題是,如果它不是它 阻止這裏,因爲它阻止呼叫。

這不是唯一的問題。還有一個更大的問題:如果有數據到達,它將丟棄一個字節的數據。你當然不能那樣做。

你需要的是定時讀取。見Socket.setSoTimeout()

+0

我不能滿足這個答案。 'setSoTimeout()'隱藏得非常好:/ – Graeme