我们的客户端(android)与服务端进行socket通信的时候发现,根据自定义协议(44个字节包头<含包体长度> +包体)客户端读取包头后包体长度为21494,但是每次分4k或8k循环读取时,只能读到16k+1400-44=17740(16k+1400-包头长度),之后则无法读取到内容直到超时。因为服务端的代码是之前另外的人用NIO写的,而且做了封装,只能用工具看大概的代码。服务端在调用NIO的send之前数据byte[]长度都是正确的。
发送基本代码如下:public void send(byte[] pdata) throws IOException {
if ((pdata != null) && (pdata.length > 0)) {
ByteBuffer localByteBuffer = ByteBuffer.allocate(pdata.length);
localByteBuffer.put(pdata, 0, pdata.length);
localByteBuffer.flip();
socketChannel.write(localByteBuffer);
}
}另外如果服务端部署在windows机器上,则20k多点的数据是正常的,而Linux环境下则后面数据被截断未发送,求大神指导是操作系统还是虚拟机还是哪里造成的该截断,有何解决方案。跪谢!