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

基本 TCP 套接字編程講解

網絡 網絡管理
基于 TCP 的套接字編程的所有客戶端和服務器端都是從調用socket 開始,它返回一個套接字描述符。客戶端隨后調用connect 函數,服務器端則調用 bind、listen 和accept 函數。

基本 TCP 套接字編程講解

基于 TCP 的套接字編程的所有客戶端和服務器端都是從調用socket 開始,它返回一個套接字描述符。客戶端隨后調用connect 函數,服務器端則調用 bind、listen 和accept 函數。套接字通常使用標準的close 函數關閉,但是也可以使用 shutdown 函數關閉套接字。下面針對套接字編程實現過程中所調用的函數進程分析。以下是基于 TCP 套接字編程的流程圖:

 

 

socket 函數

套接字是通信端點的抽象,實現端對端之間的通信。與應用程序要使用文件描述符訪問文件一樣,訪問套接字需要套接字描述符。任何套接字編程都必須調用socket 函數獲得套接字描述符,這樣才能對套接字進行操作。以下是該函數的描述:

  1. /* 套接字 */   
  2.    
  3. /*  
  4.  * 函數功能:創建套接字描述符;  
  5.  * 返回值:若成功則返回套接字非負描述符,若出錯返回-1;  
  6.  * 函數原型:  
  7.  */   
  8. #include <sys/socket.h>   
  9.    
  10. int socket(int family, int type, int protocol);   
  11. /*  
  12.  * 說明:  
  13.  * socket類似與open對普通文件操作一樣,都是返回描述符,后續的操作都是基于該描述符;  
  14.  * family 表示套接字的通信域,不同的取值決定了socket的地址類型,其一般取值如下:  
  15.  * (1)AF_INET         IPv4因特網域  
  16.  * (2)AF_INET6        IPv6因特網域  
  17.  * (3)AF_UNIX         Unix域  
  18.  * (4)AF_ROUTE        路由套接字  
  19.  * (5)AF_KEY          密鑰套接字  
  20.  * (6)AF_UNSPEC       未指定  
  21.  *  
  22.  * type確定socket的類型,常用類型如下:  
  23.  * (1)SOCK_STREAM     有序、可靠、雙向的面向連接字節流套接字  
  24.  * (2)SOCK_DGRAM      長度固定的、無連接的不可靠數據報套接字  
  25.  * (3)SOCK_RAW        原始套接字  
  26.  * (4)SOCK_SEQPACKET  長度固定、有序、可靠的面向連接的有序分組套接字  
  27.  *  
  28.  * protocol指定協議,常用取值如下:  
  29.  * (1)0               選擇type類型對應的默認協議  
  30.  * (2)IPPROTO_TCP     TCP傳輸協議  
  31.  * (3)IPPROTO_UDP     UDP傳輸協議  
  32.  * (4)IPPROTO_SCTP    SCTP傳輸協議  
  33.  * (5)IPPROTO_TIPC    TIPC傳輸協議  
  34.  *  
  35.  */   

connect 函數

在處理面向連接的網絡服務時,例如 TCP ,交換數據之前必須在請求的進程套接字和提供服務的進程套接字之間建立連接。TCP 客戶端可以調用函數connect 來建立與 TCP 服務器端的一個連接。該函數的描述如下:

  1. /*  
  2.  * 函數功能:建立連接,即客戶端使用該函數來建立與服務器的連接;  
  3.  * 返回值:若成功則返回0,出錯則返回-1;  
  4.  * 函數原型:  
  5.  */   
  6. #include <sys/socket.h>   
  7.    
  8. int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);   
  9. /*  
  10.  * 說明:  
  11.  * sockfd是系統調用的套接字描述符,即由socket函數返回的套接字描述符;  
  12.  * servaddr是目的套接字的地址,該套接字地址結構必須包含目的IP地址和目的端口號,即想與之通信的服務器地址;  
  13.  * addrlen是目的套接字地址的大小;  
  14.  *  
  15.  * 如果sockfd沒有綁定到一個地址,connect會給調用者綁定一個默認地址,即內核會確定源IP地址,并選擇一個臨時端口號作為源端口號;  
  16.  */   

