如果我立即发送两个数据包,第二个数据包通常会被客户端忽略。在某些情况下,它会接收它,但通常就像它从未发送过一样。我已经完成了所有的调试,看起来服务器肯定会发送它,但客户端却毫无线索。
我使用的是 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。
编辑:我目前正在使用一种“作弊”修复程序,该修复程序针对这种情况运行预定的执行程序(我需要一个接一个地发送两个数据包),但这根本无法解决当前的问题。
最佳答案
也许您尝试发送相同的缓冲区两次?在这种情况下,您需要首先对其调用duplicate(),否则它将共享相同的readerIndex和writerIndex,当将ByteBuf写入底层套接字时,它们将被调整。
关于java - Netty - 第二个数据包被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216181/