我只是想实现Http下载的控制
可是无论我用MFC还是API结果都是:SendRequest()或HttpOpenRequest()的时候就将整个文件下在完成了(大文件要等很长时间。。)
Read()只是将存在CHttpFile* pFile中的数据读出来罢了,并不是从网络上读到的(因为我把网络断开测试过了!)我想问问有没有控制的方法,或者就是WinInet的毛病呢!谢谢!

解决方案 »

  1.   

    WinInet 本来就是为上层提供简单接口的。如果需要控制,可以用win 32 api 可以一点点read , 这应该算是很好的控制的方法 HINTERNET hRootHandle, hOpenUrlHandle;
    hRootHandle = InternetOpen(
       TEXT("Example"), 
       INTERNET_OPEN_TYPE_DIRECT, 
       NULL, 
       NULL, 
       0); hOpenUrlHandle = InternetOpenUrl(
      hRootHandle, 
      TEXT("http://www.LooseSoft.com"),
      NULL,
      0, 
      INTERNET_FLAG_RAW_DATA,
      0); //InternetSetOption( hOpenUrlHandle, 
     
    int leng = 0;
    char lpBuffer[ 1024 ]; while( TRUE )
    {
    memset( lpBuffer, 0, 1024 ); DWORD dwRead;
    BOOL b = InternetReadFile( hOpenUrlHandle,
    lpBuffer, 
    1024,
    &dwRead ); if( !b )
    break;
    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT2 );

    pEdit->SetSel( leng, leng ); 

    CString strText = lpBuffer;
    strText.Remove( '\r' );
    strText.Remove( '\n' ); 

    pEdit->ReplaceSel( strText );
    //break;
    leng += dwRead; if( dwRead < 1024 )
    break;
    }// Close the handle created by InternetOpenUrl, so that the
    // InternetOpen handle can be closed.
    InternetCloseHandle(hOpenUrlHandle); // Close the handle created by InternetOpen.
    InternetCloseHandle(hRootHandle);
      

  2.   

    http://www.csdn.net/magazine/sourcecode/Topic/0/76.shtm
      

  3.   

    兄台,这个程序我看了n遍了!!
    就是不明白,为什么人家做的时候都好象是从网络上一点点下载数据的,到我这里就变成
    先下载再读取了?我虽然没实现这个程序,不过我的程序和他没什么区别呀!也就是一个是builder,一个是vc!有没有人实现过这个程序,给我解释一下,我已经困惑好几天了!
    这个HttpSendRequest(FhRequest, NULL, 0, NULL, 0);是不是就把数据完全下载了呢?感激感激!
      

  4.   

    to:davemin兄
    你的意思是wininet不能实现了?用控制的手段来伪装我也可以办到。。
    不过http://www.csdn.net/magazine/sourcecode/Topic/0/76.shtm所说的程序难道有一定的欺骗性?
    呵呵,如果是这样,我只好改用socket了!用wininet也是想学些东西,真的不行吗?
      

  5.   

    呵呵,搞定了,原来是需要写http协议:range: bytes= 8000-9999辛苦各位了不过,csdn现在不知是人气不旺,还是知道的人不愿意说,这么简单的问题知道的人一说就ok了!不知道的话,还要费不少力气。sign
      

  6.   

    原来是这个函数没有用对HttpSendRequest().