Socket发送多张图片只接收到一张的缘故
Socket发送多张图片只接收到一张的原因
昨天在实现socket发送多张图片时也碰到只接收到一张的情况,于是到网上找了一些资料,没有找到解决办法。也在昨天时,为了解决别的问题,无意中把上述问题也解决了。我在发送过程中是用DataOutputStream的write()方法将图片写入到输出流中,在客户端是通过DataInputStream的read()方法读取。在客户端中使用的是inputStream.read(buffer),buffer为byte数组对象,设长度为size,如果流中还有数据的话,每次读取的长度都为size个byte。在服务端中将图片写入输出流时,用到的是outputStream.write(buffer),buffer为byte数组对象,长度也设为size。看附件图片,在发送的时候,如果一张图片不是size的倍数,则补充到size一样的长度,在写入流中,这样在客户端接收时,只要每次read size个byte到FileOutputStream中就可以。用DataOutputStream来发送会出现只接收到一张的原因是第一张图片写入到流中时接着写第二张图片,如果第一张图片不能刚好是size的倍数,当客户端每次读取size个byte时,在将要读完第一张的那个buffer中,存在部分第二张图片的byte,使得第二张以后的图片都没办法获得完整的byte。所以没办法读取。详细代码请看本人的另一篇博客《Socket实现多张图片的传送》http://jingai-jia.iteye.com/admin/blogs/1202140
1 楼
num12369
2012-04-21
你好,看了你的文章《Socket实现多张图片的传送》,在电脑端可以实现多张图片的传送,可是当我把客户端移植到手机上后,手机只能收到第一张图片,那个while(true)循环第二次执行的时候阻塞在imageName = inputStream.readUTF();这句代码上,收不到服务器发来的数据,所以后面的数据就都收不到了,这是怎么回事呢,有时间的话,请你回复我一下,谢谢了,我调试了一晚上都还是这个样子,快崩溃了
2 楼
晓夕哈哈
2012-10-09
我也出现上面的问题了,上楼解决了没?请详细告诉我一下,谢谢