精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Http服務器實現文件上傳與下載(四)

網絡 網絡管理
歡迎大家來到和我一起編寫Http服務器實現文件的上傳和下載,現在我稍微回顧一下之前我說的,第一、二章說明說明了整體的HTTP走向,第三章實現底層的網絡編程。接著這一章我想給大家講的是請求獲取,和響應發送的內容。這里主要講解的響應內容,為什么?因為我們編寫的是一個與瀏覽器交互的HTTP服務器,所以大多數的情況下我們只進行被動的應答。

一、引言

歡迎大家來到和我一起編寫Http服務器實現文件的上傳和下載,現在我稍微回顧一下之前我說的,***、二章說明說明了整體的HTTP走向,第三章實現底層的網絡編程。接著這一章我想給大家講的是請求獲取,和響應發送的內容。這里主要講解的響應內容,為什么?因為我們編寫的是一個與瀏覽器交互的HTTP服務器,所以大多數的情況下我們只進行被動的應答。

這就是一種"提問--回答"的問題。其實在講解這章的時候,我本來準備給大家講解一下Linux一些信號中斷的問題。因為在網絡層發送的時候,系統會發送一些信號給我們的應用程序,所以會導致我們的程序意外的終止。但當我寫的這篇博客的時候我又放棄,我想在講流程走向的時候再提一個中斷捕獲吧。在這個請求響應層的類其實真正的設計需要很多的內容,這里就是HttpResponse類和HttpRequest類的設計,在j2EE中,我們編寫Servlet的時候就用到了這2個類,如HttpServletResquest,HttpServletResponse的類,如果對這里面的內容感興趣,可以下載tomcat,在servlet-api.jar包里面有這些類。

在本文的實現中,Request類只包含了一個獲取請求頭和解析頭的一些方法。如何解析頭,我在《Http服務器實現文件上傳與下載(一)》已經講解了,讀者只需要對其封裝一個類即可。

二、HttpRequest類

請求消息的解析是通過被定義在命名空間為Http的類名為HttpRequest。這個類的構造函數接受一個套接字,就是跟我們連接的那個套接字,在網絡層我們已經講過了,然后在getHeader方法中調用server_read()獲取請求頭,然后通過Utils::parseHeader()函數進行解析。這樣把解析的內容放入需要的string中,當前不太需要的直接在map里面。這里我直接貼出代碼,大家看起來也比較容易。這里我在這一章節我主要講解的是文件的下載,所以主要會對HttpResponse的類的分析,而HttpRequest類只貼出目前需要的內容。

頭文件(include/httprequest.h)

 

1 #ifndef HTTPREQUEST_H
2 #define HTTPREQUEST_H
3 #include "socket.h"
4 #include 
5 #include 
6 #include 
7 namespace Http{
8 class HttpRequest{
9 public:
10 HttpRequest(TCP::Socket &c);
11 virtual ~HttpRequest();
12 std::map
13 ......
14 protected:
15 private:
16 std::string method;
17 std::string url;
18 std::string host;
19 TCP::Socket &s;
20 };
21 }
22
23 #endif // HTTPREQUEST_H

 

源文件(src/httprequest.cpp)

 

1 #include "httprequest.h"
2 #include "utils.h"
3 namespace Http{
4 HttpRequest::HttpRequest(TCP::Socket &c):s(c){
5 }
6
7 HttpRequest::~HttpRequest(){
8 }
9 std::map
10 char recvBuf[1024];
11 memset(recvBuf,0,sizeof(recvBuf));
12 s.server_read(confd,recvBuf,1024);
13 std::cout<
14 std::map
15 method =mp["Method"];
16 url=mp["Url"];
17 host=mp["Host"];
18 return mp;
19 }
20 ......
21 }

 

三、HttpResponse類

當我們訪問Http服務器的時候,瀏覽器顯示可以下載的文件的內容,然后我們點擊需要下載的文件,然后文件就可下載了。首先我點擊這個文件這個URL時,瀏覽器給我們發送一些請求頭,例如它發送一個為/download/HttpServer.zip這個URL,說明他需要下載的文件,而且該文件為HttpServer.zip。在上面我們已經可以用getHeader來捕獲這個請求頭,然后獲取這個URL。之后服務端還是要發送一個響應頭,告訴瀏覽器你的請求我們同意,請求頭結束以空行為標記,接著就是具體的文件的內容了。

