byte[] bytes = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = input.read(bytes)) != -1) {
     output.write(bytes, 0, bytesRead);
}
bytes = output.toByteArray();客户端接收代码如上,服务端显示已经发送完毕,但是客户端就停在这里,不知道什么原因,如果服务端切断连接,客户端就会继续进行下去(显示图片)请问有什么可能会导致这个问题呢?

解决方案 »

  1.   

    socket读可以是阻塞也可以设超时的,发送方发完了接收方还在读就阻塞了。发送方断开read会返回错误就会继续执行下面的了。可以在发送的时候先把要发送文件的大小告诉接受方,接受方计数收完文件后停止read,就不会阻塞了也可以设不阻塞可以设读超时的,当超过多少时间没数据就结束。
      

  2.   

    试着稍微改一下!byte[] bytes = new byte[8192];
    int bytesRead;
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    while ((bytesRead = input.read(bytes)) != -1) {
         output.write(bytes, 0, bytesRead);
    }
    bytes = output.toByteArray();
    output.flush();
    socket.close();