• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 23,  comments - 20,  trackbacks - 0
            最近工作比較輕松  現(xiàn)在沒(méi)事不能不寫(xiě)代碼  呵呵 閑著沒(méi)事  想做個(gè)下載工具
            先大致分成三步做吧 
            第一步  文件的下載  最基礎(chǔ)
            第二步  多線程連接下載文件    提高速度的關(guān)鍵
            第三部  斷點(diǎn)續(xù)傳    非常實(shí)用

            今天來(lái)實(shí)現(xiàn)第一步吧
            文件的下載  http協(xié)議的

            使用了一個(gè)VC知識(shí)庫(kù)的Http類      不多說(shuō) 上代碼
              1 //確定按鈕
              2 void CHttpDownloadDlg::OnBnClickedOk()
              3 {    
              4     ::CreateThread(NULL,0,DownloadThreadProc,(PVOID)this,NULL,NULL);    
              5 }
              6 
              7 //退出按鈕
              8 void CHttpDownloadDlg::OnBnClickedCancel()
              9 {
             10     // TODO: 在此添加控件通知處理程序代碼
             11     OnCancel();
             12 }
             13 
             14 //獲取存儲(chǔ)的文件夾
             15 CString CHttpDownloadDlg::GetStorgeFolde(void)
             16 {
             17     CString strFold;
             18     BROWSEINFO   bi;  
             19     TCHAR   buffer[MAX_PATH];  
             20     ZeroMemory(buffer,   MAX_PATH);  
             21     bi.hwndOwner   =   GetSafeHwnd();  
             22     bi.pidlRoot   =   NULL;  
             23     bi.pszDisplayName   =   buffer;  
             24 
             25     bi.lpszTitle   =   _T("選擇一個(gè)文件夾");  
             26     bi.ulFlags   =   BIF_EDITBOX;  
             27     bi.lpfn   =   NULL;  
             28     bi.lParam   =   0;  
             29     bi.iImage   =   0;  
             30 
             31     LPITEMIDLIST   pList   =   NULL;  
             32     if   ((pList   =   SHBrowseForFolder(&bi))   !=   NULL)  
             33     {  
             34         TCHAR   path[MAX_PATH];  
             35         ZeroMemory(path,   MAX_PATH);  
             36         SHGetPathFromIDList(pList,   path);  
             37         strFold = path;
             38         UpdateData(FALSE);        
             39     }    
             40     return strFold;
             41 }
             42 
             43 //線程函數(shù)
             44 DWORD WINAPI DownloadThreadProc(LPVOID pDate)
             45 {
             46     CHttpDownloadDlg * pMainDlg = (CHttpDownloadDlg*)pDate;
             47     //pMainDlg->m_DownloadProg.SetPos(30);
             48     CHttpSocket HttpSocket;
             49     CString strServer , strObject ;
             50     USHORT uPort;
             51     DWORD dwServerType;
             52     long lLenth;
             53     const char * pRequestHeader = NULL;
             54 
             55     //通過(guò)URL獲取相關(guān)參數(shù)
             56     AfxParseURL(pMainDlg->m_strDownloadAddr , dwServerType , strServer , strObject , uPort);
             57     pRequestHeader = HttpSocket.FormatRequestHeader((LPTSTR)(LPCTSTR)strServer , (LPTSTR)(LPCTSTR)strObject , lLenth );
             58     HttpSocket.Socket();
             59     HttpSocket.Connect((LPTSTR)(LPCTSTR)strServer );
             60     HttpSocket.SendRequest();
             61     HttpSocket.SetTimeout(100);
             62 
             63     char szLength[15];
             64     HttpSocket.GetField("Content-Length" , szLength , 15);
             65     int iServerState = HttpSocket.GetServerState();
             66     int iFileSize = atoi(szLength);
             67     pMainDlg->m_DownloadProg.SetRange(0,iFileSize/1024);    //設(shè)置進(jìn)度條
             68     CFile file;
             69     file.Open(pMainDlg->m_strStorgePath , CFile::modeCreate | CFile::modeWrite);
             70     char szDate[2048];
             71     int iRecvSize = 0;    //讀取的文件大小
             72     int iCompleteSize = 0;
             73     //DWORD dwStartTime , dwEndTime;    //暫時(shí)不計(jì)算速度
             74     while (iCompleteSize < iFileSize)
             75     {
             76         //dwStartTime = GetTickCount();
             77         iRecvSize = HttpSocket.Receive(szDate , 2048);
             78         if (iRecvSize == 0)
             79         {
             80             ::AfxMessageBox("服務(wù)器關(guān)閉鏈接");
             81             break;
             82         }
             83         if (iRecvSize == -1)
             84         {
             85             ::AfxMessageBox("接收數(shù)據(jù)超時(shí)");
             86             break;
             87         }
             88         //dwEndTime = GetTickCount();
             89         file.Write(szDate , iRecvSize);
             90         iCompleteSize += iRecvSize;
             91         pMainDlg->m_DownloadProg.SetPos(iCompleteSize / 1024 );        
             92     }
             93     file.Close();
             94     pMainDlg->m_DownloadProg.SetPos(0);
             95     AfxMessageBox("下載完成");
             96     return 1;
             97 }
             98 
             99 //獲取存儲(chǔ)路徑   仿造迅雷的獲取存儲(chǔ)名稱 盡量不要用戶使用鍵盤(pán)
            100 void CHttpDownloadDlg::OnBnClickedGetStorgePath()
            101 {
            102     UpdateData(TRUE);
            103     if(m_strDownloadAddr == "")
            104     {
            105         AfxMessageBox("請(qǐng)輸入下載地址" , MB_OK);
            106         return ;
            107     }
            108 
            109     CString strFileName = m_strDownloadAddr;
            110     m_strStorgePath = GetStorgeFolde();
            111 
            112     while(strFileName.Find("/"!= -1)
            113     {
            114         int i = strFileName.Find("/");
            115         strFileName = strFileName.Mid(i +1 , strFileName.GetLength() - i - 1);
            116     }
            117 
            118     m_strStorgePath += strFileName;
            119     UpdateData(FALSE);
            120 }
            121 
            界面很簡(jiǎn)陋 


            今天就先做到這

            posted on 2009-08-17 12:10 李佳 閱讀(710) 評(píng)論(0)  編輯 收藏 引用 所屬分類: WIN32 應(yīng)用開(kāi)發(fā)
            <2009年8月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章檔案

            相冊(cè)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久婷婷五月综合色高清 | 久久青草国产精品一区| 国产午夜精品久久久久免费视| 少妇熟女久久综合网色欲| 人人妻久久人人澡人人爽人人精品| 99久久夜色精品国产网站 | 亚洲中文精品久久久久久不卡| 日韩精品久久无码中文字幕 | 久久99久久成人免费播放| 久久久久久av无码免费看大片| 一本色道久久88综合日韩精品 | 欧美激情精品久久久久久久九九九 | 久久精品国产免费观看三人同眠| 亚洲国产精品无码成人片久久| 久久久久一区二区三区| 区久久AAA片69亚洲| 26uuu久久五月天| 人妻精品久久久久中文字幕一冢本 | 国产A级毛片久久久精品毛片| 2020国产成人久久精品| 国内精品久久久久久野外| 亚洲国产视频久久| 久久综合狠狠色综合伊人| 亚洲欧洲日产国码无码久久99| 精品免费久久久久国产一区| 国产精品久久久久久福利69堂| 久久国产免费直播| 久久青青国产| 久久高清一级毛片| 国产精品福利一区二区久久| 影音先锋女人AV鲁色资源网久久| 久久精品国产精品亚洲| 91精品日韩人妻无码久久不卡| 国产成人久久精品区一区二区| 久久国产免费观看精品3| 麻豆成人久久精品二区三区免费| 午夜精品久久久久成人| 久久久久久久91精品免费观看| 久久久久国产视频电影| 人妻系列无码专区久久五月天| 韩国三级中文字幕hd久久精品|