服务器端代码
CFile myFile;
myFile.Open("D:\\test.txt", CFile::modeRead | CFile::typeBinary); 

int myFileLength = myFile.GetLength(); // Going to send the correct File Size

sockRecv.Send(&myFileLength, 4); // 4 bytes long

byte* data = new byte[myFileLength]; 

myFile.Read(data, myFileLength);

//sockRecv.Send(data, myFileLength); //Send the whole thing now
for(int i=0;i<=myFileLength;i+=1024)
{
sockRecv.Send(data+i,1024); //Send the whole thing now
Sleep(10);
}
if(myFileLength%1024!=0)
sockRecv.Send(data+myFileLength-myFileLength%1024,myFileLength%1024);

解决方案 »

  1.   

    客户端代码:
    byte* data = new byte[dataLength];
    //sockClient.Receive(data, dataLength); //Get the whole thing
    for(int i=0;i<=dataLength;i+=1024)
    sockClient.Receive(data+i,1024); //Get the whole thing now
    if(dataLength%1024!=0)
    sockClient.Receive(data+dataLength-dataLength%1024,dataLength%1024);接受的数据写入文件后并不正确
    我实际读写的是个.exe文件,代码中暂且就用的txt文件代替
    程序也无法设置断点
    保证读文件部分代码是正确的,如果哪位有代码能否发到.cn
    必须是能传送大文件的哦http://www.codeproject.com/internet/SocketFileTransfer.asp这个是我参考的文章
    http://topic.csdn.net/t/20021011/08/1086665.html#
      

  2.   

    检查一下myFile.Read是否成功以及成功的字节数。。发送的时候检查Send返回是否成功。以及成功传送的字节数。。
      

  3.   

    接收的时候也是检查Receive是否成功。。以及成功接收的字节数。。
      

  4.   

    // 获取数据
    nDWORD CSocket::RecvTCP( void* pBuffer , DWORD dwLength , DWORD dwFlags )

    long lCurRecv =0;
    while( 1 )
    {
    int iTemp = recv( socket , ( nPCHAR )pBuffer+lCurRecv , ( nINT )dwLength , ( nINT )dwFlags );
     
    if( iTemp == SOCKET_ERROR )
    {
    int iError = WSAGetLastError();
     
    if( iError != WSAEWOULDBLOCK )
    return FALSE;
    }
    else

    lCurRecv+= iTemp;
    dwLength -= iTemp;
    if( 0 == dwLength )
    break;
    }
    }
    return TRUE;
    }// 发送数据
    nDWORD CSocket::SendTCP( void* pBuffer , DWORD dwLength , DWORD dwFlags )

    long lCurSend = 0;
    while (1) 
    {
    int iTemp = send( socket , ( nPCHAR )pBuffer+lCurSend , ( nINT )dwLength , ( nINT )dwFlags ); if( iTemp== SOCKET_ERROR )
    {
    if( WSAGetLastError() != WSAEWOULDBLOCK )
    return FALSE;
    }
    else
    {
    lCurSend +=iTemp;
    dwLength -= iTemp;
    if( 0 == dwLength )
    break;
    }
    }
    return TRUE;
    }
      

  5.   

    一般传文件不是一次性读出来然后一次性send出去的,而是一次读一小部分比如1024个字节然后发出去,这样循环直到文件发送完毕
      

  6.   

    for(int i=0;i<=myFileLength;i+=1024)
    {
    while(sockRecv.Send(data+i,1024)!=1024)
                      {} 
    Sleep(10);
    }
      

  7.   

    发送数据部分好像有问题。昨天就有人出现你类似问题,。你可以搜索以下帖子。另:vckbase上也有相关文章。
      

  8.   

    vckbase上的帖子我看了
    发不了大文件,我的程序就是在他的基础上改的
      

  9.   

    我在网上找到的一段代码
    简洁明了 UINT dwRead=0;
    while(dwRead<StreamFileInfo.nFileSizeLow)
    {
    byte* data = new byte[1024];
    UINT dw=myFile.Read(data, 1024);
    sockRecv.Send(data, dw);
    dwRead+=dw;
    delete [] data;
    }
      

  10.   

    CFile类的Read只能一次读去小于64K大小的文件,如果要一次读取大于64K,那么请用ReadHuge,原因请查MSDN