在發送響應頭時,還是需要發送協議版本,狀態碼,響應內容類型,文件的長度,文件斷點下載等內容,或者傳輸的時候采用chunk傳輸,但是這里我采用文件的長度來標記。讀者可以自行查看其它方式傳輸內容。特別要注意ed是一定要在響應頭中指定傳輸實體的大小,否則客戶端不知道什么時候結束,這時可能拒絕接收服務端發來的字節。在這個類中,請求下載的文件發送時,我采用sendFile這個函數,這個函數讀取文件就是采用二進制的方式,并且在響應頭中也告知瀏覽器以二進制的方式接收文件。這樣都是以二進制的方式讀取和發送文件才不會出現問題。sendLineFile 和sendIndexFile兩者大致相同,都是采用ASCII文本的方式發送內容,這樣比如HTML這些需要顯示在瀏覽器的內容,可以通過這兩個函數。通過函數名可知在sendLineFile會以文件行的方式讀取,而sendIndexFile文件會把內容寫在同一行上。例如:我們瀏覽器請求一個index.html的內容,這時采用2個sendLineFile和sendIndexFile的顯示效果都是一樣的,但是如果點擊右鍵查看源碼時,sendLineFile的內容是以源文件一樣的,而sendIndexFile發送的內容會都在***行,不會換行。

說了這么多大家也比較清楚了,下面貼出具體一些代碼。

頭文件(include/httpresponse.h)

 

1 #ifndef HTTPRESPONSE_H
2 #define HTTPRESPONSE_H
3 #include "socket.h"
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include "utils.h"
11 namespace Http{
12 class HttpResponse{
13 public:
14 HttpResponse(TCP::Socket &c);
15 virtual ~HttpResponse();
16 ssize_t send(int confd,std::string content);
17 ssize_t sendIndexFile(int confd,std::string FileName);
18 ssize_t sendFile(int &confd,std::string FileName,int64_t pos);
19 ssize_t sendLineFile(int confd,std::string file);
20 void setProtocal(std::string);
21 void setStatusCode(std::string);
22 void setServerName(std::string);
23 void setContentType(std::string);
24 void setContentRange(std::string);
25 void setContentLength(int64_t);
26 protected:
27 std::string getHeader() const;
28 private:
29 std::string protocal;
30 std::string statusCode;
31 std::string serverName;
32 std::string contentType;
33 std::string contentLength;
34 std::string contentRange;
35 std::string connection;
36 std::string date;
37 TCP::Socket &s;
38 };
39 }
40 #endif // HTTPRESPONSE_H

 

#p#

源文件(src/httpresponse.cpp)

 

