beykery / jkcp

kcp for java . 适用于moba,视频加速等需要极速传输场景的应用,c#版本(客户端)请参考:https://github.com/beykery/kcp4sharp
Apache License 2.0
186 stars 85 forks source link

发送9000个字节的消息会接收失败 #17

Open tidus5 opened 6 years ago

tidus5 commented 6 years ago

客户端建立连接后,发送 ByteBuf bb = Unpooled.buffer(128); int N = 9000; for (int i = N; i > 0; i-=4) { bb.writeInt(i); } tc.send(bb);

调试发现 server 的 Kcp.java 的 peekSize 总是走到 if (rcv_queue.size() < seq.frg + 1) { return -1; }

tidus5 commented 6 years ago

大概找到原因了,首先是默认的Netty 设置,缓冲区不够长,导致发送9000多字节后可能出现丢失。 然后KcpOnUdp.java 的update() 方法,时间戳转换为 int, 导致变成负数。 所以,超时补发也失效了。

希望作者修复这里 时间转为int的bug

beykery commented 6 years ago

@tidus5 已经把你的pr合并了。