TCP 客戶端在調用函數 connect 前不必非得調用 bind 函數,因為內核會確定源 IP 地址,并選擇一個臨時端口作為源端口號。若 TCP 套接字調用connect 函數將建立 TCP 連接(執行三次握手),而且僅在連接建立成功或出錯時才返回,其中出錯返回可能有以下幾種情況:

若 TCP 客戶端沒有收到 SYN 報文段的響應,則返回 ETIMEOUT 錯誤;

若客戶端的 SYN 報文段的響應是 RST (表示復位),則表明該服務器主機在我們指定的端口上沒有進程在等待與之連接。只是一種硬錯誤,客戶端一接收到 RST 就立即返回ECONNERFUSED 錯誤;

RST 是 TCP 在發生錯誤時發送的一種 TCP 報文段。產生 RST 的三個條件時:

目的地為某端口的 SYN 到達,然而該端口上沒有正在監聽的服務器;

TCP 想取消一個已有連接;

TCP 接收到一個不存在的連接上的報文段;

若客戶端發出的 SYN 在中某個路由器上引發一個目的地不可達的 ICMP 錯誤,這是一個軟錯誤。客戶端主機內核保存該消息,并在一定的時間間隔繼續發送 SYN (即重發)。在某規定的時間后仍未收到響應,則把保存的消息(即 ICMP 錯誤)作為EHOSTUNREACH 或ENETUNREACH 錯誤返回給進行。#p#

bind 函數

調用函數 socket 創建套接字描述符時,該套接字描述符是存儲在它的協議族空間中,沒有具體的地址,要使它與一個地址相關聯,可以調用函數bind 使其與地址綁定。客戶端的套接字關聯的地址一般可由系統默認分配,因此不需要指定具體的地址。若要為服務器端套接字綁定地址,可以通過調用函數 bind 將套接字綁定到一個地址。下面是該函數的描述:

  1. /* 套接字的基本操作 */   
  2.    
  3. /*  
  4.  * 函數功能:將協議地址綁定到一個套接字;其中協議地址包含IP地址和端口號;  
  5.  * 返回值:若成功則返回0,若出錯則返回-1;  
  6.  * 函數原型:  
  7.  */   
  8. #include <sys/socket.h>   
  9. int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);   
  10. /*  
  11.  * 說明:  
  12.  * sockfd 為套接字描述符;  
  13.  * addr是一個指向特定協議地址結構的指針;  
  14.  * addrlen是地址結構的長度;  
  15.  */   

對于 TCP 協議,調用 bind 函數可以指定一個端口號,或指定一個 IP 地址,也可以兩者都指定,還可以都不指定。若 TCP 客戶端或服務器端不調用bind 函數綁定一個端口號,當調用connect 或 listen 函數時,內核會為相應的套接字選擇一個臨時端口號。一般 TCP 客戶端使用內核為其選擇一個臨時的端口號,而服務器端通過調用bind 函數將端口號與相應的套接字綁定。進程可以把一個特定的 IP 地址捆綁到它的套接字上,但是這個 IP 地址必須屬于其所在主機的網絡接口之一。對于 TCP 客戶端,這就為在套接字上發送的 IP 數據報指派了源 IP 地址。對于 TCP 服務器端,這就限定該套接字只接收那些目的地為這個 IP 地址的客戶端連接。TCP 客戶端一般不把 IP 地址捆綁到它的套接字上。當連接套接字時,內核將根據所用外出網絡接口來選擇源 IP 地址,而所用外出接口則取決于到達服務器端所需的路徑。若 TCP 服務器端沒有把 IP 地址捆綁到它的套接字上,內核就把客戶端發送的 SYN 的目的 IP 地址作為服務器端的源 IP 地址。

在地址使用方面有下面一些限制:

在進程所運行的機器上,指定的地址必須有效,不能指定其他機器的地址;

地址必須和創建套接字時的地址族所支持的格式相匹配;

