以下代码应检测到没有更多字节需要读取。但是它只是挂起,直到客户端连接关闭。
服务器
//...
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应该意味着没有要读取的字符,但是这个循环写道:
4
LIST
挂起20秒,直到客户端关闭套接字并选择-1来终止循环。
我怎样才能正确检测到流中没有其他字符?
此后连接应保持打开状态。
我可以提前发送字节数或特殊字符,但是有可能检测到即使连接仍处于活动状态,也无法再读取任何内容。
答案 0 :(得分:4)
API和之前关于此类问题的答案指出-1应该表示没有要读取的字符
我无法评论一些未经批准的答案可能会说的内容,但API文档中没有说明这一点。它表示在流结束时返回-1。套接字关闭连接时会发生套接字结束,或者关闭它以进行输出,而不是之前。
-1不是消息指示符的结尾。