这两天把用socket发送定长报文通讯改成分页请求后,就去调试了,由于数据量大,部署上去我接收到的数据最会打印长度都是8912,然后就用我自带的笔记本通过socket发同样一模一样的数据后发现没问题,然后我们调试双方就各种考虑问题,他们怀疑我的代码最大只能接收8912的byte限制,我就说哪不对啊,我自己测多大都能收过来,就部署到你这里,你们给我发多少数据就接收都少数据,他们又说我这边可能由于网络,因为毕竟是跨网段的,可能会有延迟,而我没有加延迟导致数据接收的少,说着他就开始这样演示说他那边加了延迟就不会这样了,我发现是这样啊,然后就回公司研究去了。
回到公司加了延迟发现还是不行,后来定位到原来是in.available()问题,可能是环境,也可能是网络,他那边就是全部发过来,我最大就是8912的长度,8912的长度开辟空间,接收也就只能是8912了,所以数据解析失败,然后解决的办法是,用in.read()读取头部5位,这个头部5位是我们自己定义的报文长度,然后获取长度是23900,我就用这个个得到的真实的又不数据,然后根据这个长度开辟空间,这样所有的数据就都能接收到了。
改之前

改之后

就可以了
int lengthHeader = 5;
byte[] lengthByte = new byte[lengthHeader];
in.read(lengthByte);
S

最低0.47元/天 解锁文章
8630