端口號必須不小于1024,除非該進程具有相應的特權(超級用戶);

一般只有套接字端點能夠與地址綁定,盡管有些協議允許多重綁定;

listen 函數

在編寫服務器程序時需要使用監聽函數 listen 。服務器進程不知道要與誰連接,因此,它不會主動地要求與某個進程連接,只是一直監聽是否有其他客戶進程與之連接,然后響應該連接請求,并對它做出處理,一個服務進程可以同時處理多個客戶進程的連接。listen 函數描述如下:

  1. /*  
  2.  * 函數功能:接收連接請求;  
  3.  * 函數原型:  
  4.  */   
  5. #include <sys/socket.h>   
  6.    
  7. int listen(int sockfd, int backlog);//若成功則返回0,若出錯則返回-1;   
  8. /*  
  9.  * sockfd是套接字描述符;  
  10.  * backlog是該進程所要入隊請求的最大請求數量;  
  11.  */   

listen 函數僅由 TCP 服務器調用,它有以下兩種作用:

當 socket 函數創建一個套接字時,若它被假設為一個主動套接字,即它是一個將調用connect 發起連接的客戶端套接字。listen 函數把一個未連接的套接字轉換成一個被動套接字,指示內核應該接受指向該套接字的連接請求;

listen 函數的第二個參數規定內核應該為相應套接字排隊的最大連接個數;

listen 函數一般應該在調用socket 和bind 這兩個函數之后,并在調用 accept 函數之前調用。 內核為任何一個給定監聽套接字維護兩個隊列:

未完成連接隊列,每個這樣的 SYN 報文段對應其中一項:已由某個客戶端發出并到達服務器,而服務器正在等待完成相應的 TCP 三次握手過程。這些套接字處于 SYN_REVD 狀態;

已完成連接隊列,每個已完成 TCP 三次握手過程的客戶端對應其中一項。這些套接字處于 ESTABLISHED 狀態;

accept 函數

accept 函數由 TCP 服務器調用,用于從已完成連接隊列隊頭返回下一個已完成連接。如果已完成連接隊列為空,那么進程被投入睡眠。該函數的返回值是一個新的套接字描述符,返回值是表示已連接的套接字描述符,而第一個參數是服務器監聽套接字描述符。一個服務器通常僅僅創建一個監聽套接字,它在該服務器的生命周期內一直存在。內核為每個由服務器進程接受的客戶連接創建一個已連接套接字(表示 TCP 三次握手已完成),當服務器完成對某個給定客戶的服務時,相應的已連接套接字就會被關閉。該函數描述如下:

  1. /* 函數功能:從已完成連接隊列隊頭返回下一個已完成連接;若已完成連接隊列為空,則進程進入睡眠;  
  2.  * 函數原型:  
  3.  */   
  4. int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);//返回值:若成功返回套接字描述符,出錯返回-1;   
  5. /*  
  6.  * 說明:  
  7.  * 參數 cliaddr 和 addrlen 用來返回已連接的對端(客戶端)的協議地址;  
  8.  *  
  9.  * 該函數返回套接字描述符,該描述符連接到調用connect函數的客戶端;  
  10.  * 這個新的套接字描述符和原始的套接字描述符sockfd具有相同的套接字類型和地址族,而傳給accept函數的套接字描述符sockfd沒有關聯到這個鏈接,  
  11.  * 而是繼續保持可用狀態并接受其他連接請求;  
  12.  * 若不關心客戶端協議地址,可將cliaddr和addrlen參數設置為NULL,否則,在調用accept之前,應將參數cliaddr設為足夠大的緩沖區來存放地址,  
  13.  * 并且將addrlen設為指向代表這個緩沖區大小的整數指針;  
  14.  * accept函數返回時,會在緩沖區填充客戶端的地址并更新addrlen所指向的整數為該地址的實際大小;  
  15.  *  
  16.  * 若沒有連接請求等待處理,accept會阻塞直到一個請求到來;  

#p#fork 和 exec 函數

  1. /* 函數功能:創建子進程;  
  2.  * 返回值:  
  3.  * (1)在子進程中,返回0;  
  4.  * (2)在父進程中,返回新創建子進程的進程ID;  
  5.  * (3)若出錯,則范回-1;  
  6.  * 函數原型:  
  7.  */   
  8. #include <unistd.h>   
  9. pid_t fork(void);   
  10. /* 說明:  
  11.  * 該函數調用一次若成功則返回兩個值:  
  12.  * 在調用進程(即父進程)中,返回新創建進程(即子進程)的進程ID;  
  13.  * 在子進程返回值是0;  
  14.  * 因此,可以根據返回值判斷進程是子進程還是父進程;  
  15.  */   
  16.    
  17. /* exec 序列函數 */   
  18.    
  19. /*  
  20.  * 函數功能:把當前進程替換為一個新的進程,新進程與原進程ID相同;  
  21.  * 返回值:若出錯則返回-1,若成功則不返回;  
  22.  * 函數原型:  
  23.  */   
  24. #include <unistd.h>   
  25. int execl(const char *pathname, const char *arg, ...);   
  26. int execv(const char *pathnam, char *const argv[]);   
  27. int execle(const char *pathname, const char *arg, ... , char *const envp[]);   
  28. int execve(const char *pathnam, char *const argv[], char *const envp[]);   
  29. int execlp(const char *filename, const char *arg, ...);   
  30. int execvp(const char *filename, char *const argv[]);   
  31. /*  6 個函數的區別如下:  
  32.  * (1)待執行的程序文件是 文件名 還是由 路徑名 指定;  
  33.  * (2)新程序的參數是 一一列出 還是由一個 指針數組 來引用;  
  34.  * (3)把調用進程的環境傳遞給新程序 還是 給新程序指定新的環境;  
  35.  */   

