亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 用java實現斷點續傳(http).htm

?? 寫給JSP初級程序員的書
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
<BODY bgColor=#ffffff text=#000000>
<table>
  <TBODY>
  <TR>
    <TD height=21>
      <DIV align=center><B><FONT  size=3>用Java實現斷點續傳(HTTP) 
      <BR><FONT size=2> </FONT></FONT></FONT>
      <HR align=center color=#cccccc noShade SIZE=1>
      </DIV></TD></TR>
  <TR>
    <TD class=line><FONT 
      color=#333300>&nbsp;鐘華&nbsp;(zhong_hua@263.net)<BR>2001&nbsp;年&nbsp;5&nbsp;月<BR><BR>(一)斷點續傳的原理<BR>其實斷點續傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已。<BR>打個比方,瀏覽器請求服務器上的一個文時,所發出的請求如下:<BR>假設服務器域名為wwww.sjtu.edu.cn,文件名為down.zip。<BR>GET&nbsp;/down.zip&nbsp;HTTP/1.1<BR>Accept:&nbsp;image/gif,&nbsp;image/x-xbitmap,&nbsp;image/jpeg,&nbsp;image/pjpeg,&nbsp;application/vnd.ms-<BR>excel,&nbsp;application/msword,&nbsp;application/vnd.ms-powerpoint,&nbsp;*/*<BR>Accept-Language:&nbsp;zh-cn<BR>Accept-Encoding:&nbsp;gzip,&nbsp;deflate<BR>User-Agent:&nbsp;Mozilla/4.0&nbsp;(compatible;&nbsp;MSIE&nbsp;5.01;&nbsp;Windows&nbsp;NT&nbsp;5.0)<BR>Connection:&nbsp;Keep-Alive<BR><BR><BR>服務器收到請求后,按要求尋找請求的文件,提取文件的信息,然后返回給瀏覽器,返回信息如下:<BR><BR><BR>200<BR>Content-Length=106786028<BR>Accept-Ranges=bytes<BR>Date=Mon,&nbsp;30&nbsp;Apr&nbsp;2001&nbsp;12:56:11&nbsp;GMT<BR>ETag=W/"02ca57e173c11:95b"<BR>Content-Type=application/octet-stream<BR>Server=Microsoft-IIS/5.0<BR>Last-Modified=Mon,&nbsp;30&nbsp;Apr&nbsp;2001&nbsp;12:56:11&nbsp;GMT<BR><BR> <BR><BR>所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。所以在客戶端瀏覽器傳給<BR>Web服務器的時候要多加一條信息--從哪里開始。<BR>下面是用自己編的一個"瀏覽器"來傳遞請求信息給Web服務器,要求從2000070字節開始。<BR>GET&nbsp;/down.zip&nbsp;HTTP/1.0<BR>User-Agent:&nbsp;NetFox<BR>RANGE:&nbsp;bytes=2000070-<BR>Accept:&nbsp;text/html,&nbsp;image/gif,&nbsp;image/jpeg,&nbsp;*;&nbsp;q=.2,&nbsp;*/*;&nbsp;q=.2<BR><BR><BR>仔細看一下就會發現多了一行RANGE:&nbsp;bytes=2000070-<BR>這一行的意思就是告訴服務器down.zip這個文件從2000070字節開始傳,前面的字節不用傳了。<BR>服務器收到這個請求以后,返回的信息如下:<BR>206<BR>Content-Length=106786028<BR>Content-Range=bytes&nbsp;2000070-106786027/106786028<BR>Date=Mon,&nbsp;30&nbsp;Apr&nbsp;2001&nbsp;12:55:20&nbsp;GMT<BR>ETag=W/"02ca57e173c11:95b"<BR>Content-Type=application/octet-stream<BR>Server=Microsoft-IIS/5.0<BR>Last-Modified=Mon,&nbsp;30&nbsp;Apr&nbsp;2001&nbsp;12:55:20&nbsp;GMT<BR><BR><BR>和前面服務器返回的信息比較一下,就會發現增加了一行:<BR>Content-Range=bytes&nbsp;2000070-106786027/106786028<BR>返回的代碼也改為206了,而不再是200了。<BR><BR><BR>知道了以上原理,就可以進行斷點續傳的編程了。<BR><BR><BR>(二)Java實現斷點續傳的關鍵幾點<BR><BR><BR>(1)用什么方法實現提交RANGE:&nbsp;bytes=2000070-。<BR>當然用最原始的Socket是肯定能完成的,不過那樣太費事了,其實Java的net包中提供了這種功能。代碼如下:<BR>URL&nbsp;url&nbsp;=&nbsp;new&nbsp;URL("http://www.sjtu.edu.cn/down.zip");<BR>HttpURLConnection&nbsp;httpConnection&nbsp;=&nbsp;(HttpURLConnection)url.openConnection<BR><BR> <BR><BR>();<BR>//設置User-Agent<BR>httpConnection.setRequestProperty("User-Agent","NetFox");<BR>//設置斷點續傳的開始位置<BR>httpConnection.setRequestProperty("RANGE","bytes=2000070");<BR>//獲得輸入流<BR>InputStream&nbsp;input&nbsp;=&nbsp;httpConnection.getInputStream();<BR><BR><BR>從輸入流中取出的字節流就是down.zip文件從2000070開始的字節流。<BR>大家看,其實斷點續傳用Java實現起來還是很簡單的吧。<BR>接下來要做的事就是怎么保存獲得的流到文件中去了。<BR><BR><BR>保存文件采用的方法。<BR>我采用的是IO包中的RandAccessFile類。<BR>操作相當簡單,假設從2000070處開始保存文件,代碼如下:<BR>RandomAccess&nbsp;oSavedFile&nbsp;=&nbsp;new&nbsp;RandomAccessFile("down.zip","rw");<BR>long&nbsp;nPos&nbsp;=&nbsp;2000070;<BR>//定位文件指針到nPos位置<BR>oSavedFile.seek(nPos);<BR>byte[]&nbsp;b&nbsp;=&nbsp;new&nbsp;byte[1024];<BR>int&nbsp;nRead;<BR>//從輸入流中讀入字節流,然后寫到文件中<BR>while((nRead=input.read(b,0,1024))&nbsp;&gt;&nbsp;0)<BR>{<BR>oSavedFile.write(b,0,nRead);<BR>}<BR><BR>怎么樣,也很簡單吧。<BR>接下來要做的就是整合成一個完整的程序了。包括一系列的線程控制等等。<BR><BR><BR><BR>(三)斷點續傳內核的實現<BR>主要用了6個類,包括一個測試類。<BR>SiteFileFetch.java負責整個文件的抓取,控制內部線程(FileSplitterFetch類)。<BR>FileSplitterFetch.java負責部分文件的抓取。<BR>FileAccess.java負責文件的存儲。<BR>SiteInfoBean.java要抓取的文件的信息,如文件保存的目錄,名字,抓取文件的URL等。<BR>Utility.java工具類,放一些簡單的方法。<BR>TestMethod.java測試類。<BR><BR><BR>下面是源程序:&nbsp;<BR>/*<BR>**SiteFileFetch.java<BR>*/<BR>package&nbsp;NetFox;<BR>import&nbsp;java.io.*;<BR>import&nbsp;java.net.*;<BR><BR><BR>public&nbsp;class&nbsp;SiteFileFetch&nbsp;extends&nbsp;Thread&nbsp;{<BR><BR><BR>SiteInfoBean&nbsp;siteInfoBean&nbsp;=&nbsp;null;&nbsp;//文件信息Bean<BR>long[]&nbsp;nStartPos;&nbsp;//開始位置<BR>long[]&nbsp;nEndPos;&nbsp;//結束位置<BR>FileSplitterFetch[]&nbsp;fileSplitterFetch;&nbsp;//子線程對象<BR>long&nbsp;nFileLength;&nbsp;//文件長度<BR>boolean&nbsp;bFirst&nbsp;=&nbsp;true;&nbsp;//是否第一次取文件<BR>boolean&nbsp;bStop&nbsp;=&nbsp;false;&nbsp;//停止標志<BR>File&nbsp;tmpFile;&nbsp;//文件下載的臨時信息<BR>DataOutputStream&nbsp;output;&nbsp;//輸出到文件的輸出流<BR><BR><BR>public&nbsp;SiteFileFetch(SiteInfoBean&nbsp;bean)&nbsp;throws&nbsp;IOException<BR>{<BR>siteInfoBean&nbsp;=&nbsp;bean;<BR>//tmpFile&nbsp;=&nbsp;File.createTempFile&nbsp;("zhong","1111",new&nbsp;File(bean.getSFilePath()));<BR>tmpFile&nbsp;=&nbsp;new&nbsp;File(bean.getSFilePath()+File.separator&nbsp;+&nbsp;bean.getSFileName()+".info");<BR>if(tmpFile.exists&nbsp;())<BR>{<BR>bFirst&nbsp;=&nbsp;false;<BR>read_nPos();<BR>}<BR>else<BR>{<BR>nStartPos&nbsp;=&nbsp;new&nbsp;long[bean.getNSplitter()];<BR>nEndPos&nbsp;=&nbsp;new&nbsp;long[bean.getNSplitter()];<BR>}<BR><BR><BR><BR>}<BR><BR><BR>public&nbsp;void&nbsp;run()<BR>{<BR>//獲得文件長度<BR>//分割文件<BR>//實例FileSplitterFetch<BR>//啟動FileSplitterFetch線程<BR>//等待子線程返回<BR>try{<BR>if(bFirst)<BR>{<BR>nFileLength&nbsp;=&nbsp;getFileSize();<BR>if(nFileLength&nbsp;==&nbsp;-1)<BR>{<BR>System.err.println("File&nbsp;Length&nbsp;is&nbsp;not&nbsp;known!");<BR>}<BR>else&nbsp;if(nFileLength&nbsp;==&nbsp;-2)<BR>{<BR>System.err.println("File&nbsp;is&nbsp;not&nbsp;access!");<BR>}<BR>else<BR>{<BR>for(int&nbsp;i=0;i&nbsp;&nbsp;new&nbsp;FileSplitterFetch(&nbsp;siteInfoBean.getSSiteURL(),&nbsp;<BR>&nbsp;&nbsp;siteInfoBean.getSFilePath()&nbsp;&nbsp;+&nbsp;&nbsp;File.separator&nbsp;+&nbsp;siteInfoBean.getSFileName(),<BR>nStartPos[i],nEndPos[i],i);<BR>&nbsp;Utility.log(&nbsp;"&nbsp;Thread&nbsp;"&nbsp;+&nbsp;&nbsp;i&nbsp;&nbsp;+&nbsp;&nbsp;"&nbsp;,&nbsp;&nbsp;&nbsp;nStartPos&nbsp;="&nbsp;+&nbsp;nStartPos[i]+",&nbsp;nEndPos&nbsp;=&nbsp;"&nbsp;+&nbsp;nEndPos[i]);<BR>fileSplitterFetch[i].start();<BR>}<BR>//&nbsp;fileSplitterFetch[nPos.length-1]&nbsp;=&nbsp;new&nbsp;FileSplitterFetch(siteInfoBean.getSSiteURL(),&nbsp;&nbsp;&nbsp;<BR>siteInfoBean.getSFilePath()&nbsp;+&nbsp;&nbsp;File.separator&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;siteInfoBean.getSFileName()&nbsp;,&nbsp;&nbsp;nPos[nPos.length-1],&nbsp;&nbsp;&nbsp;&nbsp;nFileLength,&nbsp;&nbsp;&nbsp;nPos.length-1);<BR>//&nbsp;&nbsp;Utility.log("Thread&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;(nPos.length-1&nbsp;)&nbsp;+&nbsp;&nbsp;"&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;nStartPos&nbsp;=&nbsp;"&nbsp;+&nbsp;nPos[nPos.length-1]&nbsp;+&nbsp;",<BR>nEndPos&nbsp;=&nbsp;"&nbsp;+&nbsp;nFileLength);<BR>//&nbsp;fileSplitterFetch[nPos.length-1].start();<BR><BR><BR>//等待子線程結束<BR>//int&nbsp;count&nbsp;=&nbsp;0;<BR>//是否結束while循環<BR>boolean&nbsp;breakWhile&nbsp;=&nbsp;false;<BR><BR><BR>while(!bStop)<BR>{<BR>write_nPos();<BR>Utility.sleep(500);<BR>breakWhile&nbsp;=&nbsp;true;<BR><BR><BR>for(int&nbsp;i=0;i4)<BR>//&nbsp;siteStop();<BR>}<BR><BR><BR>System.err.println("文件下載結束!");<BR>}<BR>catch(Exception&nbsp;e){e.printStackTrace&nbsp;();}<BR>}<BR><BR><BR>//獲得文件長度<BR>public&nbsp;long&nbsp;getFileSize()<BR>{<BR>int&nbsp;nFileLength&nbsp;=&nbsp;-1;<BR>try{<BR>URL&nbsp;url&nbsp;=&nbsp;new&nbsp;URL(siteInfoBean.getSSiteURL());<BR>HttpURLConnection&nbsp;httpConnection&nbsp;=&nbsp;(HttpURLConnection)url.openConnection&nbsp;();<BR>httpConnection.setRequestProperty("User-Agent","NetFox");<BR><BR><BR>int&nbsp;responseCode=httpConnection.getResponseCode();<BR>if(responseCode&gt;=400)<BR>{<BR>processErrorCode(responseCode);<BR>return&nbsp;-2;&nbsp;//-2&nbsp;represent&nbsp;access&nbsp;is&nbsp;error<BR>}<BR><BR><BR>String&nbsp;sHeader;<BR><BR><BR>for(int&nbsp;i=1;;i++)<BR>{<BR>//DataInputStream&nbsp;in&nbsp;=&nbsp;new&nbsp;DataInputStream(httpConnection.getInputStream&nbsp;());<BR>//Utility.log(in.readLine());<BR>sHeader=httpConnection.getHeaderFieldKey(i);<BR>if(sHeader!=null)<BR>{<BR>if(sHeader.equals("Content-Length"))<BR>{<BR>nFileLength&nbsp;=&nbsp;Integer.parseInt(httpConnection.getHeaderField(sHeader));<BR>break;<BR>}<BR>}<BR>else<BR>break;<BR>}<BR>}<BR>catch(IOException&nbsp;e){e.printStackTrace&nbsp;();}<BR>catch(Exception&nbsp;e){e.printStackTrace&nbsp;();}<BR><BR><BR>Utility.log(nFileLength);<BR><BR><BR>return&nbsp;nFileLength;<BR>}<BR><BR><BR>//保存下載信息(文件指針位置)<BR>private&nbsp;void&nbsp;write_nPos()<BR>{<BR>try{<BR>output&nbsp;=&nbsp;new&nbsp;DataOutputStream(new&nbsp;FileOutputStream(tmpFile));<BR>output.writeInt(nStartPos.length);<BR>for(int&nbsp;i=0;iDataInputStream(new&nbsp;FileInputStream(tmpFile));<BR>int&nbsp;nCount&nbsp;=&nbsp;input.readInt();<BR>nStartPos&nbsp;=&nbsp;new&nbsp;long[nCount];<BR>nEndPos&nbsp;=&nbsp;new&nbsp;long[nCount];<BR>for(int&nbsp;i=0;i&nbsp;0&nbsp;&amp;&nbsp;&amp;&nbsp;nStartPos&nbsp;&lt;&nbsp;nEndPos&nbsp;&amp;&amp;&nbsp;!bStop)<BR>{<BR>nStartPos&nbsp;+=&nbsp;fileAccessI.write(b,0,nRead);<BR>//if(nThreadID&nbsp;==&nbsp;1)<BR>//&nbsp;Utility.log("nStartPos&nbsp;=&nbsp;"&nbsp;+&nbsp;nStartPos&nbsp;&nbsp;+&nbsp;",&nbsp;nEndPos&nbsp;=&nbsp;"&nbsp;+&nbsp;nEndPos);<BR>}<BR><BR><BR>Utility.log("Thread&nbsp;"&nbsp;+&nbsp;nThreadID&nbsp;+&nbsp;"&nbsp;is&nbsp;over!");<BR>bDownOver&nbsp;=&nbsp;true;<BR>//nPos&nbsp;=&nbsp;fileAccessI.write&nbsp;(b,0,nRead);<BR>}<BR>catch(Exception&nbsp;e){e.printStackTrace&nbsp;();}<BR>}<BR>}<BR><BR><BR>//打印回應的頭信息<BR>public&nbsp;void&nbsp;logResponseHead(HttpURLConnection&nbsp;con)<BR>{<BR>for(int&nbsp;i=1;;i++)<BR>{<BR>String&nbsp;header=con.getHeaderFieldKey(i);<BR>if(header!=null)<BR>//responseHeaders.put(header,httpConnection.getHeaderField(header));<BR>Utility.log(header+"&nbsp;:&nbsp;"+con.getHeaderField(header));<BR>else<BR>break;<BR>}<BR>}<BR><BR><BR>public&nbsp;void&nbsp;splitterStop()<BR>{<BR>bStop&nbsp;=&nbsp;true;<BR>}<BR><BR><BR>}<BR><BR><BR>/*<BR>**FileAccess.java<BR>*/<BR>package&nbsp;NetFox;<BR>import&nbsp;java.io.*;<BR><BR><BR>public&nbsp;class&nbsp;FileAccessI&nbsp;implements&nbsp;Serializable{<BR><BR><BR>RandomAccessFile&nbsp;oSavedFile;<BR>long&nbsp;nPos;<BR><BR><BR>public&nbsp;FileAccessI()&nbsp;throws&nbsp;IOException<BR>{<BR>this("",0);<BR>}<BR><BR><BR>public&nbsp;FileAccessI(String&nbsp;sName,long&nbsp;nPos)&nbsp;throws&nbsp;IOException<BR>{<BR>oSavedFile&nbsp;=&nbsp;new&nbsp;RandomAccessFile(sName,"rw");<BR>this.nPos&nbsp;=&nbsp;nPos;<BR>oSavedFile.seek(nPos);<BR>}<BR><BR><BR>public&nbsp;synchronized&nbsp;int&nbsp;write(byte[]&nbsp;b,int&nbsp;nStart,int&nbsp;nLen)<BR>{<BR>int&nbsp;n&nbsp;=&nbsp;-1;<BR>try{<BR>oSavedFile.write(b,nStart,nLen);<BR>n&nbsp;=&nbsp;nLen;<BR>}<BR>catch(IOException&nbsp;e)<BR>{<BR>e.printStackTrace&nbsp;();<BR>}<BR><BR><BR>return&nbsp;n;<BR>}<BR><BR><BR>}<BR><BR><BR>/*<BR>**SiteInfoBean.java<BR>*/<BR>package&nbsp;NetFox;<BR><BR><BR>public&nbsp;class&nbsp;SiteInfoBean&nbsp;{<BR><BR><BR>private&nbsp;String&nbsp;sSiteURL;&nbsp;//Site's&nbsp;URL<BR>private&nbsp;String&nbsp;sFilePath;&nbsp;//Saved&nbsp;File's&nbsp;Path<BR>private&nbsp;String&nbsp;sFileName;&nbsp;//Saved&nbsp;File's&nbsp;Name<BR>private&nbsp;int&nbsp;nSplitter;&nbsp;//Count&nbsp;of&nbsp;Splited&nbsp;Downloading&nbsp;File<BR><BR><BR>public&nbsp;SiteInfoBean()<BR>{<BR>//default&nbsp;value&nbsp;of&nbsp;nSplitter&nbsp;is&nbsp;5<BR>this("","","",5);<BR>}<BR><BR><BR>public&nbsp;SiteInfoBean(String&nbsp;sURL,String&nbsp;sPath,String&nbsp;sName,int&nbsp;nSpiltter)<BR>{<BR>sSiteURL=&nbsp;sURL;<BR>sFilePath&nbsp;=&nbsp;sPath;<BR>sFileName&nbsp;=&nbsp;sName;<BR>this.nSplitter&nbsp;=&nbsp;nSpiltter;<BR><BR><BR>}<BR><BR><BR>public&nbsp;String&nbsp;getSSiteURL()<BR>{<BR>return&nbsp;sSiteURL;<BR>}<BR><BR><BR>public&nbsp;void&nbsp;setSSiteURL(String&nbsp;value)<BR>{<BR>sSiteURL&nbsp;=&nbsp;value;<BR>}<BR><BR><BR>public&nbsp;String&nbsp;getSFilePath()<BR>{<BR>return&nbsp;sFilePath;<BR>}<BR><BR><BR>public&nbsp;void&nbsp;setSFilePath(String&nbsp;value)<BR>{<BR>sFilePath&nbsp;=&nbsp;value;<BR>}<BR><BR><BR>public&nbsp;String&nbsp;getSFileName()<BR>{<BR>return&nbsp;sFileName;<BR>}<BR><BR><BR>public&nbsp;void&nbsp;setSFileName(String&nbsp;value)<BR>{<BR>sFileName&nbsp;=&nbsp;value;<BR>}<BR><BR><BR>public&nbsp;int&nbsp;getNSplitter()<BR>{<BR>return&nbsp;nSplitter;<BR>}<BR><BR><BR>public&nbsp;void&nbsp;setNSplitter(int&nbsp;nCount)<BR>{<BR>nSplitter&nbsp;=&nbsp;nCount;<BR>}<BR>}<BR><BR><BR>/*<BR>**Utility.java<BR>*/<BR>package&nbsp;NetFox;<BR><BR><BR>public&nbsp;class&nbsp;Utility&nbsp;{<BR><BR><BR>public&nbsp;Utility()<BR>{<BR><BR><BR>}<BR><BR><BR>public&nbsp;static&nbsp;void&nbsp;sleep(int&nbsp;nSecond)<BR>{<BR>try{<BR>Thread.sleep(nSecond);<BR>}<BR>catch(Exception&nbsp;e)<BR>{<BR>e.printStackTrace&nbsp;();<BR>}<BR>}<BR><BR><BR>public&nbsp;static&nbsp;void&nbsp;log(String&nbsp;sMsg)<BR>{<BR>System.err.println(sMsg);<BR>}<BR><BR><BR>public&nbsp;static&nbsp;void&nbsp;log(int&nbsp;sMsg)<BR>{<BR>System.err.println(sMsg);<BR>}<BR>}<BR><BR><BR>/*<BR>**TestMethod.java<BR>*/<BR>package&nbsp;NetFox;<BR><BR><BR>public&nbsp;class&nbsp;TestMethod&nbsp;{<BR><BR><BR>public&nbsp;TestMethod()<BR>{&nbsp;///xx/weblogic60b2_win.exe<BR>try{<BR>SiteInfoBean&nbsp;bean&nbsp;=&nbsp;new&nbsp;SiteInfoBean("http://localhost/xx/weblogic60b2_win.exe","&nbsp;L: 
      emp","weblogic60b2_win.exe",5);<BR>//SiteInfoBean&nbsp;bean&nbsp;=&nbsp;new&nbsp;SiteInfoBean("http://localhost:8080/down.zip","&nbsp;L: 
      emp","weblogic60b2_win.exe",5);<BR>SiteFileFetch&nbsp;fileFetch&nbsp;=&nbsp;new&nbsp;SiteFileFetch(bean);<BR>fileFetch.start();<BR>}<BR>catch(Exception&nbsp;e){e.printStackTrace&nbsp;();}<BR><BR><BR>}<BR><BR><BR>public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)<BR>{<BR>new&nbsp;TestMethod();<BR>}<BR>}<BR><BR>&nbsp;<BR>關于作者<BR>鐘華,您可以通過電子郵件&nbsp;zhong_hua@263.net&nbsp;跟他聯系。&nbsp;<BR><BR>&nbsp;<BR></FONT></TD></TR>
  <TR>
    <TD height=5>
      <HR align=center color=#cccccc noShade SIZE=1>
    </TD></TR></TBODY></BODY></HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产凹凸成av人导航| 国产剧情一区二区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 99久久免费视频.com| 午夜精品久久久久久久| 久久久久国产一区二区三区四区| 国产高清亚洲一区| 三级影片在线观看欧美日韩一区二区 | 波多野结衣中文字幕一区| 亚洲va欧美va国产va天堂影院| 5月丁香婷婷综合| 波多野结衣在线一区| 麻豆免费看一区二区三区| 91片在线免费观看| 麻豆精品视频在线观看免费| 亚洲女爱视频在线| 精品国产露脸精彩对白 | 亚洲一区二区四区蜜桃| 精品久久久久久久久久久久包黑料| 99久久婷婷国产综合精品电影| 国产激情一区二区三区| 久久97超碰国产精品超碰| 亚洲一区二区影院| 日韩激情中文字幕| 美洲天堂一区二卡三卡四卡视频| 日韩精品视频网站| 亚洲成av人在线观看| 丝袜美腿亚洲综合| 日韩不卡一区二区三区| 亚洲一区二区视频在线| 亚洲一区二区三区中文字幕在线| 一区二区三区精品久久久| 国产精品美女久久久久久| 中文字幕av免费专区久久| 国产精品成人网| 亚洲黄色小视频| 亚洲午夜一二三区视频| 精品一区二区三区免费| 亚洲国产另类av| 亚洲成人在线观看视频| 午夜电影一区二区三区| 青椒成人免费视频| 狠狠色综合播放一区二区| 成人综合在线视频| 国产精品资源在线| 色综合色综合色综合色综合色综合| 精品视频1区2区| 精品日韩成人av| 中文字幕一区二区不卡 | 欧美国产精品一区二区三区| 一区二区三区不卡在线观看| 亚洲国产精品一区二区尤物区| 麻豆中文一区二区| 色系网站成人免费| 欧美性大战久久久久久久| 日韩精品一区二区在线| 国产精品网站导航| 石原莉奈在线亚洲二区| 欧美性xxxxx极品少妇| 国产欧美日韩精品在线| 精品一区二区免费| 欧美二区乱c少妇| 一区二区三区在线观看视频| 丁香网亚洲国际| 久久精品亚洲乱码伦伦中文| 亚洲永久免费av| 不卡一卡二卡三乱码免费网站| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲va国产va欧美va观看| 91女人视频在线观看| 国产精品女主播在线观看| 成人性生交大片免费看在线播放 | 欧美日韩精品免费| 国产性色一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 日韩一区二区电影| 日日摸夜夜添夜夜添亚洲女人| 欧美亚洲综合一区| 亚洲午夜国产一区99re久久| 欧美蜜桃一区二区三区| 亚洲乱码精品一二三四区日韩在线 | 亚洲乱码国产乱码精品精小说| 91亚洲精品久久久蜜桃| 亚洲日本电影在线| 色偷偷久久人人79超碰人人澡| 欧美国产精品一区二区三区| 国产精品综合一区二区| 久久久久88色偷偷免费| 成人污污视频在线观看| 久久影院午夜片一区| 国产不卡视频一区二区三区| 亚洲另类色综合网站| 欧美日韩夫妻久久| 韩国三级在线一区| 一区二区成人在线| 欧美电影免费观看高清完整版在| 粉嫩13p一区二区三区| 日韩一区二区在线播放| 久久精品一区二区三区不卡牛牛| 亚洲色图视频免费播放| 成人午夜激情影院| 欧美高清在线精品一区| 国内外成人在线| 综合色天天鬼久久鬼色| 成人h动漫精品一区二区| 国产午夜精品福利| 国产电影一区在线| 国产精品丝袜久久久久久app| 高清在线成人网| 国产蜜臀av在线一区二区三区| 国产成人亚洲综合a∨婷婷| 国产日韩欧美高清在线| 国产成人精品影院| 日韩美女视频一区二区| 91亚洲精品一区二区乱码| 一区二区在线观看不卡| 在线亚洲免费视频| 亚洲18女电影在线观看| 日韩亚洲欧美一区| 国产麻豆精品一区二区| 国产精品美女久久久久久| av色综合久久天堂av综合| 亚洲精品视频免费看| 欧美精品tushy高清| 精品在线观看免费| 中文字幕欧美国产| 日本电影欧美片| 日本女优在线视频一区二区| 久久综合国产精品| 色综合天天综合网国产成人综合天 | 国产精品系列在线观看| 欧美韩国日本综合| 国产综合色在线| 日韩va亚洲va欧美va久久| 亚洲影院在线观看| 亚洲图片欧美色图| 1024成人网色www| 日韩伦理av电影| 国产精品毛片无遮挡高清| 久久久91精品国产一区二区精品| 欧美视频日韩视频| 欧美性视频一区二区三区| 成人av集中营| 成人福利视频网站| 成人精品一区二区三区中文字幕| 成人免费精品视频| 丁香亚洲综合激情啪啪综合| 国产精品一区二区你懂的| 国产成人精品亚洲777人妖| 国产成人午夜电影网| 国产在线精品一区二区三区不卡| 成人午夜看片网址| 欧美三级三级三级爽爽爽| 国产精品传媒在线| 国产一区二区影院| 成人黄色电影在线| 91免费国产在线观看| 91亚洲精品一区二区乱码| 在线亚洲一区观看| 欧美大黄免费观看| 国产午夜精品理论片a级大结局| 日韩avvvv在线播放| 国产视频在线观看一区二区三区 | av高清不卡在线| 青椒成人免费视频| 综合在线观看色| 精品剧情v国产在线观看在线| 日本韩国一区二区| 国产成人av电影| 另类中文字幕网| 欧美日韩激情在线| 久久精品人人做人人综合 | 国产日韩视频一区二区三区| 国产精品嫩草影院com| 蜜臀va亚洲va欧美va天堂| 国产精品99久久久久| 91免费观看视频在线| 久久综合久久综合九色| 一区二区三区四区蜜桃| 国产成人免费视频一区| 亚洲精品一区二区三区精华液| 成人va在线观看| 久久av中文字幕片| 午夜精品在线看| 国产女人18毛片水真多成人如厕| 欧美一区日本一区韩国一区| 色素色在线综合| 91在线精品一区二区三区| 国产91精品精华液一区二区三区| 日本不卡不码高清免费观看| 亚洲香肠在线观看| 亚洲影院理伦片| 一片黄亚洲嫩模| 亚洲蜜桃精久久久久久久| 亚洲天堂久久久久久久| 中文字幕一区二区三区乱码在线| 国产日韩欧美激情| 欧美高清在线一区| 国产精品久久久久一区二区三区共| 国产视频视频一区|