111,129
社区成员
发帖
与我相关
我的任务
分享
//TCP协议
for (int i = 0; i < BagSize; i++)
{
int num = socket.Receive(bytes, bytes.Length, 0);
Buffer.BlockCopy(bytes, 0, byteData, i * 2040, num);//标记1
//Thread.Sleep(10);
}
循环写错了,应该是
for(;k<byteData.Length;k++)
byteData[k-PkgLen]=byteData[k];
Index=k;
改成
for(;k<Index+num;k++)
byteData[k-PkgLen]=byteData[k];
Index=k-PkgLen;
太久没写代码了,一大堆错误循环写错了,应该是
for(;k<byteData.Length;k++)
byteData[k-PkgLen]=byteData[k];
改成
for(;k<Index+num;k++)
byteData[k-PkgLen]=byteData[k];Index = 0;
for (;;)
{
int num = socket.Receive(bytes, bytes.Length, 0);
if(num == 0)
{
Thread.Sleep(10);
continue;
}
//byteData 数组大小定义为最大包的长度
Buffer.BlockCopy(bytes, 0, byteData, Index, num);//标记1
if( 判断 byteData 是否已经包含有完整的包信息了 )
{// 是的,byteData数组里已经有完整的一个包数据了
//提取这些数组,并进行处理(根据协议你可以到得本次数据包的长度为多少,长度用PkgLen来保存)
//把byteData数组的前PkgLen个字节删除,把后面数据全部前移.伪代码如下:
int k = PkgLen;
for(;k<byteData.Length;k++)
byteData[k-PkgLen]=byteData[k];
Index=k; // 下次接收的数据,放到byteData数组的Index下标开始的位置
}
}