服务器代码段:
reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(connection.getInputStream())));
if (reader.ready()) {
result = reader.readLine();
if (result == null) {
quit(); // handle closing the socket
} else {
// process result
}
}
客户端代码段:
BufferedOutputStream os = new BufferedOutputStream(connection.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII");
osw.write("hello\n");
osw.flush();
问题:
当客户端向服务器写入内容时,它会被正确读取,但当客户端关闭它的套接字时(例如强制退出程序),reader.readLine()
应该输出null
,因为{{1 null结果永远不会到达if (reader.ready()) {
。
如果我离开quit()
,服务器将无法读取数据。
我该如何解决这个问题?
编辑:我不能使用if (reader.ready()) {
因为我需要在此之后运行更多代码:
while ((result = reader.readLine()) != null) {
答案 0 :(得分:0)
只需删除ready()测试即可。它是如此简单。 ready()不是流结束的测试。 readLine()将在没有数据时阻塞。
您必须在读取循环之外创建一次BufferedReader。否则你将丢失数据。
答案 1 :(得分:0)
我自己通过每5秒运行一段代码解决了这个问题:
try {
BufferedOutputStream os = new BufferedOutputStream(thread_cnn.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII");
osw.write("areyoustillthere\n");
osw.flush();
} catch (Exception e) {
quit(); // handle quit if server can't reach client
}