Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Netty-第二个数据包被忽略_Java_Sockets_Networking_Netty_Nio - Fatal编程技术网

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
这表明它只承认第一个缓冲区?如果缓冲区被发送了两次,它会这样说。没有更多细节,很难说。你能分享你的全部代码吗?