我有Java代碼,它通過使用C++編寫的服務器的套接字發出請求。通信很簡單,java代碼爲請求寫入一行,然後服務器在響應中寫入一行,但有時候似乎服務器沒有響應,所以我實現了一個基於ExecutorService的超時,它試圖放棄重新啓動連接。如何刪除/重新啓動客戶端連接到片狀套接字服務器
與連接工作,我不斷:
Socket server;
PrintWriter out;
BufferedReader in;
因此,在設置連接的問題:
server = new Socket(hostname, port);
out = new PrintWriter(new OutputStreamWriter(server.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
如果不是因爲超時的代碼請求/接收步驟簡單地說:
String request="some request";
out.println(request);
out.flush();
String response = in.readLine();
當我收到一個超時時,我試圖關閉連接:
in.close();
out.close();
socket.close();
但是其中一個關閉似乎阻止並且不會返回。任何人都可以給我一個線索,爲什麼其中一個會阻止,什麼是放棄連接的正確方式,而不是資源泄漏問題?
我沒有嘗試調用setSoTimeout(),但它聽起來像隻影響讀取調用,如果我在寫入調用中被阻塞(這聽起來像我給out.close()也阻塞)它不會幫助我 - 對嗎? – 2009-08-14 17:36:25