tio发送信息出现了重复数据

jack__0023 发布于 2017/09/15 10:51
阅读 871
收藏 0

我使用tio的Aio去发送东西,当我循环遍历的去发送信息给同一个人的时候,比如我发送10条数据,接受人是接受到了10条数据,但是其中有几条是重复的脏数据,如图

然后我继承了Aio去检查发送,发现每次发送的信息都是正常,后面我线程睡50毫秒,来发送一次,(或者每次都创建一个新的packet对象去包裹),就不会出现脏数据,我想请问为什么?

加载中
0
talent-tan
talent-tan

是你解码写错了,参考showcase的写法,给你解码的bytebuffer的position不一定是从0开始的。

0
w
winty1113

我也遇到了同样的问题,我的场景是三个aio客户端给服务端发送消息,解码就是参照showcase写的

请问最后怎么解决的?

talent-tan
talent-tan
把解码算法贴出来,我看一下
0
w
winty1113

引用来自“winty1113”的评论

我也遇到了同样的问题,我的场景是三个aio客户端给服务端发送消息,解码就是参照showcase写的

请问最后怎么解决的?

解码算法和showcase一模一样,这个是我服务端的一段代码,注释那里,采用send,客户端接受到的数据异常,用bSend就不会有问题,

麻烦帮忙分析下是什么原因,非常感谢!

List<Map<String, Object>> proxyClientList = proxyClientService.getProxyClientList(enterpriseNo, allClientList);
for (Map<String, Object> proxyClientMap : proxyClientList) {
    String proxyClientEnterpriseNo = String.valueOf(proxyClientMap.get("enterpriseNo"));
    String proxyClientIp = String.valueOf(proxyClientMap.get("ip"));
    int proxyClientPort = Integer.parseInt(String.valueOf(proxyClientMap.get("port")));

    bsBody.setToEnterpriseNo(proxyClientEnterpriseNo);
    bsBody.setToIp(proxyClientIp);
    bsBody.setToPort(proxyClientPort);

    packet.setBody(Json.toJson(bsBody).getBytes(WorkerPacket.CHARSET));

    //给代理客户端发送搜索指令
    //此处异步发送会导致客户端接受数据异常,所以暂时采用阻塞发送
    //Aio.send(channelContext.getGroupContext(), proxyClientIp, proxyClientPort, packet);
    Aio.bSend(channelContext.getGroupContext(), proxyClientIp, proxyClientPort, packet);
}
返回顶部
顶部