hkspirt/kcp-java

数据编码时因大小端不符无法与 skywind3000/kcp 正常通信

sjx95 opened this issue · 4 comments

sjx95 commented

手滑没写完就发上去了,不好意思……

今天试图使用dalao的 kcp-java 与 官方的 skywind3000/kcp 进行通信,但失败了,在 C 版本中进行追踪,发现是conv不符合,被丢弃了。

然后抓包,发现使用 conv = 1428 时,Java 实现的 kcp 的 UDP 包头 4 个字节是 0x00 0x00 0x05 0x94,C 实现那边解码出来就变成了 2483355648 这样的奇怪的数据。

然后使用 C 实现的 KCP 发送并抓包,发现头4个字节是 0x94 0x05 0x00 0x00。

@sjx95 @hkspirt
skywind3000/kcp#53
kcp作者在这里说了,kcp是特意将大端转成小端来用的。所以,这里代码如果要和kcp兼容,那么数据转码就也应该改成小端模式

sjx95 commented

我也这么觉得…

因为项目之前一直用大端,所以就改成大端了...注释里特别写了msb(原著是lsb)...不过其实最后选择了jni...

sjx95 commented

OK,因为在 README 里没讲,我也没注意。。
(其实还是我太菜,没仔细翻代码 23333
不过 JNI 大法确实好,我也打算用 JNI 了。