我正在通过套接字通信读取文件。
连接。
在读取文件应用程序结束时,它不会返回任何值/ exception / null.still等待输入。
如何处理。
我尝试了以下代码:
is = clientsocket.getInputStream();
// create new input stream reader
isr = new InputStreamReader(is);
// create new buffered reader
br = new BufferedReader(isr);
String value;
// reads to the end of the stream
while((value = br.readLine()) != null)
{
// converts int to character
// char c = (char)value;
// prints character
System.out.println(value);
System.out.println(br.readLine());
}
答案 0 :(得分:1)
来自其中一篇SO帖子:
只是停止读取会挂起的问题就是这样 有两种情况发生:
1:服务器没有更多要发送的数据
2:服务器已发送更多数据,但您的客户端尚未收到 但由于网络过载。
你只想在第一种情况下真正停止阅读,但是你 希望在第二种情况下读取阻止。
解决这个问题的方法是制作传输协议(标准) 允许服务器告诉客户端它希望发送多少数据。
如果服务器事先知道总数据大小,只需从中开始 发送传输中的总字节数,然后发送 数据。这样客户端就知道它什么时候收到了所有数据。
(或者服务器完成后可以简单地关闭连接。这样 读取应该失败,但这只有在您不需要连接时才有效 在将来)