用我们自己的TCP/IP协议栈写了个HTTP下载的程序,在接收服务器发送过来的数据的时候老是收不到正确的数据。
有的时候能收完。。但是时间非常长了。。一个3M的文件要花费5分多钟还是在内部局域网搭建的HTTP服务器和客户端哦。。
不知道是我们的协议栈没写还是其他原因额。。

解决方案 »

  1.   

    如果你用HTTP发文件似乎不太合适,应该是用FTP,或者直接用TCP/IP,UDP/IP发,你说呢
    估计是你协议有问题,也有可能是你的程序效率太低,用多线程实现的吗
      

  2.   

    肯定是你的代码的问题,你是用MFC的CHttpFile还是直接用Socket来写的?
    给你一个用cHttpFile来下载一个文件的函数例子吧://****************************************************************************************//
    //函数 GetWebContent
    //主要功能: Get方式向服务器传数据
    //参数列表: 
    //返回值: 
    //备注: 
    //****************************************************************************************//
    void GetFileContent(CString strURL, char *szFileName)
    {
    CInternetSession sess;//Create session
    CHttpFile* fileGet;
    CException* e = NULL;
    TRY
    {
    fileGet=(CHttpFile*)sess.OpenURL(strURL);//Open file
    }
    CATCH_ALL(e)
    {
    fileGet = 0;
    }
    END_CATCH_ALL if(fileGet)
    {
    DWORD dwStatus;
    DWORD dwBuffLen = sizeof(dwStatus);
    BOOL bSuccess = fileGet->QueryInfo(
    HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
    &dwStatus, &dwBuffLen); if( bSuccess && dwStatus>=  200&& dwStatus<300 ) 
    {
    FILE *f;
    f = fopen(szFileName, "wb");
    char buffer[1024];
    int nSize = fileGet->Read(buffer, 1024);
    while(nSize > 0)
    {
    fwrite(buffer, sizeof(char), nSize, f);
    nSize = fileGet->Read(buffer, 1024);
    }
    fclose(f);
    }// if bSuccess.
    fileGet->Close();
    delete fileGet;
    }
    else
    {
    TRACE0("对不起,连接超时,无法打开站点!");
    }
    sess.Close();
    }
      

  3.   

    晕,自己实现的HTTP,跟踪调试不就知道了么
    最多加个日志功能,就可以知道时间消耗在哪里