如何处理BufferedReader.readLine()转到空中并且不返回java中的任何值或异常?

时间:2013-05-18 06:06:51

标签: java sockets communication bufferedreader

我正在通过套接字通信读取文件。

连接。

在读取文件应用程序结束时,它不会返回任何值/ 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());
     }

1 个答案:

答案 0 :(得分:1)

来自其中一篇SO帖子:

  

只是停止读取会挂起的问题就是这样   有两种情况发生:

     

1:服务器没有更多要发送的数据

     

2:服务器已发送更多数据,但您的客户端尚未收到   但由于网络过载。

     

你只想在第一种情况下真正停止阅读,但是你   希望在第二种情况下读取阻止。

     

解决这个问题的方法是制作传输协议(标准)   允许服务器告诉客户端它希望发送多少数据。

     

如果服务器事先知道总数据大小,只需从中开始   发送传输中的总字节数,然后发送   数据。这样客户端就知道它什么时候收到了所有数据。

     

(或者服务器完成后可以简单地关闭连接。这样   读取应该失败,但这只有在您不需要连接时才有效   在将来)