如果我立即发送两个数据包,客户端通常会忽略第二个数据包。在某些情况下它会捡起它,但它通常就像它从未发送过一样。我已完成所有调试,看起来服务器肯定是在发送它,但客户端从来没有任何线索。
我使用ByteBuf
这是Netty 4中ChannelBuffer
的新版本。
以下是我如何通过网络发送信息:
getChannel().writeAndFlush(buffer.retain());
现在奇怪的是,如果我把这些发送到一起,什么都不会混淆。原始数据包数据就像它应该一样,没有问题。
第二个数据包根本没有通过。
所以,例如。
ByteBuf bufferA = Unpooled.buffer();
ByteBuf bufferB = Unpooled.buffer();
bufferA.writeInt(1);
bufferB.writeInt(2);
send(bufferA);
send(bufferB);
客户端只读取bufferA,完全忽略bufferB,甚至不会注册它的单个字节。
如果我使用Thread.sleep将它们分开,客户端可以正确加载它们。
不知道该怎么办?
服务器和客户端都使用netty。
编辑:我目前正在使用"作弊"修复为这种情况运行一个预定的执行程序(我需要一个接一个地发送两个数据包),但这根本不能解决手头的问题。答案 0 :(得分:0)
也许您尝试两次发送相同的缓冲区?在这种情况下,您需要首先调用duplicate(),否则它将共享相同的readerIndex和writerIndex,当ByteBuf写入底层套接字时,它将被调整。