exec 6個函數在函數名和使用語法的規則上都有細微的區別,下面就從可執行文件查找方式、參數傳遞方式及環境變量這幾個方面進行比較。

查找方式:前4個函數的查找方式都是完整的文件目錄路徑 pathname ,而最后兩個函數(也就是以p結尾的兩個函數)可以只給出文件名 filename,系統就會自動按照環境變量 “$PATH” 所指定的路徑進行查找。

參數傳遞方式:exec 序列函數的參數傳遞有兩種方式:一種是逐個列舉的方式,而另一種則是將所有參數整體構造指針數組傳遞。在這里是以函數名的第5位字母來區分的,字母為 “l”(list)的表示逐個列舉參數的方式,其語法為 const char *arg;字母為 “v”(vertor)的表示將所有參數整體構造指針數組傳遞,其語法為 char *const argv[]。讀者可以觀察 execl()、execle()、execlp() 的語法與 execv()、execve()、execvp() 的區別。這里的參數實際上就是用戶在使用這個可執行文件時所需的全部命令選項字符串(包括該可執行程序命令本身)。要注意的是,這些參數必須以NULL結束。

環境變量:exec 序列函數可以默認系統的環境變量,也可以傳入指定的環境變量。這里以 “e”(environment)結尾的兩個函數 execle() 和 execve() 就可以在 envp[] 中指定當前進程所使用的環境變量。

  1.  表 1 exec 序列函數的總結       
  2. 前4位 統一為:exec       
  3. 第5位 l:參數傳遞為逐個列舉方式    execl、execle、execlp   
  4.      v:參數傳遞為構造指針數組方式     execv、execve、execvp   
  5. 第6位 e:可傳遞新進程環境變量     execle、execve   
  6.      p:可執行文件查找方式為文件名     execlp、execvp   

其關系如下圖:

 

 

并發服務器

當要求一個服務器同時為多個客戶服務時,需要并發服務器。TCP 并發服務器,它們為每個待處理的客戶端連接調用 fork 函數派生一個子進程。當一個連接建立時,accept 返回,服務器接著調用 fork 函數,然后由子進程服務客戶端,父進程則等待另一個連接,此時,父進程必須關閉已連接套接字。

close 和 shutdown 函數

