Java Netty-第二个数据包被忽略
如果我立即发送两个数据包,客户端通常会忽略第二个数据包。在某些情况下,它会把它捡起来,但通常情况下,它就像一开始就从未被发送过一样。我已经完成了所有的调试,看起来服务器确实在发送它,但是客户端从来没有任何线索 我正在使用Java Netty-第二个数据包被忽略,java,sockets,networking,netty,nio,Java,Sockets,Networking,Netty,Nio,如果我立即发送两个数据包,客户端通常会忽略第二个数据包。在某些情况下,它会把它捡起来,但通常情况下,它就像一开始就从未被发送过一样。我已经完成了所有的调试,看起来服务器确实在发送它,但是客户端从来没有任何线索 我正在使用ByteBuf,这是Netty 4中ChannelBuffer的新版本 以下是我通过网络发送信息的方式: getChannel().writeAndFlush(buffer.retain()); 现在奇怪的是,如果我把它们一起发送,没有什么会弄混。原始数据包数据按原样放在一起,
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写入基础套接字时将对其进行调整。不幸的是,情况并非如此:
[OGSERVER]:Debug 1[OGSERVER]:构造了id为0的数据包。[OGSERVER]:数据包的长度为16字节。[OGSERVER]:数据包类型为TCP[OGSERVER]:=======================================================================================[OGSERVER]:已构造id为1的调试2[OGSERVER]:数据包。[OGSERVER]:数据包的长度为8字节。[OGSERVER]:数据包类型为TCP[OGSERVER]:==============================================================================================
,显示发送的不同缓冲区。但是,客户端仅打印以下内容:接收到id为0的[TCP]数据包操作码。长度:16
这表明它只承认第一个缓冲区?如果缓冲区被发送了两次,它会这样说。没有更多细节,很难说。你能分享你的全部代码吗?