请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

发送的数据长度和IoAgrs的buffer长度问题

图片描述发送的数据长度是30

但是buffer的capacity只有5
老师你看,这里有个疑惑,就是我发送的数据长度是30,但是我的IoArgs的buffer的capacity只有5,它是怎么把30的数据装到只有5的buffer中去的呢,明明装不下啊,想不通

正在回答

1回答

这里是这样的哈,capacity是5,等于容量为5;30字节放进去的时候其实仅仅放了一部分也就是头5个字节;然后发送。


之后再取第6~10的字节又放进去发送,依次循环,直到全部发送。



并不是一次放进去完全的。

0 回复 有任何疑惑可以回复我~
  • 提问者 等待灬 #1
    try {
                    // 具体的读取操作
                    if (args.writeTo(channel) > 0) {
                        // 读取完成回调
                        listener.onCompleted(args);
                    } else {
                        throw new IOException("Cannot write any data!");
                    }
                } catch (IOException ignored) {
                    CloseUtils.close(SocketChannelAdapter.this);
                }
    
      @Override
            public void onCompleted(IoArgs args) {
                // 继续发送当前包
                sendCurrentPacket();
            }
    
    嗯,是通过这个回调循环起来的是吧,然后假如去取6~10字节的时候,前5个字节的数据其实是已经发出去了,服务端已经能收到前5个字节的数据了是吗,因为在每次sendCurrentPacket()时都会恢复已经注册了的对WRITE的监听
    回复 有任何疑惑可以回复我~ 2018-12-28 10:49:32
  • Qiujuer 回复 提问者 等待灬 #2
    是通过这个循环来的,至于是否已经被流程接收到数据并不确定,取决于接收方的网卡状态与缓存。但是数据是已经到了链路层传输了。
    回复 有任何疑惑可以回复我~ 2018-12-28 11:21:16
  • 提问者 等待灬 回复 Qiujuer #3
    嗯,好的
    回复 有任何疑惑可以回复我~ 2018-12-28 11:24:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信