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.   

    while ((bytesRead = input.read(bytes)) != -1) {
         output.write(bytes, 0, bytesRead);
    }
     你这个方法有问题,没有判断是否结束已完成的判断。
    因为是socket,所以服务器端没有断开连接,所以 这里input.read(bytes)永远不可能返回 -1,相反,再没有数据可以返回时,这时被阻塞了。
    所以服务器端,除返回图书之外,还应该返回一个图片大小,客户端在接收时,根据图片大小,决定是否还继续使用input.read方法读写,或者服务器端在发送完数据之后,主动断开连接,这样客户端就能接收到input.read = -1的数据了。这根线程没关系,这本来就是socket通信的本质,就是读数据和阻塞之间的关系,有数据就读,没数据时,你要读就阻塞。