socket通讯,客户端获取数据丢失问题
客户端与服务端建立连接后,从服务端获取byte[],数据量在63757以上发现只能获取部分剩下的全部都是空,
文章图片
上面的代码是这样写的
byte rcvData[] = new byte[len];
rd.read(rcvData);
result = new String(rcvData,"gbk");
我的理解是socket获取到了这么多数据,但是流在写入的时候有限制
解决方式:分段获取
具体代码: byte rcvData1[] = readBytes(rd,len );
result = new String(rcvData1,"gbk");
readBytes从网上拷贝一段即可,例如
【socket通讯,客户端获取数据丢失问题】public static byte[] readBytes(InputStream in, long length) throws IOException {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int read = 0;
while (read < length) {
int cur = in.read(buffer, 0, (int)Math.min(1024, length - read));
if (cur < 0) { break;
}
read += cur;
bo.write(buffer, 0, cur);
}
return bo.toByteArray();
},得到的rcvData1[]
文章图片
推荐阅读
- spring|spring boot项目启动websocket
- CocoaAsyncSocket|CocoaAsyncSocket (GCDAsyncSocket)适配IPv6
- 核心
- WebSocket|WebSocket 语法解析
- day|day 28 设置路由表
- thinkphp3.2下实现阿里云视频点播实例(客户端JavaScript上传)
- Websocket和Socket.io的区别及应用
- C语言静态动态两版本通讯录实战源码
- Android轻松实现跨进程/跨app通讯框架及其原理
- GD32VF103|GD32VF103 I2C 通讯