以下代碼應檢測到沒有更多字節需要讀取。然而,它只是掛起,直到客戶端連接關閉。如何檢測socket的InputStream結束?
服務器
//...
StringBuilder builder = new StringBuilder(128);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = socket.getInputStream().read(buffer)) != -1) {
System.out.println(length);
builder.append(new String(buffer));
System.out.println(builder.toString());
}
客戶
//...
OutputStream stream = clientSocket.getOutputStream();
stream.write("LIST".getBytes());
stream.flush();
的API,並在這樣的問題以前的答案州然而,這是-1應該意味着沒有要讀取的字符,循環寫入:
LIST
掛起20秒,直到客戶端關閉套接字並且拾取-1終止循環。
我該如何正確檢測到流中沒有更多字符?
此後連接應該保持打開狀態。
我可以提前發送字節數或特殊字符,但可以檢測到即使連接仍處於活動狀態,也無法再讀取任何內容。
我試着用0和它掛起不管。在Java中的 – John
@vlp -1。 InputStream.read()不能返回零,除非你提供一個零長度緩衝區或一個零計數。 – EJP