ce socket的奇怪问题

天雪   2009-9-29 09:58 楼主
我用socket实现与服务器的文件下载工作(分包下载)

分包协议是
第一步从服务器分送请求文件下载的命令,然后获取要下载文件的总包数
第二步循环从服务器下载每个包,如果该包下载出错,则重传该包,每个包大小5K

但是问题来了大多数recv的包是正常的,但有时候却出现了异常的包,而且这种异常包出现的时候recv函数可以再服务器不向客户端发送数据的情况下从缓冲区copy到数据。

请问有谁知道这是什么原因?

现在可以确定不是网络的原因,因为根据抓包分析网卡接收到的数据是正确的。

回复评论 (5)

机制是大概明白了,但是没有代码,也没有其他的辅助证据,也没有办法判断啊,
建议楼主,先在PC上验证完全没有问题,再编译为CE的,进行验证,拙见,不要见笑啊
点赞  2009-9-29 10:06
网卡接收的数据是正确的,但到应用就出错?

出现异常包,异常在什么地方?看看有没有什么规律可找?

点赞  2009-9-29 10:08
异常在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
点赞  2009-9-29 11:23
没人回答
点赞  2009-9-29 16:54
请将包大小改为TCP包试试。
点赞  2009-10-12 15:31
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复