當要關閉套接字時,可使用 close 和 shutdown 函數,其描述如下:

  1. /* 函數功能:關閉套接字,若是在 TCP 協議中,并終止 TCP 連接;  
  2.  * 返回值:若成功則返回0,若出錯則返回-1;  
  3.  * 函數原型:  
  4.  */   
  5. #include <unistd.h>   
  6. int close(int sockfd);   
  7.    
  8. /*  
  9.  * 函數功能:關閉套接字上的輸入或輸出;  
  10.  * 返回值:若成功則返回0,若出錯返回-1;  
  11.  * 函數原型:  
  12.  */   
  13. #include <sys/socket.h>   
  14. int shutdown(int sockfd, int how);   
  15. /*  
  16.  * 說明:  
  17.  * sockfd表示待操作的套接字描述符;  
  18.  * how表示具體操作,取值如下:  
  19.  * (1)SHUT_RD     關閉讀端,即不能接收數據  
  20.  * (2)SHUT_WR     關閉寫端,即不能發送數據  
  21.  * (3)SHUT_RDWR   關閉讀、寫端,即不能發送和接收數據  
  22.  *  
  23.  */   

getsockname 和 getpeername 函數

為了獲取已綁定到套接字的地址,我們可以調用函數 getsockname 來實現:

  1. /*  
  2.  * 函數功能:獲取已綁定到一個套接字的地址;  
  3.  * 返回值:若成功則返回0,若出錯則返回-1;  
  4.  * 函數原型:  
  5.  */   
  6. #include <sys/socket.h>   
  7.    
  8. int getsockname(int sockfd, struct sockaddr *addr, socklen_t *alenp);   
  9. /*  
  10.  * 說明:  
  11.  * 調用該函數之前,設置alenp為一個指向整數的指針,該整數指定緩沖區sockaddr的大小;  
  12.  * 返回時,該整數會被設置成返回地址的大小,如果該地址和提供的緩沖區長度不匹配,則將其截斷而不報錯;  
  13.  */   
  14. /*  
  15.  * 函數功能:獲取套接字對方連接的地址;  
  16.  * 返回值:若成功則返回0,若出錯則返回-1;  
  17.  * 函數原型:  
  18.  */   
  19. #include <sys/socket.h>   
  20.    
  21. int getpeername(int sockfd, struct sockaddr *addr, socklen_t *alenp);   
  22. /*  
  23.  * 說明:  
  24.  * 該函數除了返回對方的地址之外,其他功能和getsockname一樣;  
  25.  */   
責任編輯:林琳 來源: CSDN博客
相關推薦

2014-12-17 09:22:10

網絡·安全技術周刊

2014-12-15 09:28:54

UDP

2015-05-28 10:47:38

Unix網絡編程TCP

2012-01-06 13:58:47

JavaTCP

2015-10-16 09:33:26

TCPIP網絡協議

2009-03-10 13:59:41

C#套接字編程

2015-03-31 11:24:02

2021-03-14 18:22:23

套接字網絡通信

2021-02-05 15:20:06

網絡安全套接字命令

2020-10-15 19:10:05

LinuxAPI函數

2013-12-27 13:39:23

Java套接字

2009-08-21 14:47:39

C#網絡編程

2009-08-21 09:20:44

C#異步套接字

2010-07-06 15:33:10

UDP套接字

2010-06-08 13:32:19

TCP IP協議基礎

2019-08-26 09:50:15

TCP連接Socket

2010-06-13 15:16:02

2009-08-26 09:48:48

C#異步套接字

2017-01-16 09:26:07

2011-12-15 09:40:06

Javanio
點贊
收藏

51CTO技術棧公眾號

