我试图在android上通过蓝牙发送一个字节数组。我有一个服务器/客户端设置工作。我将登录详细信息(如字符串和整数)从一个发送到另一个(双向工作)。现在我在我的程序中有点需要发送多个字节数组。我的服务器首先发送一个对应于数组长度的整数,然后发送byte []。客户端通过读取int和读取数组来镜像它。第一个int正确发送,但之后客户端正在读取服务器似乎没有发送的巨大的int值。
这是我的服务器端代码:
case 25:
Log.d("CONSEQUENCES", "STARTING CODE 25");
while (true) {
ArrayList<byte[]> toSend = queue.take();
Log.d("CONSEQUENCES", "TAKEN IMAGES");
Log.d("CONSEQUENCES", "taken images size = " + toSend.size());
for (int i = 0; i < toSend.size(); i++){
Log.d("CONSEQUENCES", "item length = " + toSend.get(i).length);
oos.writeInt(toSend.get(i).length);
oos.flush();
oos.reset();
oos.write(toSend.get(i));
oos.flush();
oos.reset();
}
Log.d("CONSEQUENCES", "SENT IMAGES");
Log.d("CONSEQUENCES", "SENT images size = " + toSend.size());
}
以下是服务器端的日志:
以下是客户端代码:
case 25:
while (true){
Log.d("CONSEQUENCES", "WAITING FOR IMAGES");
ArrayList<byte[]> received = new ArrayList<byte[]>();
for (int i = 0; i <25; i++){
int size = ois.readInt();
Log.d("CONSEQUENCES", "BYTE ARRAY SIZE: " + size);
byte[] item = new byte[size];
ois.read(item);
received.add(item);
}
Message message = handler.obtainMessage(BITMAP,
received);
Log.d("CONSEQUENCES", "READ IMAGES");
Log.d("CONSEQUENCES", "images size = " + received.size());
handler.sendMessage(message);
}
和客户端记录:
为什么我会收到如此大的in或为什么会失败的任何想法?
答案 0 :(得分:0)
我得到了这些整数,因为整个字节数组没有被发送过来。我换了:
ois.read(item);
与
int readBytes = -1;
while (readBytes != size) {
readBytes = readBytes + ois.read(item,readBytes,size-readBytes);
}