青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 23,  comments - 20,  trackbacks - 0
費了九牛二虎之力  終于讓我把二弄出來了...
不好弄啊  本來都準(zhǔn)備算了
哎  技術(shù)人員  哪能那么簡單說放棄 ...
最后用了一個最笨的方法終于實現(xiàn)了要求

這次由于時間很匆忙  所以 界面方面沒有做任何工作  速度的計算也沒有 
本來是準(zhǔn)備用線程池的  試驗了一下  最后還是做老本行吧...自己創(chuàng)建線程
沒有什么多任務(wù)方面的概念   就是一個簡單的多線程的Demo
上代碼吧...頭疼  代碼很爛  不要丟磚頭

下載地址 HttpDownload MultiThread.rar
實現(xiàn)文件

  1 /***************************************************************************************
  2 *文件名稱: HttpDownload MultiThreadDlg.cpp
  3 *文件說明: 測試自己寫的多線程文件下載
  4 *思路說明: 利用最笨的方法  五個線程 每個線程寫入一個文件 然后最后由主線程來組裝成完整
  5 *          的文件
  6 *作    者: 李佳
  7 *完成時間: 09.8.18
  8 **************************************************************************************/
  9 
 10 #include "stdafx.h"
 11 #include "HttpDownload MultiThread.h"
 12 #include "HttpDownload MultiThreadDlg.h"
 13 #include "HttpSocket.h"
 14 #include "MyStruct.h"
 15 #pragma comment(lib , "Http.lib")
 16 
 17 #define  MAX_THREAD_NUM 3        //最大線程數(shù)量
 18 
 19 #ifdef _DEBUG
 20 #define new DEBUG_NEW
 21 #endif
 22 DWORD WINAPI DownloadThreadProc(LPVOID pDate);
 23 
 24 CHttpDownloadMultiThreadDlg::CHttpDownloadMultiThreadDlg(CWnd* pParent /*=NULL*/)
 25     : CDialog(CHttpDownloadMultiThreadDlg::IDD, pParent)
 26     , m_strSpeed(_T(""))
 27     , m_strStorgePath(_T(""))
 28     , iCount(0)
 29     , m_strDownloadAddr(_T("http://www.vckbase.com/code/network/internet/testhttp.rar"))
 30     , iGetNum(0)
 31 {
 32     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 33 }
 34 
 35 void CHttpDownloadMultiThreadDlg::DoDataExchange(CDataExchange* pDX)
 36 {
 37     CDialog::DoDataExchange(pDX);
 38     DDX_Text(pDX, IDC_EDIT3, m_strSpeed);
 39     DDX_Text(pDX, IDC_EDIT2, m_strStorgePath);
 40     DDX_Text(pDX, IDC_EDIT1, m_strDownloadAddr);
 41     DDX_Control(pDX, IDC_PROGRESS1, m_DownloadProg);
 42 }
 43 
 44 BEGIN_MESSAGE_MAP(CHttpDownloadMultiThreadDlg, CDialog)
 45     ON_WM_SYSCOMMAND()
 46     ON_WM_PAINT()
 47     ON_WM_QUERYDRAGICON()
 48     ON_MESSAGE(WM_USER_UICHANGE , ChangeUI)
 49     //}}AFX_MSG_MAP
 50     ON_BN_CLICKED(IDOK, &CHttpDownloadMultiThreadDlg::OnBnClickedOk)
 51     ON_BN_CLICKED(IDCANCEL, &CHttpDownloadMultiThreadDlg::OnBnClickedCancel)
 52     ON_BN_CLICKED(IDOK2, &CHttpDownloadMultiThreadDlg::OnBnClickedGetFilePath)
 53 END_MESSAGE_MAP()
 54 
 55 
 56 // CHttpDownloadMultiThreadDlg 消息處理程序
 57 
 58 BOOL CHttpDownloadMultiThreadDlg::OnInitDialog()
 59 {
 60     CDialog::OnInitDialog();
 61 
 62     // 將“關(guān)于”菜單項添加到系統(tǒng)菜單中。
 63 
 64     // IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。
 65     ASSERT((IDM_ABOUTBOX & 0xFFF0== IDM_ABOUTBOX);
 66     ASSERT(IDM_ABOUTBOX < 0xF000);
 67 
 68     CMenu* pSysMenu = GetSystemMenu(FALSE);
 69     if (pSysMenu != NULL)
 70     {
 71         CString strAboutMenu;
 72         strAboutMenu.LoadString(IDS_ABOUTBOX);
 73         if (!strAboutMenu.IsEmpty())
 74         {
 75             pSysMenu->AppendMenu(MF_SEPARATOR);
 76             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
 77         }
 78     }
 79 
 80     // 設(shè)置此對話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對話框時,框架將自動
 81     //  執(zhí)行此操作
 82     SetIcon(m_hIcon, TRUE);            // 設(shè)置大圖標(biāo)
 83     SetIcon(m_hIcon, FALSE);        // 設(shè)置小圖標(biāo)
 84 
 85     // TODO: 在此添加額外的初始化代碼
 86     ::InitializeCriticalSection(&cs);
 87     return TRUE;  // 除非將焦點設(shè)置到控件,否則返回 TRUE
 88 }
 89 
 90 void CHttpDownloadMultiThreadDlg::OnSysCommand(UINT nID, LPARAM lParam)
 91 {
 92     CDialog::OnSysCommand(nID, lParam);    
 93 }
 94 
 95 void CHttpDownloadMultiThreadDlg::OnPaint()
 96 {
 97     if (IsIconic())
 98     {
 99         CPaintDC dc(this); // 用于繪制的設(shè)備上下文
100 
101         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
102 
103         // 使圖標(biāo)在工作區(qū)矩形中居中
104         int cxIcon = GetSystemMetrics(SM_CXICON);
105         int cyIcon = GetSystemMetrics(SM_CYICON);
106         CRect rect;
107         GetClientRect(&rect);
108         int x = (rect.Width() - cxIcon + 1/ 2;
109         int y = (rect.Height() - cyIcon + 1/ 2;
110 
111         // 繪制圖標(biāo)
112         dc.DrawIcon(x, y, m_hIcon);
113     }
114     else
115     {
116         CDialog::OnPaint();
117     }
118 }
119 
120 //當(dāng)用戶拖動最小化窗口時系統(tǒng)調(diào)用此函數(shù)取得光標(biāo)
121 //顯示。
122 HCURSOR CHttpDownloadMultiThreadDlg::OnQueryDragIcon()
123 {
124     return static_cast<HCURSOR>(m_hIcon);
125 }
126 
127 //確定按鈕
128 void CHttpDownloadMultiThreadDlg::OnBnClickedOk()
129 {
130     if (m_strDownloadAddr == "" || m_strStorgePath == "")
131     {
132         AfxMessageBox("請輸入下載地址或者保存路徑");
133         return;
134     }    
135     //file.Open(m_strStorgePath , CFile::modeCreate | CFile::modeWrite);    
136     int iFileSize = GetFileSize();    //獲取文件大小
137     //file.SetLength(iFileSize);        //創(chuàng)建一個空文件
138     iCount = iFileSize / (4096);    //分段
139     if(iFileSize%(4096))
140         iCount++;    //剩下的一個
141     
142     //本來是準(zhǔn)備使用Windows自帶的線程池  后來由于各種問題  中斷了這個想法
143     HANDLE hThread[MAX_THREAD_NUM];
144     MYSTRUCT MyStruct[MAX_THREAD_NUM];
145     int iThreadWork = iFileSize / (MAX_THREAD_NUM - 1);
146     m_DownloadProg.SetRange(0 , iCount);        //進度條    
147     for (int i = 0 ; i < MAX_THREAD_NUM ; i++)    //創(chuàng)建線程
148     {
149         //PMYSTRUCT MyStruct = (PMYSTRUCT)new char[sizeof(MYSTRUCT)];        
150         MyStruct[i].iThreadNum = i;
151         MyStruct[i].strURL = m_strDownloadAddr;
152         MyStruct[i].iStart = iThreadWork * i ;
153         MyStruct[i].iTo = iThreadWork * (i + 1- 1;
154         if(MyStruct[i].iTo >= iFileSize)
155             MyStruct[i].iTo = iFileSize;
156         MyStruct->Dlg = this;
157         hThread[i] = ::CreateThread(NULL,0,DownloadThreadProc,(PVOID)&MyStruct[i],NULL,NULL);
158     }    
159     WaitForMultipleObjects(MAX_THREAD_NUM , hThread , TRUE , INFINITE);
160     
161     file.Open(m_strStorgePath , CFile::modeCreate | CFile::modeWrite);
162     CFile fileTemp;
163     for(int i = 0 ; i < MAX_THREAD_NUM ; i++)
164     {
165         CString strTemp;
166         int xLen = MyStruct[i].iTo - MyStruct[i].iStart + 1;
167         strTemp.Format("%d" , i);
168         fileTemp.Open(strTemp , CFile::modeRead);
169         //char * pContent = new char[xLen];
170         CHAR pContent[50000];    //簡單起見 直接用了大數(shù)組
171         fileTemp.Read(pContent , xLen );
172         file.Write(pContent , xLen);
173         fileTemp.Close();
174 //        delete pContent;
175     }
176     file.Close();
177 }
178 
179 //退出按鈕
180 void CHttpDownloadMultiThreadDlg::OnBnClickedCancel()
181 {    
182     OnCancel();
183 }
184 
185 //獲取存儲地址
186 void CHttpDownloadMultiThreadDlg::OnBnClickedGetFilePath()
187 {
188     UpdateData(TRUE);
189     if(m_strDownloadAddr == "")
190     {
191         AfxMessageBox("請輸入下載地址" , MB_OK);
192         return ;
193     }
194 
195     CString strFileName = m_strDownloadAddr;
196     m_strStorgePath = GetStorgeFolde();
197 
198     while(strFileName.Find("/"!= -1)
199     {
200         int i = strFileName.Find("/");
201         strFileName = strFileName.Mid(i +1 , strFileName.GetLength() - i - 1);
202     }
203 
204     m_strStorgePath += strFileName;
205     UpdateData(FALSE);
206 }
207 
208 //獲取存儲的文件夾
209 CString CHttpDownloadMultiThreadDlg::GetStorgeFolde(void)
210 {
211     CString strFold;
212     BROWSEINFO   bi;  
213     TCHAR   buffer[MAX_PATH];  
214     ZeroMemory(buffer,   MAX_PATH);  
215     bi.hwndOwner   =   GetSafeHwnd();  
216     bi.pidlRoot   =   NULL;  
217     bi.pszDisplayName   =   buffer;  
218 
219     bi.lpszTitle   =   _T("選擇一個文件夾");  
220     bi.ulFlags   =   BIF_EDITBOX;  
221     bi.lpfn   =   NULL;  
222     bi.lParam   =   0;  
223     bi.iImage   =   0;  
224 
225     LPITEMIDLIST   pList   =   NULL;  
226     if   ((pList   =   SHBrowseForFolder(&bi))   !=   NULL)  
227     {  
228         TCHAR   path[MAX_PATH];  
229         ZeroMemory(path,   MAX_PATH);  
230         SHGetPathFromIDList(pList,   path);  
231         strFold = path;
232         UpdateData(FALSE);        
233     }    
234     return strFold;
235 }
236 int CHttpDownloadMultiThreadDlg::GetFileSize(void)
237 {
238     CHttpSocket HttpSocket;
239     CString strServer , strObject ;
240     USHORT uPort;
241     DWORD dwServerType;
242     long lLenth;
243     const char * pRequestHeader = NULL;
244 
245     //通過URL獲取相關(guān)參數(shù)
246     AfxParseURL(m_strDownloadAddr , dwServerType , strServer , strObject , uPort);
247     pRequestHeader = HttpSocket.FormatRequestHeader((LPTSTR)(LPCTSTR)strServer , (LPTSTR)(LPCTSTR)strObject , lLenth );
248     HttpSocket.Socket();
249     HttpSocket.Connect((LPTSTR)(LPCTSTR)strServer );
250     HttpSocket.SendRequest();
251     HttpSocket.SetTimeout(100);
252 
253     char szLength[15];
254     HttpSocket.GetField("Content-Length" , szLength , 15);
255     int iServerState = HttpSocket.GetServerState();
256     return atoi(szLength);    
257 }
258 
259 //更新進度條
260 LRESULT CHttpDownloadMultiThreadDlg::ChangeUI(WPARAM wParam, LPARAM lParam)
261 {    
262     iGetNum++;
263     m_DownloadProg.SetPos(iGetNum);        
264     return 1;
265 }
266 
267 //下載線程
268 DWORD WINAPI DownloadThreadProc(LPVOID pDate)
269 {
270     MYSTRUCT* Mystruct = (PMYSTRUCT)pDate;
271 
272     CHttpSocket HttpSocket;
273     CString strServer , strObject ;
274     USHORT uPort;
275     DWORD dwServerType;
276     long lLenth;
277     const char * pRequestHeader = NULL;
278 
279     //通過URL獲取相關(guān)參數(shù)
280     AfxParseURL(Mystruct->strURL , dwServerType , strServer , strObject , uPort);
281     pRequestHeader = HttpSocket.FormatRequestHeader((LPTSTR)(LPCTSTR)strServer , (LPTSTR)(LPCTSTR)strObject , lLenth ,NULL , NULL ,
282                                 Mystruct->iStart ,  Mystruct->iTo );
283                                 /*分段傳輸*/
284     HttpSocket.Socket();
285     HttpSocket.Connect((LPTSTR)(LPCTSTR)strServer );
286     HttpSocket.SendRequest();
287     HttpSocket.SetTimeout(100);
288 
289 #ifdef _DEBUG
290     CString strTemp;
291     strTemp.Format("Start :  %d   to   %d  \r\n" , Mystruct->iStart , Mystruct->iTo);
292     TRACE(strTemp);
293 #endif    
294 
295     CFile file;    
296     CString strFormat;
297     strFormat.Format("%d" , Mystruct->iThreadNum);
298     file.Open(strFormat , CFile ::modeCreate | CFile::modeWrite);
299     int iFileSize = Mystruct->iTo - Mystruct->iStart;
300     int iComplete = 0;
301     char szDate[4096];
302     DWORD dwStartTime , dwEndTime;
303     int iCalc = 0;
304     while(iComplete < iFileSize)
305     {        
306         dwStartTime = GetTickCount();
307         int iRecvNum = HttpSocket.Receive(szDate , 4096);
308         dwEndTime = GetTickCount();
309         if (iRecvNum == 0)
310         {
311             ::AfxMessageBox("服務(wù)器關(guān)閉鏈接");
312             return 0;
313         }
314         if (iRecvNum == -1)
315         {
316             ::AfxMessageBox("接收數(shù)據(jù)超時");
317             return 0;
318         }    
319     //    int iSpeed = 4096 / (dwStartTime - dwEndTime);
320         file.Write(szDate , iRecvNum);
321         iComplete += iRecvNum;
322 //        strFormat.Format("%d" , iSpeed);
323         //SendMessage(Mystruct->Dlg->m_hWnd  , WM_USER_UICHANGE , 0 , 0);
324     //    Mystruct->Dlg->m_strSpeed = strFormat;
325         /*if (iCalc >3)
326         {
327             Mystruct->Dlg->UpdateData(FALSE);
328             iCalc = 0;
329         }        */
330     }    
331     return 1;
332 }
333 
334 

頭文件
 1 // HttpDownload MultiThreadDlg.h : 頭文件
 2 //
 3 
 4 #pragma once
 5 #include "afxcmn.h"
 6 #include "afx.h"
 7 
 8 typedef struct _Mystruct
 9 {
10     CString strURL;        //鏈接
11     int iStart ;                //傳送文件的起點
12     int iTo;                //終點
13     int iThreadNum;        //線程標(biāo)示符    
14     CHttpDownloadMultiThreadDlg * Dlg;
15 }MYSTRUCT , *PMYSTRUCT;
16 // CHttpDownloadMultiThreadDlg 對話框
17 class CHttpDownloadMultiThreadDlg : public CDialog
18 {
19 // 構(gòu)造
20 public:
21     CHttpDownloadMultiThreadDlg(CWnd* pParent = NULL);    // 標(biāo)準(zhǔn)構(gòu)造函數(shù)
22 
23 // 對話框數(shù)據(jù)
24     enum { IDD = IDD_HTTPDOWNLOADMULTITHREAD_DIALOG };
25 
26     protected:
27     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
28 // 實現(xiàn)
29 protected:
30     HICON m_hIcon;
31 
32     // 生成的消息映射函數(shù)
33     virtual BOOL OnInitDialog();
34     afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
35     afx_msg void OnPaint();
36     afx_msg HCURSOR OnQueryDragIcon();
37     DECLARE_MESSAGE_MAP()
38 public:
39     CString m_strSpeed;
40     CString m_strStorgePath;
41     CString m_strDownloadAddr;
42     afx_msg void OnBnClickedOk();
43     afx_msg void OnBnClickedCancel();
44     afx_msg void OnBnClickedGetFilePath();
45     LRESULT ChangeUI (WPARAM , LPARAM);
46     CProgressCtrl m_DownloadProg;
47     CString GetStorgeFolde(void);
48 private:
49     int GetFileSize(void);
50     int iCount;
51     
52 public:
53     CFile file;
54     CRITICAL_SECTION cs;    //臨界區(qū)
55     /*typedef struct _Mystruct
56     {
57         CHttpDownloadMultiThreadDlg * Dlg;
58         int iFileDownloadPos;
59     }MYSTRUCT , *PMYSTRUCT;
60     MYSTRUCT Mystruct;*/
61     int iGetNum;
62 };
63 
64 

本來要上個效果圖  其實沒必要 需要測試的朋友自己測試一下吧  
經(jīng)常出現(xiàn)超時問題  不知道如何解決 自己找找Http類的Bug吧

posted on 2009-08-18 17:28 李佳 閱讀(435) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

相冊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久伊人欧美| 日韩亚洲国产欧美| 亚洲欧洲一区二区三区久久| 国内精品视频久久| 国产日韩欧美精品一区| 欧美天堂亚洲电影院在线观看| 欧美巨乳在线| 欧美性视频网站| 国产精品亚洲人在线观看| 国产人妖伪娘一区91| 国产综合久久久久影院| 亚洲高清视频在线观看| 日韩视频―中文字幕| 亚洲特色特黄| 久久久久国产精品一区二区| 猛干欧美女孩| 亚洲国产美国国产综合一区二区| 久久黄色网页| 亚洲成在人线av| 一区二区三区四区五区在线| 午夜精品久久久久久久99水蜜桃| 久久riav二区三区| 欧美精品一区三区| 国产综合av| 亚洲特黄一级片| 免费中文日韩| 亚洲免费在线视频| 欧美激情欧美激情在线五月| 国产乱子伦一区二区三区国色天香 | 欧美激情精品久久久久久大尺度 | 99riav国产精品| 欧美在线一二三| 亚洲国产成人久久综合| 一区二区三区欧美成人| 久久人人97超碰国产公开结果 | 国产伦精品一区二区三区免费| 樱桃成人精品视频在线播放| 亚洲尤物视频在线| 亚洲第一福利社区| 性色av一区二区三区在线观看| 欧美激情一区二区| 在线观看日韩国产| 久久激情综合网| 一区二区三区国产盗摄| 欧美成人精品不卡视频在线观看 | 欧美激情精品久久久六区热门 | 欧美韩日一区| 精品91久久久久| 久久精品视频免费| 亚洲综合社区| 国产精品夜夜夜| 亚洲免费影院| 一本色道久久综合亚洲精品不| 欧美全黄视频| 亚洲视频综合| 中日韩午夜理伦电影免费| 欧美破处大片在线视频| 一区二区高清视频| 亚洲人成在线播放网站岛国| 欧美国产大片| 99国产精品视频免费观看一公开 | 久久国产精品黑丝| 国产欧美va欧美va香蕉在| 亚洲一区综合| 一区二区三区福利| 国产精品久久久久天堂| 亚洲欧美日韩另类| 亚洲欧美日韩国产综合在线| 国产精品综合久久久| 欧美专区在线观看| 欧美在线视频免费观看| 激情久久久久久久久久久久久久久久| 久久精彩视频| 久久久国产成人精品| 国内一区二区三区| 麻豆精品在线视频| 欧美99在线视频观看| 一本大道久久精品懂色aⅴ| 亚洲人成在线观看一区二区| 国产精品久久久久久久久久免费看| 午夜视频久久久| 校园激情久久| 91久久精品www人人做人人爽 | 久久久久久免费| 亚洲福利视频免费观看| 亚洲人成人99网站| 国产精品日韩专区| 久久精品亚洲一区二区| 久久深夜福利免费观看| 亚洲精品影院| 午夜天堂精品久久久久| 亚洲黄色免费网站| 中国成人亚色综合网站| 一区二区视频免费完整版观看| 亚洲国产精品va在线看黑人 | 国产精品国产三级国产普通话三级| 亚洲一区在线视频| 久久综合九九| 亚洲男人影院| 久久综合伊人77777麻豆| 亚洲午夜激情| 久久综合狠狠综合久久综青草| 亚洲一级网站| 久久先锋资源| 午夜伦理片一区| 欧美 日韩 国产精品免费观看| 亚洲影音先锋| 欧美成人久久| 久久久av网站| 国产精品xnxxcom| 欧美视频一区二区三区…| 久久久国际精品| 欧美日韩高清在线| 欧美成年人网站| 国产欧美日韩伦理| 99在线视频精品| 亚洲欧洲精品成人久久奇米网| 午夜视频精品| 亚洲欧美日韩在线| 欧美精品在线网站| 欧美电影免费观看高清完整版| 国产伦精品一区二区三区四区免费| 亚洲精品国产精品国自产在线| 国产一区二区三区不卡在线观看| 亚洲精品乱码久久久久久黑人 | 国产精品久久久久久久久| 欧美二区在线观看| 韩国在线视频一区| 亚洲欧美视频在线| 亚洲免费人成在线视频观看| 欧美国产丝袜视频| 欧美高清视频一区二区三区在线观看| 国产亚洲激情在线| 午夜在线视频观看日韩17c| 亚洲免费在线视频| 国产精品二区在线| 中日韩美女免费视频网址在线观看 | 午夜日韩福利| 国产精品久久久久久久久久久久久久 | 美日韩精品免费观看视频| 久久久精品五月天| 国产有码一区二区| 久久成年人视频| 久久精品一区二区三区不卡牛牛| 国产精品久久久久久亚洲毛片 | 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美黄色成人网| 亚洲免费观看| 亚洲在线视频网站| 国产精品亚洲综合一区在线观看 | 羞羞视频在线观看欧美| 欧美一区二区三区四区高清 | 亚洲一区二区黄| 久久激情综合网| 在线国产亚洲欧美| 欧美大片在线观看一区| 亚洲精品在线观| 性色av香蕉一区二区| 狠狠噜噜久久| 欧美高清在线视频观看不卡| 中文久久精品| 久久久精品国产免大香伊| 亚洲第一中文字幕在线观看| 欧美成人精品一区二区| 宅男噜噜噜66一区二区| 久久久久亚洲综合| 亚洲人成网站影音先锋播放| 欧美午夜www高清视频| 午夜精品免费视频| 欧美激情第二页| 亚洲欧美日韩在线综合| 亚洲大胆在线| 欧美视频一区二区| 久久精品99久久香蕉国产色戒| 亚洲国产精品一区在线观看不卡| 亚洲在线观看视频网站| 亚洲电影在线| 国产精品久久久亚洲一区 | 国产精品视频一区二区三区| 久久久久久久久蜜桃| 一本一道久久综合狠狠老精东影业 | 99亚洲一区二区| 国产精品一区二区黑丝| 美女精品视频一区| 亚洲女同性videos| 亚洲国产精品va在线看黑人| 久久久噜噜噜久久| 亚洲手机成人高清视频| 免费日韩一区二区| 欧美日韩在线另类| 亚洲欧美综合精品久久成人| 欧美激情第8页| 久久久久久久精| 亚洲一区二区免费视频| 亚洲激情网站免费观看| 国产午夜精品久久久久久免费视| 欧美日韩精品是欧美日韩精品| 狼狼综合久久久久综合网| 香蕉免费一区二区三区在线观看| 日韩视频在线免费观看|