神马影院我不卡| 国产精品亚发布| 国精品无码人妻一区二区三区| 手机在线观看av| 欧美国产精品v| 91福利入口| 九九热在线免费观看| 999久久久精品国产| 欧美精品一区二区三区久久久| 无码人妻丰满熟妇区毛片| 毛片av在线| 91亚洲国产成人精品一区二三 | 欧美男女交配| 亚洲欧美aⅴ...| 日韩精品一区二区三区丰满| 亚洲精品一区二区口爆| 蜜桃免费网站一区二区三区| 91国内免费在线视频| 女人18毛片毛片毛片毛片区二 | 亚洲国产精品123| 亚洲欧美激情在线观看| 老鸭窝一区二区久久精品| 97视频免费在线看| 国产性生活大片| 精品国产一区二区三区| 亚洲第一网站免费视频| 天天爽夜夜爽视频| 青青久久精品| 欧美亚洲一区二区在线| 欧美啪啪免费视频| 午夜小视频在线观看| 中文字幕亚洲一区二区va在线| 免费成人深夜夜行视频| 黄色小视频免费观看| 国内精品久久久久影院薰衣草| 国产999精品久久久| 天天综合网入口| 亚洲夜间福利| 欧美大片在线看免费观看| 顶级黑人搡bbw搡bbbb搡| 亚洲品质自拍| 亚洲精品一区久久久久久| 这里只有精品在线观看视频| 中文字幕日韩在线| 日韩欧美成人激情| 亚洲丝袜在线观看| 国产精品成人3p一区二区三区| 欧美性猛片xxxx免费看久爱| 欧美性猛交xxx乱久交| 日韩大尺度黄色| 色婷婷av一区| 国产xxxxx视频| 欧美成人性网| 欧美亚一区二区| 乌克兰美女av| 欧美美女福利视频| 欧美日韩精品一区二区三区| 一区二区在线免费看| 亚洲国产伊人| 日韩视频免费观看高清完整版在线观看| 国内av一区二区| 天堂精品久久久久| 精品国产一区二区三区四区四| 久久久无码人妻精品无码| 在线观看视频一区二区三区 | 国产九九在线| 欧美激情中文不卡| 一区二区精品在线| a视频在线观看免费| 亚洲精品国产a久久久久久| 久久福利一区二区| 51精品在线| 色综合色狠狠综合色| 在线免费观看av的网站| 国产精品视频一区二区三区| 日韩美女天天操| 一起草在线视频| 精品久久久亚洲| 欧美成人国产va精品日本一级| 欧美日韩偷拍视频| 99在线精品视频在线观看| 人九九综合九九宗合| 亚洲精品国产精品乱码视色| 国产毛片精品视频| 久久99精品久久久久久秒播放器 | 免费看的黄色大片| 中文.日本.精品| 日韩免费观看高清完整版在线观看| 国产51自产区| 成人写真视频| 欧美激情精品久久久久久久变态| 超碰中文字幕在线| 精品一区二区国语对白| 国产伦视频一区二区三区| 国产视频二区在线观看| 亚洲日本电影在线| www黄色日本| 中文字幕日韩亚洲| 国产视频一区在线| 欧美交换国产一区内射| 日本vs亚洲vs韩国一区三区| 99久久久精品免费观看国产| 国产在线高清| 亚洲成人精品在线观看| 欧美美女性视频| 亚洲欧洲av| 欧美激情视频在线免费观看 欧美视频免费一 | 91高潮精品免费porn| 97超视频在线观看| 久久网这里都是精品| 免费在线精品视频| 日韩天堂在线| 亚洲国产天堂久久综合| 手机在线免费看片| 首页亚洲欧美制服丝腿| 国产福利久久| 国内精品久久久久久野外| 色婷婷av一区| 中文文字幕文字幕高清| 中文字幕一区二区三区乱码图片| 国产a∨精品一区二区三区不卡| 国内精品久久久久久久久久| 国产欧美日韩另类视频免费观看| 狠狠97人人婷婷五月| av成人男女| 免费av一区二区| 中文字幕日韩三级| 国产亚洲精品精华液| 国产亚洲综合视频| 成人动漫视频| 久久久久中文字幕| 性中国古装videossex| 成人欧美一区二区三区视频网页| 黄色av免费在线播放| 亚洲v天堂v手机在线| 91精品国产高清| 人妻精品一区一区三区蜜桃91| 亚洲蜜臀av乱码久久精品| 手机av在线网| 97视频热人人精品免费| 国产精品视频区| av中文字幕在线| 欧美性色黄大片手机版| 免费一级黄色录像| 日本亚洲欧美天堂免费| 日韩在线第一区| 久久天天久久| 久久久精品免费| 国产特级黄色片| 亚洲美腿欧美偷拍| 韩国一区二区在线播放| 在线精品国产| 99久久久久国产精品免费| 牛牛精品在线视频| 亚洲国产精品va在线看黑人 | 国产又粗又硬视频| 日本最新不卡在线| 亚洲综合第一| 久久69av| 国内揄拍国内精品| 日本中文字幕电影在线观看| 色一情一伦一子一伦一区| 国产高清一区二区三区四区| 麻豆视频一区二区| 桥本有菜av在线| 一区二区三区免费在线看| 97精品视频在线| 国产在线视频你懂得| 在线成人av网站| 国产亚洲成人av| 久久伊99综合婷婷久久伊| www.日本xxxx| 重囗味另类老妇506070| 久久大香伊蕉在人线观看热2| 成人福利av| 久久精品国产亚洲一区二区| 午夜精品久久久久久久96蜜桃 | 久久国产成人精品国产成人亚洲| 欧美人妖在线| 美女黄网久久| 99热国产在线| 色伊人久久综合中文字幕| 91视频免费看片| 国产精品996| 国产亚洲综合视频| 国产精品成久久久久| 国产精品国产三级国产专区53 | 成人免费av片| 美日韩一区二区三区| 久久艹国产精品| 欧美日韩播放| 国产经典一区二区三区| 日韩在线免费| 久久久久久午夜| aaa在线免费观看| 精品美女一区二区| www.久久网| 午夜视频在线观看一区二区| 日本一二三不卡视频| 高清国产一区二区三区| 成人午夜激情av| 亚洲国产高清一区二区三区| 一区二区三区在线视频看| 国产精品欧美大片| 91精品视频观看| 日韩pacopacomama| 国产69精品久久久久99| 美女免费久久| 亚洲国产成人91精品| 国产精品毛片一区二区在线看舒淇 | 国产成人精品午夜视频免费| 国产欧美在线一区| 国产在线欧美| 在线一区日本视频| 欧美美乳视频| 久久精品丝袜高跟鞋| 美国十次综合久久| 国产欧美日韩最新| 97成人资源| 亚州国产精品久久久| 超碰在线无需免费| 在线观看视频99| 涩爱av在线播放一区二区| 精品国产91乱码一区二区三区 | 国产精品中文字幕日韩精品| 欧美一级黄色影院| 国产精品老牛| 精品久久一二三| 激情欧美亚洲| 久久香蕉视频网站| 91久久电影| 亚洲一区二区三区在线观看视频| 神马电影久久| 清纯唯美一区二区三区| 你微笑时很美电视剧整集高清不卡| 国产精品亚洲不卡a| 日韩三级不卡| 91av免费看| 国产精品美女久久久久| 国产在线久久久| 亚洲伦理网站| 91久久精品国产91久久| 亚洲三级电影| 91性高湖久久久久久久久_久久99| 日韩一级特黄| 成人在线免费观看视视频| 亚洲成人精品综合在线| 成人性生交大片免费看小说 | 亚洲大尺度美女在线| 六月婷婷综合网| 欧美精品一区二区久久婷婷| www.日日夜夜| 亚洲成人网在线观看| 三级国产在线观看| 亚洲人成在线一二| а天堂8中文最新版在线官网| 中文字幕日韩综合av| 在线观看免费黄色| 久久夜色精品国产| 亚洲婷婷噜噜| 2019中文字幕在线| 欧美18av| 国产日韩在线免费| 日本免费一区二区视频| 国产精品免费一区二区三区四区 | 亚洲香蕉在线视频| 91精品国产综合久久精品| www.五月婷| 亚洲精品电影网站| 激情小说 在线视频| 中文字幕日韩欧美在线| 亚洲夜夜综合| 欧美在线日韩在线| 久久91视频| 国产精品福利视频| 欧美限制电影| 国产又粗又长又爽视频| 亚洲少妇在线| 日本不卡一区二区在线观看| 国产v综合v亚洲欧| 无码一区二区三区在线| 亚洲视频精选在线| 欧美三级韩国三级日本三斤在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美性大战久久久久久久蜜臀| 96日本xxxxxⅹxxx17| 亚洲国产精品人久久电影| www在线免费观看| 久久99精品久久久久久琪琪| 成人福利视频| 999国内精品视频在线| 神马久久一区二区三区| 激情六月天婷婷| 日韩和欧美一区二区三区| av影片在线播放| 欧美激情一区二区| 国产一级视频在线播放| 欧美视频在线播放| 欧美一级在线免费观看| www国产精品com| 天堂av在线网| 亚洲一区二区在线| 精品国产日韩欧美| 国产一二三在线视频| 久久国产福利国产秒拍| 亚洲av无码一区二区三区观看| 最新日韩在线视频| 精品国产乱子伦| 精品国产乱码久久久久久久久| 日本免费在线观看| 欧洲成人在线视频| 8x国产一区二区三区精品推荐| 亚洲国产一区二区三区在线| 一区二区毛片| 在线观看成人动漫| 亚洲欧美一区二区久久| 国产美女www| 精品一区精品二区| 成人免费一区二区三区牛牛| 成人在线观看视频网站| 日韩大片在线观看| 日本女优爱爱视频| www.欧美.com| 精品在线视频免费观看| 91精品欧美综合在线观看最新 | 亚洲第一论坛sis| 婷婷五月综合缴情在线视频| 国产乱码精品一区二区三区av| 国产又粗又硬视频| 欧美无砖专区一中文字| 色综合888| 51精品在线观看| 久久人人爽人人爽人人片av不| 色一情一乱一乱一区91| 韩国av一区二区三区| 日韩激情小视频| 欧美日韩高清不卡| av在线电影院| 国产精品直播网红| 日韩一区二区在线免费| 一区二区三区免费播放| 国产色产综合产在线视频 | 91精品国产色综合久久不卡蜜臀| 永久免费av片在线观看全网站| 国产精品丝袜视频| 欧美国产美女| 亚洲美女性囗交| 中文字幕色av一区二区三区| 国产又色又爽又黄又免费| 俺去啦;欧美日韩| 国产乱码精品一区二区三区亚洲人| 中文字幕一区二区三区有限公司 | 日本不卡高清视频一区| 午夜在线a亚洲v天堂网2018| 欧美多人猛交狂配| 欧美色倩网站大全免费| 在线观看免费版| 51国偷自产一区二区三区| 国模一区二区三区| 精品国产一区在线| 色综合久久99| 老司机福利在线视频| 99久久自偷自偷国产精品不卡| 激情综合视频| 国内精品久久99人妻无码| 91久久国产最好的精华液| 午夜视频成人| 成人免费视频网站| 先锋影音国产一区| 欧美巨胸大乳hitomi| 日韩一区二区视频| 末成年女av片一区二区下载| 欧美一区二区三区四区在线观看地址 | av在线收看| 亚洲最大的网站| 亚洲在线观看| 秋霞欧美一区二区三区视频免费| 日韩三级高清在线| 九色porny丨首页入口在线| 日本一区二区在线视频观看| 久久国产人妖系列| 久久综合综合久久| 亚洲人午夜精品免费| 国产精品日本一区二区不卡视频| 黄色一级片在线看| 国产日韩亚洲欧美综合| 国产视频手机在线| 欧美最猛性xxxx| 亚洲色图网站| 久久久亚洲av波多野结衣| 欧美日韩久久不卡| 美女av在线免费看| 9999在线观看| www精品美女久久久tv| 国产免费黄色录像| 青青久久av北条麻妃黑人| 你懂的视频一区二区| 女女互磨互喷水高潮les呻吟| 日韩免费电影网站| 国产第一亚洲|