我在编写将位图作为数据传递的服务器-客户端通信时遇到麻烦。
在我的服务器端
InputStream in = rs.getBinaryStream(1);
ByteArrayOutputStream f2 = new ByteArrayOutputStream();
int c = 0;
while ((c = in.read()) > -1) {
f2.write(c);
}
bytes = f2.toByteArray();
username2.write(bytes, 0, bytes.length);
在我的Android客户端上,
ByteArrayOutputStream out = new ByteArrayOutputStream();
final byte[] buffer = new byte[2048];
int read = -1;
while ((read = receiveimagem.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
问题是,当我在服务器端关闭outputStream时,客户端仅了解发送已结束。但是该结构在一个循环内,如果我关闭套接字,它将无法再次使用。我如何告诉客户数据已经结束?该代码同时停留在Android客户端中。我知道我应该发送长度并检查它,但是我不知道如何使用长度来检查文件的末尾。
将图像的长度传递给客户端时,您的主要问题是服务器本身在开始传输图像之前不知道输入的长度。服务器应首先将整个图像读入缓冲区,然后将缓冲区的长度发送给客户端。然后,客户端可以在for循环条件下使用接收到的大小执行for循环。更好的解决方案是让客户端在一次调用中读取所有图像,因此您无需在客户端中循环。通常可以并且应该避免一次执行一个字节的I / O。还记得刷新两个输出流!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句