本帖最后由 VisualEleven 于 2010-12-27 17:39:14 编辑

解决方案 »

  1.   

    先确定是你发送端的问题还是接收端的问题,rar文件不能解压,说明你的文件不全,数据有丢失,Debug下调试吧
      

  2.   

    用HexWorkShop比较前后两个rar文件,你就知道你少发了点什么之类的
      

  3.   

    我用winhex 看了一下,85K的RAR文件正常接收, 两百多K的文件就会出错,但是长度没有错,只是最后的数据不对
      

  4.   

    SOCKET  WSAAsyncSelect send()应该是按正常发送的顺序接收的吧,怎么最后的数据不对呢?而且小文件怎么又能正常接收 
      

  5.   

    是不是因数SOCKET WSAAsyncSelect send() recv()没有按正常发送的顺序接收的的问题啊,数据量对了,为什么,数据还会出错
      

  6.   

    cfile.Close();
    //closesocket(sockClient);这句先屏蔽掉看看.
      

  7.   

       if(i==1)
                                {
                                    recv(sockServer,recvname,100,0);
                                    S_name.Format("%s",recvname);
                                    i++;
                                    //MessageBox(hDlg,S_name,"文件名",NULL);
                                                                
                                    break;
                                }
                                if(i==2)
                                {
                                    recv(sockServer,recvsize,100,0);                                
                                    recvlen=atoi(recvsize);    
                                    recvedBuffer= (char*)malloc(recvlen);
                                    memset(recvedBuffer,0,recvlen);
                                    i++;
                                    //MessageBox(hDlg,recvsize,"文件大小",NULL);                                
                                    break;
                                }
    这一段可能就有问题,
    因为tcp协议是流式协议,你怎么来给这个流定界呢?
    所以,可能获取到的文件名于实际传输的文件名不一样,包括recvlen这个东东。另外,最后,获取文件内容的时候也没有判断对方关闭socket连接的情况,如果对方关闭了连接,recv会返回0的。