0

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

建立的连接。

在读取文件应用程序结束时挂起,它不返回任何值/异常/null。仍在等待输入。

如何处理这个。

我尝试了以下代码:

 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());
     }
4

1 回答 1

1

从 SO 帖子之一:

仅仅在 read 挂起的地方停止的问题是这可能发生在 2 种情况下:

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

2:服务器发送了更多的数据,但是由于网络过载,您的客户端还没有收到。

而且您只想在第一种情况下真正停止阅读,但您希望在第二种情况下阅读阻止。

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

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

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

于 2013-05-18T06:13:19.257 回答