KumoKyaku / kcp

KCP C#版。线程安全,运行时无alloc,对gc无压力。
MIT License
832 stars 136 forks source link

发生了数据损坏的现象 #10

Closed bobowire closed 3 years ago

bobowire commented 3 years ago

' for (int i = 0; i < 30; i++) { clientSt.kcp.Send(Encoding.UTF8.GetBytes($"第{i}次数据_{DateTime.Now}")); } ' 在第9次,第17次时,大概率出现数据损坏,“据”位置乱码

以下是数据接收代码: ' client.kcp.Update(DateTime.UtcNow); int readLength = client.kcp.PeekSize(); while (readLength > 0) { var bytes = new byte[readLength]; int length = client.kcp.Recv(bytes); if (length > 0) { //todo:已经接收到完整包 Console.WriteLine(Encoding.UTF8.GetString(bytes.Take(length).ToArray())); } readLength = client.kcp.PeekSize(); } '

bobowire commented 3 years ago

有QQ群的话,可以提供以下,我传个Demo文件

KumoKyaku commented 3 years ago

可以发送到我的邮箱

KumoKyaku commented 3 years ago

Test.zip 数据错误现象对比

没有发现数据错误,可能是VSBUG,可以考虑用个控制台程序验证。

乱序 乱序可能的原因

乱序问题可能是timer多线程导致的。类库保证线程安全 指的是可以用不同的线程Input output send recv update,多个线程同时Recv理论上也是安全的,但是我也不能保证……建议还是用用一个线程Recv,处理完一次再处理下一次。