1 #include "httpresponse.h"
2 namespace Http{
3 HttpResponse::HttpResponse(TCP::Socket &c):s(c){
4 protocal="HTTP/1.1";
5 statusCode="200 OK";
6 serverName="Server:(Unix)";
7 contentType="Content-type:text/html";
8 contentLength="Content-length:0";
9 contentRange="Content-Range:0-";
10 connection="Connection:Keep-Alive";
11 time_t timep;
12 time(&timep);
13 char s[50];
14 sprintf(s,ctime(&timep));
15 date="Date:"+std::string(s,s+(strlen(s)-1));
16 }
17
18 HttpResponse::~HttpResponse(){
19 }
20 void HttpResponse::setProtocal(std::string content){
21 protocal=content;
22 }
23 void HttpResponse::setStatusCode(std::string content){
24 statusCode=content;
25 }
26 void HttpResponse::setServerName(std::string content){
27 serverName=content;
28 }
29 void HttpResponse::setContentType(std::string content){
30 contentType="Content-type:"+content;
31 }
32 void HttpResponse::setContentLength(int64_t len){
33 contentLength="Content-length:"+Utils::toString(len);
34 }
35 void HttpResponse::setContentRange(std::string content){
36 contentRange="Content-Range:"+content;
37 }
38 std::string HttpResponse::getHeader() const{
39 std::string h1 =protocal+" "+statusCode+"\r\n";
40 std::string h2 =serverName+"\r\n";
41 std::string h3 =contentType+"\r\n";
42 std::string h4 =contentLength+"\r\n";
43 std::string h5=contentRange+"\r\n";
44 std::string h6=connection+"\r\n";
45 std::string h7=date+"\r\n\r\n";
46 return h1+h2+h3+h4+h5+h6+h7;
47 }
48 ssize_t HttpResponse::send(int confd,std::string content){
49 setContentType("application/octet-stream");
50 setContentLength(content.size());
51 std::string header=getHeader();
52 s.server_write(confd,(char*)header.c_str(),header.size());
53 ssize_t len =s.server_write(confd,(char*)content.c_str(),content.size());
54 s.server_close(confd);
55 return len;
56 }
57 ssize_t HttpResponse::sendLineFile(int confd,std::string file){
58 std::ifstream in(file.c_str());
59 in.seekg(0,std::ios::end);
60 int64_t len = in.tellg();
61 setContentLength(len);
62 std::string header=getHeader();
63 s.server_write(confd,(char*)header.c_str(),header.size());
64 in.seekg(0,std::ios::beg);
65 ssize_t n=0;
66 char buf[1024];
67 while(!in.eof()){
68 bzero(buf,sizeof(buf));
69 in.getline(buf,1024);
70 buf[strlen(buf)]='\n';
71 n+=s.server_write(confd,buf,in.gcount());
72 }
73 s.server_close(confd);
74 return n;
75 }
76 ssize_t HttpResponse::sendIndexFile(int confd,std::string file){
77 std::ifstream in(file.c_str());
78 in.seekg(0,std::ios::end);
79 int64_t len = in.tellg();
80 setContentLength(len);
81 std::string header=getHeader();
82 s.server_write(confd,(char*)header.c_str(),header.size());
83 in.seekg(0,std::ios::beg);
84 char buf[1024];
85 int sendCount=0;
86 while(!in.eof()){
87 memset(buf,0,sizeof(buf));
88 in.getline(buf,1024);
89 sendCount+=s.server_write(confd,buf,in.gcount());
90 }
91 s.server_close(confd);
92 return sendCount;
93 }
94 ssize_t HttpResponse::sendFile(int &confd,std::string fileName,int64_t pos){
95 std::ifstream in(fileName.c_str(),std::ios::binary);
96 in.seekg(0, std::ios::end);
97 std::streampos ps = in.tellg();
98 int64_t len=ps-pos;
99 if(pos!=0){
100 setStatusCode("206 Partial Content");
101 }
102 setContentType("application/octet-stream");
103 setContentLength(len);
104 std::string content="bytes";
105 content+=" "+Utils::toString(pos)+"-"+Utils::toString((int64_t)ps-1)+"/"+Utils::toString(len);
106 setContentRange(content);
107 std::string header=getHeader();
108 std::cout<
109 s.server_write(confd,(char*)header.c_str(),header.size());
110 in.seekg(pos,std::ios::beg);
111 char buf[1024];
112 ssize_t n=0;
113 while(!in.eof()){
114 in.read(buf,1024);
115 n+=s.server_write(confd,buf,in.gcount());
116 }
117 s.server_close(confd);
118 return n;
119 }
120 }

 

在上面響應頭中Content-Range:這個字段,表示文件內容的范圍,在一般情況下都是從0到lenth(file)-1。如果在之前已經下了一些內容后,如果是斷點續下載時,瀏覽器在請求頭中有Range知道,表示從Range的開始字節傳輸,而我們服務器指定Content-Range為Range字段開始,接著發送這些內容即可,實現文件的斷點下載。

責任編輯:何妍 來源: 博客園
相關推薦

2015-10-08 09:38:24

HTTP網絡協議文件傳輸

2015-09-29 09:25:20

HTTP網絡協議

2015-09-28 13:39:13

Http網絡協議HTTP

2015-10-10 16:46:14

HTTP網絡協議文件傳輸

2020-12-02 11:48:05

TFTP

2019-04-23 10:48:55

HTTPTomcat服務器

2018-10-09 09:28:12

HTTPHTTP協作服務器

2011-08-18 16:03:34

iPhone上傳圖片

2022-03-01 20:33:50

服務web項目

2020-06-17 21:39:11

HTTP協議服務器

2010-05-25 13:20:46

http與svn

2017-11-10 08:58:49

Web服務器應用程序

2009-07-03 13:05:47

JSP HTTP服務器

2010-03-22 12:57:46

Java Socket

2018-06-15 10:25:43

Python HTTPFTP服務器

