java 安卓无法接收pc发送的所有数据
在我的程序中,pc不断向我的安卓手机发送数据。每次pc发送62字节(头部24字节,内容38字节)。我的程序运行良好。但有时我的手机可以读取24字节的头部数据,只能读取10字节的内容
我通过非块socketchannel接收数据
private SocketChannel client = null;
public int read(byte[] data,int offset, int len){
try {
ByteBuffer buffer = ByteBuffer.allocate(len);
int read_len = client.read(buffer);
if(read_len == 0){
}else if(read_len == -1){
}else{
buffer.flip();
buffer.get(data, offset, read_len);
}
return read_len;
} catch (IOException e) {
e.printStackTrace();
}
return -2;
}
我怎样才能解决这个问题
# 1 楼答案
可能存在网络问题,但我认为更有可能的是,由于TCP是一种面向流的协议,不保留消息边界,因此偶尔会收到与pc发送的字节不一致的有效负载。这是正常的,也是意料之中的。这只是意味着你需要做更多的工作
我假设通过
read
消息,您希望继续读取数据,直到有足够的数据填充提供的字节数组。试试这个:读入字节缓冲区的好处在于,它能在多次读取时正确连接字节,所以只需循环直到完全
顺便说一句——不要忘记从缓冲区的长度中减去偏移量(如果它不是零)