我用socket实现与服务器的文件下载工作(分包下载)
分包协议是
第一步从服务器分送请求文件下载的命令,然后获取要下载文件的总包数
第二步循环从服务器下载每个包,如果该包下载出错,则重传该包,每个包大小5K
但是问题来了大多数recv的包是正常的,但有时候却出现了异常的包,而且这种异常包出现的时候recv函数可以再服务器不向客户端发送数据的情况下从缓冲区copy到数据。
请问有谁知道这是什么原因?
现在可以确定不是网络的原因,因为根据抓包分析网卡接收到的数据是正确的。
机制是大概明白了,但是没有代码,也没有其他的辅助证据,也没有办法判断啊,
建议楼主,先在PC上验证完全没有问题,再编译为CE的,进行验证,拙见,不要见笑啊
网卡接收的数据是正确的,但到应用就出错?
出现异常包,异常在什么地方?看看有没有什么规律可找?
异常在recv的地方
//接收服务器端数据
BOOL CTCPClientSync::RevData(char* buff,int length,int* revLen)
{
if (buff==NULL)
{
ASSERT(0);
return -1;
}
//接收数据
int len=0;
len = recv(m_socket,buff, length,0);
if (len == SOCKET_ERROR || len == 0 )
{
return FALSE;
}
if (buff[0]!=0&&buff[1]!=0)
{
int error = GetLastError();
}
if (revLen!=NULL)*revLen=len;
return TRUE;
}
if (buff[0]!=0&&buff[1]!=0)
{
int error = GetLastError();
}
在这个地方发现接收下来的recv是一大堆的乱码,我的包头的前两位是00