2018-12-06 09:23:33

2019-04-24 15:06:37

Http服務器協議

2009-07-06 17:25:22

JSP HTTP服務器

2009-07-06 17:56:12

JSP HTTP服務器

2019-08-22 15:26:24

HTTP服務器Python
點贊
收藏

51CTO技術棧公眾號

日本三级免费观看| 国产精品免费区二区三区观看| www.99热| 国产精品日本一区二区三区在线 | 国产精品熟妇一区二区三区四区| 青草在线视频| 国产亚洲一本大道中文在线| 成人性生交xxxxx网站| 精品无码人妻一区二区三区| 国模吧精品视频| 91精品国产入口| 日韩欧美国产免费| 成人看av片| 91看片淫黄大片一级在线观看| 国产欧美亚洲视频| 国产又大又黑又粗免费视频| 99久久亚洲精品蜜臀| 亚洲精品av在线播放| 日韩av片免费观看| 芒果视频成人app| 夜色激情一区二区| 亚洲欧美精品在线观看| 欧洲成人一区二区三区| 老司机精品视频在线| 国产91av在线| 久久免费精彩视频| 91视频一区| 亚洲欧美在线第一页| 最好看的中文字幕| 久久夜夜久久| 色狠狠综合天天综合综合| 欧美a级免费视频| 在线观看二区| 国产亚洲欧美一级| 国产自产精品| 亚洲AV午夜精品| 乱一区二区av| 国产精品igao视频| 一级成人黄色片| 亚洲激情不卡| 久久久久久国产三级电影| 国产视频123区| 神马影视一区二区| 亚洲精品电影在线| 亚洲精品乱码久久久久久蜜桃欧美| 久久精品超碰| 狠狠色狠狠色综合日日小说| cao在线观看| 欧美aaa免费| 亚洲欧美日韩一区二区 | 国产理论电影在线观看| 91浏览器在线视频| 久久久久久a亚洲欧洲aⅴ| 亚洲第一第二区| 国产在线看一区| 成人精品一区二区三区| 91九色蝌蚪91por成人| 免费在线观看一区二区三区| 国产va免费精品高清在线| 天天操夜夜操视频| 欧美亚洲视频| 国产精品第8页| 在线观看视频中文字幕| 蜜桃传媒麻豆第一区在线观看| 国产精品久久不能| 一区二区精品视频在线观看| 久久精品99国产精品| 成人av色在线观看| 国产成人久久精品77777综合| 极品销魂美女一区二区三区| 亚洲淫片在线视频| 亚洲精品一区二区三区区别| 99久久精品情趣| 久久久久久久久久久久久久一区| 欧美孕妇孕交xxⅹ孕妇交| 久久九九99视频| 视频一区视频二区视频| 大地资源网3页在线观看| 亚洲精品免费在线| 国产日韩欧美精品在线观看| 中文字幕在线直播| 欧美视频日韩视频在线观看| 思思久久精品视频| jizz性欧美2| 亚洲精品一区二区三区婷婷月 | 欧美国产日韩在线观看| 中文字幕一区二区三区在线乱码| 91网址在线观看| 欧美日韩免费观看中文| 国产三级三级三级看三级| 国产精品日本一区二区不卡视频| 精品国产乱码久久久久久牛牛| 亚洲一区二区在线免费| 精品日韩欧美一区| 欧美另类极品videosbestfree| 日韩黄色a级片| 免费在线观看不卡| 国产精品日韩高清| 国产福利第一视频在线播放| 亚洲精品乱码久久久久久| 3d动漫一区二区三区| 免费一级欧美在线观看视频| 精品日韩99亚洲| 国产一区二区三区四区五区六区| 综合久久一区| 国产精品福利小视频| 性中国古装videossex| 久久女同精品一区二区| 青少年xxxxx性开放hg| 免费h视频在线观看| 欧美日韩不卡在线| 老熟妇精品一区二区三区| 91麻豆国产自产在线观看亚洲| 91禁外国网站| 99热精品在线播放| 国产欧美一区二区精品秋霞影院| 免费看欧美一级片| 99国内精品久久久久| 精品亚洲永久免费精品| 免费视频网站www| 奇米影视一区二区三区| 精品国产一区二区三区麻豆免费观看完整版| 91在线品视觉盛宴免费| 狠狠躁夜夜躁人人爽天天天天97| 精品人妻一区二区三| 日韩久久精品网| 日韩av毛片网| 熟妇高潮一区二区三区| 中文字幕中文在线不卡住| 日韩中文字幕免费在线 | 色噜噜狠狠一区二区三区| 91九色在线播放| 日韩网站在线看片你懂的| 亚洲图片第一页| 水野朝阳av一区二区三区| 国产欧美一区二区视频| 视频在线观看入口黄最新永久免费国产| 欧美视频中文字幕| 影音先锋男人在线| 男女av一区三区二区色多| 精品一区久久久| 国产网红在线观看| 日韩欧美一区二区久久婷婷| 亚洲天堂黄色片| 精品一区二区在线视频| 亚洲一区二区三区精品视频| 在线成人视屏| 亚洲天堂网在线观看| 日本黄色一级视频| 久久久另类综合| 日韩av片在线看| 外国成人在线视频| 日本人成精品视频在线| 你懂得网站在线| 日本韩国精品在线| 亚洲性猛交xxxx乱大交| 日本在线不卡视频一二三区| 色姑娘综合av| 日韩一级视频| xxx欧美精品| 国产精品久久久久久69| 亚洲三级在线免费观看| 手机精品视频在线| 亚洲一级特黄| 九色一区二区| 99热播精品免费| 色系列之999| 国产黄色小视频在线观看| 亚洲最色的网站| 亚洲啪av永久无码精品放毛片| 亚洲乱亚洲高清| 麻豆av一区二区| 亚洲不卡系列| 日韩视频在线免费| 丰满人妻av一区二区三区| 香蕉影视欧美成人| 大又大又粗又硬又爽少妇毛片 | 国产91免费看片| 天堂а√在线资源在线| 日韩欧美专区在线| 精品成人av一区二区在线播放| 久久女同精品一区二区| 欧美成年人视频在线观看| 欧美日韩免费| 欧美激情第六页| 91成人在线网站| 国产69精品久久久久9| 日本中文字幕电影在线观看| 欧美色精品天天在线观看视频| 国产天堂av在线| 99久久久精品免费观看国产蜜| 爱情岛论坛成人| 欧美日韩p片| 日韩av图片| 风间由美一区二区av101| 国产97色在线|日韩| 影音先锋男人在线资源| 亚洲乱码国产乱码精品精天堂| 中文字幕二区三区| 精品久久久久久久久国产字幕| 久久国产柳州莫菁门| 国产99精品在线观看| 欧美两根一起进3p做受视频| 欧美三级免费| 五月天色一区| 日本福利一区| 91情侣偷在线精品国产| 日本在线高清| 欧美区在线播放| 免费在线视频一级不卡| 日韩免费看网站| 一区二区三区播放| 狠狠躁夜夜躁久久躁别揉| 欧美高清视频一区二区三区| 国产日韩欧美a| 丝袜熟女一区二区三区| 国产一区二区视频在线播放| 日韩 欧美 高清| 激情久久久久| 超碰免费在线公开| 欧美精品系列| 免费观看成人在线| 超碰97久久国产精品牛牛| 91精品久久久久| 成人在线观看免费播放| 26uuu国产精品视频| 色爱综合区网| 久久国产视频网站| 婷婷视频在线| 亚洲香蕉成人av网站在线观看| 人妻视频一区二区三区| 91精品国产乱码| 少妇一级淫片日本| 色婷婷av一区二区三区之一色屋| 国产一级理论片| 夜色激情一区二区| 欧美日韩在线视频免费播放| 中文字幕一区二区三| 三级黄色片在线观看| 国产色婷婷亚洲99精品小说| 成年人网站免费在线观看| 北条麻妃国产九九精品视频| 中国特级黄色片| 成人一道本在线| 亚洲成年人av| 成人少妇影院yyyy| 男人网站在线观看| 99免费精品在线| 变态另类丨国产精品| 成人激情黄色小说| 免费的av网站| 91麻豆精品在线观看| 性欧美13一14内谢| 国产色综合久久| 激情无码人妻又粗又大| 国产精品成人在线观看| 亚洲综合视频网站| 亚洲精品高清在线| 久久久久久久久精| 黄色91在线观看| 中文字幕精品无码一区二区| 色94色欧美sute亚洲线路一久| 色婷婷久久综合中文久久蜜桃av| 欧美午夜一区二区三区免费大片| 一区二区视频播放| 欧美一三区三区四区免费在线看| 国产成人三级在线播放| 精品国内二区三区| av女名字大全列表| 在线观看日韩www视频免费| 久久久久久国产精品免费无遮挡| 欧美精品在线免费观看| 国产第一页在线| 国产91色在线| 精品亚洲二区| 国产乱码精品一区二区三区中文| 天堂一区二区三区四区| 一区二区三区免费看| 欧美成人亚洲| 鲁一鲁一鲁一鲁一澡| 日本不卡123| 成人在线短视频| 久久尤物电影视频在线观看| 2017亚洲天堂| 亚洲高清免费观看| 波多野结衣一区二区三区四区| 欧美精品777| 婷婷五月综合激情| 中文字幕一精品亚洲无线一区| 成人片在线看| 欧美亚洲第一页| 白嫩亚洲一区二区三区| 国产经品一区二区| 精品亚洲成人| 久久久久久久久久久综合| 亚洲精品色图| 91 在线视频观看| 99国产欧美另类久久久精品| 羞羞在线观看视频| 欧美日韩色婷婷| 国产毛片久久久久| 亚洲欧美日韩中文在线制服| av片在线观看| 国产精品99久久久久久久久| 97青娱国产盛宴精品视频| 亚洲国产日韩欧美| 99pao成人国产永久免费视频| 鲁一鲁一鲁一鲁一av| av福利精品导航| 99久久久免费精品| 在线观看日韩精品| 婷婷五月综合激情| 欧美国产亚洲视频| 涩涩涩久久久成人精品| 久久免费一区| 亚洲视频中文| 亚洲精品在线网址| 国产精品嫩草影院com| 日韩男人的天堂| 精品少妇一区二区三区在线播放| 幼a在线观看| 国产精品igao视频| 你微笑时很美电视剧整集高清不卡| a级黄色片免费| 精品一区二区久久| 色屁屁草草影院ccyy.com| 午夜精品久久一牛影视| 精品久久久久中文慕人妻| 日日骚久久av| 欧美123区| 青青影院一区二区三区四区| 亚洲中午字幕| 7788色淫网站小说| 一区二区三区高清| 99在线精品视频免费观看20| 日韩在线视频网站| 91p九色成人| 亚洲午夜精品福利| 麻豆国产91在线播放| 国产精品情侣呻吟对白视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产欧美一区二区三区在线| 亚洲人和日本人hd| 虎白女粉嫩尤物福利视频| 91浏览器在线视频| 国产91国语对白在线| 日韩精品在线观看一区| 忘忧草在线影院两性视频| 国产在线精品一区| 亚洲欧美日韩精品一区二区 | 国产一级片黄色| 国产日韩欧美a| 中文字幕乱码人妻无码久久| 在线精品高清中文字幕| 四虎影视成人精品国库在线观看| 亚洲精品永久www嫩草| 奇米色一区二区| 天海翼在线视频| 欧美一级二级三级蜜桃| 欧美日韩经典丝袜| 国产欧美日韩综合一区在线观看| 在线视频日韩| 一级片视频免费看| 欧美性xxxxx极品少妇| 免费在线观看av网站| 91传媒视频免费| 亚洲激情不卡| 亚洲黄色小说视频| 欧美一区二区在线看| 日本电影在线观看| 免费观看成人高| 久久精品国产99国产| 欧美日韩大片在线观看| 亚洲第一福利视频| 国产精品亚洲一区二区三区在线观看| 日韩欧美一区二区三区四区五区| 久久国产精品99久久人人澡| 一区二区在线观看免费视频| 亚洲成人性视频| 99久久精品一区二区成人| 成人在线观看毛片| 91网站在线播放| 亚洲天堂手机在线| 久久久久久久久久久av| 激情五月综合网| 在线观看免费看片| 色综合色综合色综合色综合色综合 | 成a人片国产精品| 伊人免费在线观看| 欧美俄罗斯性视频| 欧洲grand老妇人| 男人添女人荫蒂国产| 色综合中文综合网| 国产精品剧情| 欧美精品欧美精品| 国产乱人伦精品一区二区在线观看| 国产精品xxxx喷水欧美| 日韩中文在线观看| 日韩av网址大全| 日本在线观看视频一区|