KumoKyaku/kcp

发生了数据损坏的现象

bobowire opened this issue · 3 comments

'
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();
}
'

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

可以发送到我的邮箱

Test.zip
数据错误现象对比

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

乱序
乱序可能的原因

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