日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Socket套接字通信 TCP UDP详解(网络通信)

發(fā)布時間:2023/12/14 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Socket套接字通信 TCP UDP详解(网络通信) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 一 什么是套接字Socket
      • 1.Socket簡介
      • 2.Socket的域(domain)
      • 3.Socket主要類型(type)
      • 4.Socket基本工作流程
    • 二 創(chuàng)建套接字Socket
      • 1.socket函數(shù)
    • 三 綁定套接字Socket與主機網(wǎng)絡(luò)地址
      • 1.bind函數(shù)
      • 2.struct sockaddr與struct sockaddr_in
      • 3.常用填充地址信息的方法
      • 4.主機字節(jié)序與網(wǎng)絡(luò)字節(jié)序
    • 四 UDP通信的實現(xiàn)
      • 1.recvfrom函數(shù)
      • 2.sendto函數(shù)
      • 3.示例
    • 五 TCP通信的實現(xiàn)
      • 1.listen函數(shù)(server端)
      • 2.accept函數(shù)(server端)
      • 3.connect函數(shù)(client端)
      • 4.write與read函數(shù)
      • 5.send與recv函數(shù)
      • 6.示例
    • 六 套接字的緩沖區(qū)以及阻塞模式
      • 1.緩沖區(qū)
      • 2.使用write/send發(fā)送數(shù)據(jù)
      • 3.使用read/recv讀取數(shù)據(jù)
    • 七 總結(jié)套接字收發(fā)數(shù)據(jù)的過程

一 什么是套接字Socket

1.Socket簡介

所謂套接字(Socket),就是對網(wǎng)絡(luò)中不同主機上的應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點的抽象。一個套接字就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議交換數(shù)據(jù)的機制。從所處的地位來講,套接字上聯(lián)應(yīng)用進(jìn)程,下聯(lián)網(wǎng)絡(luò)協(xié)議棧,是應(yīng)用程序通過網(wǎng)絡(luò)協(xié)議進(jìn)行通信的接口,是應(yīng)用程序與網(wǎng)絡(luò)協(xié)議根進(jìn)行交互的接口 。

Socket(套接字)可以看成是兩個網(wǎng)絡(luò)應(yīng)用程序進(jìn)行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網(wǎng)絡(luò)環(huán)境中進(jìn)程間通信的API(應(yīng)用程序編程接口),也是可以被命名和尋址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進(jìn)程。通信時其中一個網(wǎng)絡(luò)應(yīng)用程序?qū)⒁獋鬏數(shù)囊欢涡畔懭胨谥鳈C的 Socket中,該 Socket通過與網(wǎng)絡(luò)接口卡(NIC)相連的傳輸介質(zhì)將這段信息送到另外一臺主機的 Socket中,使對方能夠接收到這段信息。 Socket是由IP地址和端口結(jié)合的,提供向應(yīng)用層進(jìn)程傳送數(shù)據(jù)包的機制 。

2.Socket的域(domain)

域指定套接字通信中使用的網(wǎng)絡(luò)介質(zhì)。最常見的套接字域是 AF_INET(IPv4)或者AF_INET6(IPV6),它是指 Internet 網(wǎng)絡(luò),許多 Linux 局域網(wǎng)使用的都是該網(wǎng)絡(luò),當(dāng)然,因特網(wǎng)自身用的也是它。

3.Socket主要類型(type)

  • 流套接字(SOCK_STREAM)
    流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復(fù)送,并按順序接收。流套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務(wù),原因在于其使用了傳輸控制協(xié)議,即TCP(The Transmission Control Protocol)協(xié)議 。
  • 數(shù)據(jù)報套接字(SOCK_DGRAM)
    數(shù)據(jù)報套接字提供一種無連接的服務(wù)。該服務(wù)并不能保證數(shù)據(jù)傳輸?shù)目煽啃?數(shù)據(jù)有可能在傳輸過程中丟失或出現(xiàn)數(shù)據(jù)重復(fù),且無法保證順序地接收到數(shù)據(jù)。數(shù)據(jù)報套接字使用UDP( User DatagramProtocol)協(xié)議進(jìn)行數(shù)據(jù)的傳輸。由于數(shù)據(jù)報套接字不能保證數(shù)據(jù)傳輸?shù)目煽啃?#xff0c;對于有可能出現(xiàn)的數(shù)據(jù)丟失情況,需要在程序中做相應(yīng)的處理 。
  • 原始套接字(SOCK_RAW)
    原始套接字與標(biāo)準(zhǔn)套接字(標(biāo)準(zhǔn)套接字指的是前面介紹的流套接字和數(shù)據(jù)報套接字)的區(qū)別在于:原始套接字可以讀寫內(nèi)核沒有處理的IP數(shù)據(jù)包,而流套接字只能讀取TCP協(xié)議的數(shù)據(jù),數(shù)據(jù)報套接字只能讀取UDP協(xié)議的數(shù)據(jù)。因此,如果要訪問其他協(xié)議發(fā)送的數(shù)據(jù)必須使用原始套接 。
  • 4.Socket基本工作流程

    要通過互聯(lián)網(wǎng)進(jìn)行通信,至少需要一對套接字,其中一個運行于客戶端,我們稱之為 Client Socket,另一個運行于服務(wù)器端,我們稱之為 Server Socket 。根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟 :

  • 服務(wù)器監(jiān)聽
    所謂服務(wù)器監(jiān)聽,是指服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài) 。
  • 客戶端請求
    所謂客戶端請求,是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端接字提出連接請求 。
  • 連接確認(rèn)
    所謂連接確認(rèn),是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,就會響應(yīng)客戶端套接字的請求,建立一個新的線程,并把服務(wù)器端套接字的描述發(fā)送給客戶端。一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),接收其他客戶端套接字的連接請求 。
  • 二 創(chuàng)建套接字Socket

    1.socket函數(shù)

    int socket(int domain, int type, int protocol); /* 1.函數(shù)功能:創(chuàng)建套接字 2.參數(shù):int domain:套接字的域通常為 AF_INET(IPv4)或者AF_INET6(IPV6)int type:套接字類型通常為 SOCK_STREAM、SOCK_DGRAMint protocol:0 :使用默認(rèn)協(xié)議IPPROTO_TCP:使用TCP協(xié)議IPPROTO_UDP:使用UDP協(xié)議 3.返回值:成功:返回套接字描述符失敗:-1 */

    三 綁定套接字Socket與主機網(wǎng)絡(luò)地址

    1.bind函數(shù)

    int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); /* 1.函數(shù)功能:綁定套接字Socket與主機網(wǎng)絡(luò)地址信息 2.參數(shù):int sockfd: 套接字描述符const struct sockaddr *addr:主機地址信息,下文詳解socklen_t addrlen: 參數(shù)2的長度(字節(jié)) 3.返回值:成功:0失敗:-1 */

    2.struct sockaddr與struct sockaddr_in

    //以下主要摘自LINUX手冊 typedef unsigned short int sa_family_t; /* Structure describing a generic socket address.翻譯:描述通用套接字地址的結(jié)構(gòu) */ struct sockaddr { sa_family_t sa_family;//地址族char sa_data[14];//14字節(jié),包含套接字中的目標(biāo)地址和端口信息 }/* Structure describing an Internet socket address.翻譯:描述Internet套接字地址的結(jié)構(gòu) */ struct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */in_port_t sin_port; /* port in network byte order */struct in_addr sin_addr; /* internet address */char sin_zero[8];//占位不使用,用來與struct sockaddr對齊}; /* Internet address */ struct in_addr {/*uint32_t*/ in_addr_t s_addr;/* address in network byte order地址的網(wǎng)絡(luò)字節(jié)序 */};/*sin_addr is the IP host address. The s_addr member of struct in_addr contains the host interface address in network byte order. 翻譯:sin_addr為主機IP地址。struct in_addr的s_addr成員以網(wǎng)絡(luò)字節(jié)順序包含主機接口地址*/
  • 這兩個結(jié)構(gòu)體一樣大,都是16個字節(jié),而且都有family屬性,二者是并列結(jié)構(gòu),指向sockaddr_in結(jié)構(gòu)的指針也可以指向sockaddr。不同的是:
    sockaddr結(jié)構(gòu)體中sa_data成員融合了端口與地址信息,而sockaddr_in結(jié)構(gòu)體用兩個成員sin_portsin_addr分別表示端口號和地址信息
  • sin_port和sin_addr都必須是網(wǎng)絡(luò)字節(jié)序(NBO Network byte order),一般可視化的數(shù)字都是主機字節(jié)序(HBO Host byte order),下文詳解
  • sockaddr是給操作系統(tǒng)用的。程序員應(yīng)使用sockaddr_in來表示地址,把類型、ip地址、端口填充sockaddr_in結(jié)構(gòu)體,然后強制轉(zhuǎn)換成sockaddr,作為參數(shù)傳遞給系統(tǒng)調(diào)用函數(shù)。sockaddr_in用于socket定義和賦值;sockaddr用于函數(shù)參數(shù)。
  • 示例

    int sockfd; struct sockaddr_in serverAddr; sockfd = socket(AF_INET, SOCK_STREAM, 0);/* 填充struct sockaddr_in */ bzero(&serverAddr, sizeof(serverAddr));//初始化為0狀態(tài) 主要是對成員sin_zero[8]清0 serverAddr.sin_family = AF_INET; //設(shè)置地址家族 serverAddr.sin_port = htons(SERV_PORT);//端口號1024-65535 serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); /* 強制轉(zhuǎn)換成struct sockaddr */ bind(sockfd, (struct sockaddr *) &serverAddr, sizeof(serverAddr));

    3.常用填充地址信息的方法

    //填充IP地址 serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);//0.0.0.0 等號后面可以是htonl(0)或者0 serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); inet_aton("127.0.0.1",&serverAddr.sin_addr); inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr);//填充端口 serverAddr.sin_port = htons(1234);//端口號1024-65535 serverAddr.sin_port = htons(0);//隨機端口 等號后面可以 0

    相關(guān)函數(shù):
    1. inet_addr

    in_addr_t inet_addr(const char *cp); /* 功能:點分字符串格式地址轉(zhuǎn)網(wǎng)絡(luò)格式 參數(shù):IPv4地址字符串例如"127.0.0.1" 返回值:成功:返回網(wǎng)絡(luò)字節(jié)序的地址用于賦值serverAddr.sin_addr.s_addr失敗:-1 */

    2.inet_ntoa 、inet_aton

    char *inet_ntoa (struct in_addr in) //net to ascii /* 功能:網(wǎng)絡(luò)字節(jié)序地址轉(zhuǎn)點分字符串格式地址 參數(shù):傳入通用的網(wǎng)絡(luò)字節(jié)序地址struct in_addr sin_addr 返回值:成功:返回指針指向IPv4點分字符串格式地址 例如"127.0.0.1"失敗:0 */ int inet_aton(const char *cp, struct in_addr *inp); //ascii to net /* 功能:點分字符串格式地址轉(zhuǎn)網(wǎng)絡(luò)格式地址 參數(shù):cp:IPv4點分字符串格式地址inp:網(wǎng)絡(luò)字節(jié)序地址struct in_addr sin_addr 返回值:成功:非0失敗:0 */

    4.htons、htonl

    uint16_t htons(uint16_t hostshort);//h host n net s short uint32_t htonl(uint32_t hostlong);//h host n net l long /* 功能:將主機字節(jié)序的short/long類型數(shù)據(jù)轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)序類型數(shù)據(jù) 參數(shù):short類型數(shù)據(jù)/long類型 返回值:成功:網(wǎng)絡(luò)字節(jié)序類型數(shù)據(jù)失敗:-1 */

    5.inet_ptoninet_ntop
    這兩個函數(shù)是隨IPv6出現(xiàn)的函數(shù),對于IPv4地址和IPv6地址都適用,函數(shù)中p和n分別代表表達(dá)(presentation)和數(shù)值(numeric)。地址的表達(dá)格式通常是ASCII字符串,數(shù)值格式則是存放到套接字地址結(jié)構(gòu)的二進(jìn)制值。

    int inet_pton(int family, const char *strptr, void *addrptr); //返回值:若成功則為1,若輸入不是有效的表達(dá)式則為0,若出錯則為-1 const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len); //返回值:若成功則為指向結(jié)構(gòu)的指針,若出錯則為NULL

    4.主機字節(jié)序與網(wǎng)絡(luò)字節(jié)序

    NBO : 網(wǎng)絡(luò)字節(jié)序
    HBO : 主機字節(jié)序
    LE little-endian:小端
    BE big-endian:大端

  • 網(wǎng)絡(luò)字節(jié)序和主機字節(jié)序:
    網(wǎng)絡(luò)數(shù)據(jù)流的地址規(guī)定:先發(fā)出的數(shù)據(jù)是低地址,后發(fā)出的數(shù)據(jù)是高地址。
    發(fā)送主機通常將發(fā)送緩沖區(qū)中的數(shù)據(jù)按內(nèi)存地址從低到高的順序發(fā)出,為了不使數(shù)據(jù)流亂序,接收主機也會把從網(wǎng)絡(luò)上接收的數(shù)據(jù)按內(nèi)存地址從低到高的順序保存在接收緩沖區(qū)中。
    TCP/IP協(xié)議規(guī)定:網(wǎng)絡(luò)數(shù)據(jù)流應(yīng)采用大端字節(jié)序,即低地址高字節(jié)。
  • tcp/ip規(guī)定它們的網(wǎng)絡(luò)字節(jié)序都是大端字節(jié)序。主機字節(jié)序可能是大端也可能是小端,與主機的cpu有關(guān),與操作系統(tǒng)無關(guān)考慮到與協(xié)議的一致以及與同類其它平臺產(chǎn)品的互通,在程序中發(fā)數(shù)據(jù)包時,將主機字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序,收數(shù)據(jù)包處將網(wǎng)絡(luò)字 節(jié)序轉(zhuǎn)換為主機字節(jié)序。網(wǎng)絡(luò)程序開發(fā)時 或是跨平臺開發(fā)時 應(yīng)該注意保證只用一種字節(jié)序 不然兩方的解釋不一樣就會產(chǎn)生bug。數(shù)據(jù)在傳輸?shù)倪^程中,一定有一個標(biāo)準(zhǔn)化的過程,也就是說:
    從主機a到主機b進(jìn)行通信:a的主機字節(jié)序——網(wǎng)絡(luò)字節(jié)序——b的主機字節(jié)序

  • 大端字節(jié)序和小端字節(jié)序:
    大端字節(jié)序存儲時值的高位存儲在較小的地址,值的低位存儲在較大的地址。
    小端字節(jié)序存儲時值的高位存儲在較大的地址,值的低位存儲在較小的地址。
    以0x12345678為例:
    地址:0x1000 ?0x1001? 0x1002 ?0x1003
    小端: 78 ???56 ???34 ???12
    大端: 12 ???34 ???56 ???78
  • 測試主機是大端還是小端的方法:
  • int main() {union{short s;char c[sizeof(short)];}un;un.s = 0x0102;if(sizeof(short)==2){if(un.c[0] == 1 && un.c[1] == 2)printf("Big-Endian\n");else if(un.c[0] == 2 && un.c[1] == 1)printf("Little-Endian\n");elseprintf("Unknown\n");}elseprint("sizeof(short)=%d\n",sizeof(short));exit(0); }

    四 UDP通信的實現(xiàn)

    在創(chuàng)建并綁定套接字之后,我們就可以嘗試TCP、UDP通信了。
    TCP/IP協(xié)議是一個協(xié)議簇。里面包括很多協(xié)議,UDP只是其中的一個。

    • UDP(User Datagram Protocol用戶數(shù)據(jù)報協(xié)議)是一個非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接, 當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。 在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、 計算機的能力和傳輸帶寬的限制; 在接收端,UDP把每個消息段放在隊列中,應(yīng)用程序每次從隊列中讀一個消息段。
    • UDP 是不具有可靠性的數(shù)據(jù)報協(xié)議。細(xì)微的處理它會交給上層的應(yīng)用去完成。在 UDP 的情況下,雖然可以確保發(fā)送消息的大小,卻不能保證消息一定會到達(dá)。因此,應(yīng)用有時會根據(jù)自己的需要進(jìn)行重發(fā)處理。

    1.recvfrom函數(shù)

    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen); /* 功能:接收數(shù)據(jù) 參數(shù):int sockfd:socket函數(shù)的返回值,套接字描述符void *buf:存放收到的數(shù)據(jù)size_t len:參數(shù)2的大小int flags:如果沒有數(shù)據(jù)到來 阻塞等待還是不等待 0表示阻塞 MSG_DONTWAIT 不等待struct sockaddr *src_addr:用于獲取發(fā)送方的地址信息socklen_t *addrlen:發(fā)送方地址信息長度 注意:傳的實參必須初始化 返回值:成功:返回實際收到的字節(jié)數(shù)失敗:-1 */

    2.sendto函數(shù)

    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen); /* 功能:發(fā)送數(shù)據(jù)給對端 參數(shù):int sockfd:socket函數(shù)的返回值,套接字描述符const void *buf:要發(fā)送的數(shù)據(jù)存放的地址size_t len:參數(shù)2的大小int flags:套接字緩存滿 阻塞還是不阻塞 0表示阻塞 MSG_DONTWAIT 不阻塞const struct sockaddr *dest_addr:目標(biāo)端的地址信息socklen_t *addrlen:目標(biāo)端的地址信息 返回值:成功:返回實際發(fā)送的字節(jié)數(shù)失敗:-1 */

    3.示例

    實現(xiàn)服務(wù)器端與客戶端聊天
    運行效果

    /***************************/ /* 服務(wù)器端 */ /***************************/ #include <stdio.h> #include <strings.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>int main() {char buf_data[1024] = {};/*創(chuàng)建套接字*/int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd == -1){perror("socket");exit(1);}printf("sockfd:%d\n",sockfd);/*定義網(wǎng)絡(luò)地址結(jié)構(gòu)體變量并填充*/struct sockaddr_in myselfAddr;myselfAddr.sin_family = AF_INET;myselfAddr.sin_port = htons(6666);//把短整形轉(zhuǎn)為網(wǎng)絡(luò)格式myselfAddr.sin_addr.s_addr = htonl(INADDR_ANY);//主機格式轉(zhuǎn)網(wǎng)絡(luò)格式/*套接字與主機綁定*/int ret_bind = bind(sockfd,(struct sockaddr*)&myselfAddr,sizeof(myselfAddr));if(ret_bind == -1){perror("bind");close(sockfd);exit(1);}/*緩存用于獲取對端網(wǎng)絡(luò)地址信息*/struct sockaddr_in buf_sockaddr;socklen_t buf_addrlen = sizeof(buf_sockaddr);printf("等待客戶端連接...\n");ssize_t ret_recv = recvfrom(sockfd,buf_data,sizeof(buf_data),0,(struct sockaddr*)&buf_sockaddr,&buf_addrlen);if(ret_recv == -1){perror("recvfrom");close(sockfd);exit(1);}printf("IP:%s:%s\n",inet_ntoa(buf_sockaddr.sin_addr),buf_data);pid_t pid = fork();if(pid>0){while(1){bzero(buf_data,sizeof(buf_data));gets(buf_data);ssize_t ret_send = sendto(sockfd,buf_data,strlen(buf_data)+1,0,(struct sockaddr*)&buf_sockaddr,buf_addrlen);if(ret_send == -1){perror("sendto");close(sockfd);exit(1);}printf("我:%s\n",buf_data);}}else if(pid == 0){while(1){ssize_t ret_recv = recvfrom(sockfd,buf_data,sizeof(buf_data),0,(struct sockaddr*)&buf_sockaddr,&buf_addrlen);if(ret_recv == -1){perror("recvfrom");close(sockfd);exit(1);}printf("IP:%s:%s\n",inet_ntoa(buf_sockaddr.sin_addr),buf_data);}}else{perror("fork");close(sockfd);exit(1);}return 0; }/***************************/ /* 客戶端 */ /***************************/ #include <stdio.h> #include <strings.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>int main() {char buf_data[1024] = "\0";/*創(chuàng)建套接字*/int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd == -1){perror("socket");exit(1);}printf("sockfd:%d\n",sockfd);/*輸入并配置對端網(wǎng)絡(luò)地址信息*/short port;char IP[20];printf("輸入對方IP:\n");scanf("%s",IP);getchar();printf("輸入對方端口號:\n");scanf("%hd",&port);getchar();struct sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(port);//短整型轉(zhuǎn)為網(wǎng)絡(luò)格式serverAddr.sin_addr.s_addr = inet_addr(IP);//字符串格式轉(zhuǎn)網(wǎng)絡(luò)地址格式/*緩存用于獲取對端的網(wǎng)絡(luò)地址信息*/struct sockaddr_in buf_sockaddr;socklen_t buf_addrlen = sizeof(buf_sockaddr);pid_t pid = fork();if(pid>0){while(1){/*發(fā)送信息*/bzero(buf_data,sizeof(buf_data));gets(buf_data);ssize_t ret_send = sendto(sockfd,buf_data,strlen(buf_data)+1,0,(struct sockaddr*)&serverAddr,sizeof(serverAddr));if(ret_send == -1){perror("sendto");close(sockfd);exit(1);} printf("我:%s\n",buf_data);bzero(buf_data,sizeof(buf_data));}}else if(pid == 0){/*接收信息*/while(1){bzero(buf_data,sizeof(buf_data));ssize_t ret_recv = recvfrom(sockfd,buf_data,sizeof(buf_data),0,(struct sockaddr*)&buf_sockaddr,&buf_addrlen);if(ret_recv == -1){perror("recvfrom");close(sockfd);exit(1);}printf("IP:%s:%s\n",inet_ntoa(buf_sockaddr.sin_addr),buf_data);}}else{perror("fork");close(sockfd);exit(1);}return 0; }

    五 TCP通信的實現(xiàn)

    • TCP(Transmission Control Protocol,傳輸控制協(xié)議)是面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。
    • TCP 是面向連接的、可靠的流協(xié)議。流就是指不間斷的數(shù)據(jù)結(jié)構(gòu),當(dāng)應(yīng)用程序采用 TCP 發(fā)送消息時,雖然可以保證發(fā)送的順序,但還是猶如沒有任何間隔的數(shù)據(jù)流發(fā)送給接收端。TCP 為提供可靠性傳輸,實行“順序控制”或“重發(fā)控制”機制。此外還具備“流控制(流量控制)”、“擁塞控制”、提高網(wǎng)絡(luò)利用率等眾多功能。

    1.listen函數(shù)(server端)

    • 對于服務(wù)器端程序,使用bind 函數(shù)綁定套接字后,還需要使用listen 函數(shù)讓套接字進(jìn)入被動監(jiān)聽狀態(tài),再調(diào)用accept 函數(shù),就可以隨時響應(yīng)客戶端的請求了。
    • 所謂被動監(jiān)聽,是指當(dāng)沒有客戶端請求時,套接字處于“睡眠”狀態(tài),只有當(dāng)接收到客戶端請求時,套接字才會被“喚醒”來響應(yīng)請求。
    int listen(int sockfd, int backlog); /* 功能:使套接字進(jìn)入被動監(jiān)聽狀態(tài) 參數(shù):int sockfd: 需要進(jìn)入監(jiān)聽狀態(tài)的套接字int backlog:請求隊列的最大長度 返回值:成功:0失敗:-1 */
    • 當(dāng)套接字正在處理客戶端請求時,如果有新的請求進(jìn)來,套接字是沒法處理的,只能把它放進(jìn)緩沖區(qū),待當(dāng)前請求處理完畢后,再從緩沖區(qū)中讀取出來處理。如果不斷有新的請求進(jìn)來,它們就按照先后順序在緩沖區(qū)中排隊,直到緩沖區(qū)滿。這個緩沖區(qū),就稱為 請求隊列(Request Queue)
    • 當(dāng)請求隊列滿時,就不再接收新的請求,對于 Linux,客戶端會收到 ECONNREFUSED 錯誤
    • listen只是讓套接字處于監(jiān)聽狀態(tài),并沒有接收請求。接收請求需要使用 accept函數(shù)

    2.accept函數(shù)(server端)

    • 當(dāng)套接字處于監(jiān)聽狀態(tài)時,可以通過 accept函數(shù)來接收客戶端請求。
    • listen只是讓套接字進(jìn)入監(jiān)聽狀態(tài),并沒有真正接收客戶端請求,listen后面的代碼會繼續(xù)執(zhí)行,直到遇到 accept
    • accept 會阻塞程序執(zhí)行,直到有新的請求到來。
    int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); /* 功能:處理來自客戶端的連接請求 參數(shù):int sockfd: 處于監(jiān)聽狀態(tài)的套接字(服務(wù)器綁定的套接字也叫監(jiān)聽套接字)struct sockaddr *addr:用于獲取對端的地址信息socklen_t *addrlen:參數(shù)2的大小 返回值:成功:返回一個新的套接字(這個套接字與當(dāng)前發(fā)起申請的客戶端連接)失敗:-1 */

    3.connect函數(shù)(client端)

    int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); /* 功能:客戶端發(fā)起連接服務(wù)器請求 參數(shù):int sockfd:client套接字const struct sockaddr *addr:對端(服務(wù)器)的地址信息socklen_t *addrlen:參數(shù)2的大小 返回值:成功:0失敗:-1 */

    4.write與read函數(shù)

    建立好了 TCP 連接之后,我們就可以把得到的 sockfd 當(dāng)作文件描述符來使用。

    #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count);

    需要注意 read 函數(shù)的返回值:

    • retval > 0 :實際讀到的字節(jié)數(shù)
    • retval = 0 :
      ?????普通文件 — 到達(dá)文件末尾
      ?????管道文件 — 管道寫端關(guān)閉
      ?????套接字文件 — 對端關(guān)閉,網(wǎng)絡(luò)斷開
    • retval < 0 :出錯

    5.send與recv函數(shù)

    recv 和 send 函數(shù)提供了和 read 和 write 差不多的功能。前3個參數(shù)同read、write,第4
    個參數(shù)用來控制讀寫操作。

    #include <sys/types.h> #include <sys/socket.h> ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags); /* 參數(shù) int flags:0:等同于writeMSG_DONTROUTE:告訴 IP 目的主機在本地網(wǎng)絡(luò)上面,沒有必要查找表,這個標(biāo)志一般用網(wǎng)絡(luò)診斷和路由程序里面MSG_OOB:表示可以接收和發(fā)送帶外的數(shù)據(jù)MSG_DONTWAIT:僅本操作非阻塞(執(zhí)行完恢復(fù)阻塞模式) */ ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); /* 參數(shù) int flags:0:等同于readMSG_PEEK:表示只是從系統(tǒng)緩沖區(qū)中讀取內(nèi)容,而不清除系統(tǒng)緩沖區(qū)的內(nèi)容MSG_OOB:表示可以接收和發(fā)送帶外的數(shù)據(jù)MSG_DONTWAIT:僅本操作非阻塞(執(zhí)行完恢復(fù)阻塞模式)MSG_WAITALL:表示等到所有的信息到達(dá)時才返回。使用這個標(biāo)志的時候 recv 會一直阻塞,直到指定的條件滿足,或者是發(fā)生了錯誤:1.當(dāng)讀到了指定的字節(jié)時,函數(shù)正常返回。返回值等于 len2.當(dāng)讀到了文件的結(jié)尾時,函數(shù)正常返回。返回值小于 len3.當(dāng)操作發(fā)生錯誤時,返回 -1,且設(shè)置錯誤為相應(yīng)的錯誤號 (errno) */

    6.示例

    實現(xiàn)客戶端與服務(wù)器端的對話,服務(wù)器端運行時命令行傳參端口號,客戶端運行時命令行傳參服務(wù)器的IP和端口號
    關(guān)于程序中用到的IO多路復(fù)用select函數(shù),參考select函數(shù)詳解

    運行效果

    /***************************/ /* 服務(wù)器端 */ /***************************/ #include <stdio.h> #include <strings.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/select.h>void error_Handling(char* func,int retval); void error_of_read(int retval,char* IP); void sigFun(int sig); int count = 0;int main(int argc,char* argv[]) {if(argc != 2){printf("%s Port",argv[0]);exit(1);}signal(SIGCHLD,sigFun);char buf_data[1024] = {};/*創(chuàng)建套接字——監(jiān)聽套接字*/int listenfd = socket(AF_INET,SOCK_STREAM,0);error_Handling("socket",listenfd);/*綁定監(jiān)聽套接字與主機網(wǎng)絡(luò)地址信息*/int on = 1;int ret_set = setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));//地址復(fù)用error_Handling("setsockopt",ret_set);struct sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(atoi(argv[1]));serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);int ret_bind = bind(listenfd,(struct sockaddr*)&serverAddr,sizeof(serverAddr));error_Handling("bind",ret_bind);/*設(shè)置監(jiān)聽隊列的大小*/int ret_listen = listen(listenfd,10);error_Handling("listen",ret_listen);/*監(jiān)聽等待連接*/struct sockaddr_in buf_addr;socklen_t buf_addrlen = sizeof(buf_addr);while(1){printf("服務(wù)器持續(xù)監(jiān)聽中\(zhòng)n");printf("連接服務(wù)器的客戶端數(shù)量:%d\n",count++);int newconfd = accept(listenfd,(struct sockaddr*)&buf_addr,&buf_addrlen);//返回分機套接字error_Handling("accept",newconfd);pid_t pid = fork();error_Handling("fork",pid);if(pid == 0){printf("FATHERPID:%d CHILDPID:%d\n",getppid(),getpid());printf("與IP:| %s |建立連接\n",inet_ntoa(buf_addr.sin_addr));while(1){/*在這里做一個IO多路復(fù)用*/fd_set readfds;FD_ZERO(&readfds);FD_SET(0,&readfds);FD_SET(newconfd,&readfds);int ret_select = select(newconfd+1,&readfds,NULL,NULL,NULL);error_Handling("select",ret_select);/*select返回表示有描述符就緒*/if(FD_ISSET(0,&readfds))//檢查標(biāo)準(zhǔn)輸入是否被置位{ssize_t ret_read = read(0,&buf_data,sizeof(buf_data));error_Handling("read",ret_read);ssize_t ret_write = write(newconfd,&buf_data,sizeof(buf_data));error_Handling("write",ret_write);printf("我:%s\n",buf_data);bzero(&buf_data,sizeof(buf_data));}if(FD_ISSET(newconfd,&readfds))//檢查套接字是否被置位{ssize_t ret_read = read(newconfd,&buf_data,sizeof(buf_data));error_of_read(ret_read,inet_ntoa(buf_addr.sin_addr));printf("%s:%s\n",inet_ntoa(buf_addr.sin_addr),buf_data);bzero(&buf_data,sizeof(buf_data));}}}}/*關(guān)閉套接字*///close(newconfd);close(listenfd);return 0; } void error_Handling(char* func,int retval) {if(retval == -1){perror(func);exit(1);} } void error_of_read(int retval,char* IP) {if(retval<0){perror("read");exit(1);}if(retval == 0){perror("read");printf("%s 已斷開連接,此進(jìn)程結(jié)束\n",IP);exit(1);} } void sigFun(int sig) {wait(NULL);count--;printf("有子進(jìn)程退出已經(jīng)收尸\n"); }/***************************/ /* 客戶端 */ /***************************/ #include <stdio.h> #include <strings.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/select.h>void error_Handling(char* func,int retval);int main(int argc,char* argv[]) {if(argc != 3){printf("%s IP Port\n",argv[0]);exit(1);}char buf_data[1024] = {};/*創(chuàng)建套接字*/int sockfd = socket(AF_INET,SOCK_STREAM,0);error_Handling("socket",sockfd);/*連接*/struct sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(atoi(argv[2]));serverAddr.sin_addr.s_addr = inet_addr(argv[1]);int ret_connect = connect(sockfd,(struct sockaddr*)&serverAddr,sizeof(serverAddr));error_Handling("connect",ret_connect);/*發(fā)送數(shù)據(jù)*/while(1){/*在這里做一個IO多路復(fù)用*/fd_set readfds;FD_ZERO(&readfds);FD_SET(0,&readfds);FD_SET(sockfd,&readfds);int ret_select = select(sockfd+1,&readfds,NULL,NULL,NULL);error_Handling("select",ret_select);/*select返回表示有描述符就緒*/if(FD_ISSET(0,&readfds))//檢查標(biāo)準(zhǔn)輸入是否被置位{ssize_t ret_read = read(0,&buf_data,sizeof(buf_data));error_Handling("read",ret_read);ssize_t ret_write = write(sockfd,&buf_data,sizeof(buf_data));error_Handling("write",ret_write);printf("我:%s\n",buf_data);bzero(&buf_data,sizeof(buf_data));}if(FD_ISSET(sockfd,&readfds))//檢查套接字是否被置位{ssize_t ret_read = read(sockfd,&buf_data,sizeof(buf_data));error_Handling("read",ret_read);printf("%s:%s\n",inet_ntoa(serverAddr.sin_addr),buf_data);bzero(&buf_data,sizeof(buf_data));}}/*關(guān)閉套接字*/close(sockfd);return 0; }void error_Handling(char* func,int retval) {if(retval == -1){perror(func);exit(1);} }

    六 套接字的緩沖區(qū)以及阻塞模式


    參考socket套接字及緩沖區(qū)詳解

    1.緩沖區(qū)

    • 每個 socket 被創(chuàng)建后,都會分配兩個緩沖區(qū),輸入緩沖區(qū)輸出緩沖區(qū)
    • write()/send()/send to() 函數(shù)并不立即向網(wǎng)絡(luò)中傳輸數(shù)據(jù),而是先將數(shù)據(jù)寫入緩沖區(qū)中,再由TCP協(xié)議將數(shù)據(jù)從緩沖區(qū)發(fā)送到目標(biāo)機器。一旦將數(shù)據(jù)寫入到緩沖區(qū),函數(shù)就可以成功返回,不管它們有沒有到達(dá)目標(biāo)機器,也不管它們何時被發(fā)送到網(wǎng)絡(luò),這些都是TCP協(xié)議負(fù)責(zé)的事情。
    • read()/recv()/recefrom() 函數(shù)也是如此,也從輸入緩沖區(qū)中讀取數(shù)據(jù),而不是直接從網(wǎng)絡(luò)中讀取。
    • 每個套接字的I/O緩沖區(qū)單獨存在。
    • 即使一端關(guān)閉套接字,也會繼續(xù)傳送這端套接字輸出緩沖區(qū)中遺留的數(shù)據(jù)。
    • 如果一端關(guān)閉套接字,這端將丟失輸入緩沖區(qū)中的數(shù)據(jù)。
    • 默認(rèn)情況下,套接字為阻塞模式
    //把套接字設(shè)置成非阻塞模式 fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); //非阻塞模式的使用并不普遍,因為非阻塞模式會浪費大量的CPU資源

    2.使用write/send發(fā)送數(shù)據(jù)

    阻塞模式下:

    • 首先會檢查輸出緩沖區(qū),如果緩沖區(qū)的可用空間長度小于要發(fā)送的數(shù)據(jù),那么 write()/send() 會被阻塞(暫停執(zhí)行),直到緩沖區(qū)中的數(shù)據(jù)被發(fā)送到目標(biāo)機器,騰出足夠的空間,才喚醒 write()/send() 函數(shù)繼續(xù)寫入數(shù)據(jù);
    • 如果要寫入的數(shù)據(jù)大于緩沖區(qū)的最大長度,那么將分批寫入。直到所有數(shù)據(jù)被寫入緩沖區(qū) write()/send() 才能返回。
    • 如果TCP協(xié)議正在向網(wǎng)絡(luò)發(fā)送數(shù)據(jù),那么輸出緩沖區(qū)會被鎖定,不允許寫入,write()/send() 也會被阻塞,直到數(shù)據(jù)發(fā)送完畢緩沖區(qū)解鎖,write()/send() 才會被喚醒。
    • send()函數(shù)默認(rèn)情況下會使用Nagle算法。Nagle算法通過將未確認(rèn)的數(shù)據(jù)存入緩沖區(qū)直到積攢到一定數(shù)量一起發(fā)送的方法,來降低主機發(fā)送零碎小數(shù)據(jù)包的數(shù)目。所以假設(shè)send()函數(shù)發(fā)送數(shù)據(jù)過快的話,該算法會將一些數(shù)據(jù)打包后統(tǒng)一發(fā)出去。通過setsockopt()的TCP_NODELAY選項來禁用Nagle算法。

    非阻塞模式下:

    • write/send不做等待立即返回;
    • write()/send()函數(shù)的過程僅僅是將數(shù)據(jù)拷貝到協(xié)議棧的緩沖區(qū)而已,如果緩沖區(qū)可用空間不夠,則盡可能拷貝,返回成功拷貝的大小;
    • 如果緩存區(qū)可用空間為0,則返回-1,同時設(shè)置errno為EWOULDBLOCK。

    3.使用read/recv讀取數(shù)據(jù)

    read/recv函數(shù)返回其實際copy的字節(jié)數(shù),如果recv在copy時出錯,那么它返回SOCKET_ERROR;如果recv函數(shù)在等待協(xié)議接收數(shù)據(jù)時網(wǎng)絡(luò)中斷了,那么它返回0。
    阻塞模式下:

    • 首先會檢查輸入緩沖區(qū),如果緩沖區(qū)中有數(shù)據(jù),那么就讀取,否則函數(shù)會被阻塞,直到網(wǎng)絡(luò)上有數(shù)據(jù)到來;(如果數(shù)據(jù)正在從輸入緩沖區(qū)拷貝到用戶空間,read/recv也會被阻塞)
    • 如果要讀取的數(shù)據(jù)長度小于緩沖區(qū)中的數(shù)據(jù)長度,那么就不能一次性將緩沖區(qū)中的所有數(shù)據(jù)讀出,剩余數(shù)據(jù)將不斷積壓,直到輸入緩沖區(qū)滿,協(xié)議棧不能再接收數(shù)據(jù)。

    非阻塞模式下:

    • write/send不做等待立即返回;
    • 成功返回實際讀到的字節(jié)數(shù);
    • 如果輸入緩沖區(qū)中沒有數(shù)據(jù),返回錯誤EWOULDBLOCK。

    七 總結(jié)套接字收發(fā)數(shù)據(jù)的過程

    TCP發(fā)送數(shù)據(jù)的過程:首先,TCP是有鏈接的可靠傳輸協(xié)議,所謂可靠也就是說保證客戶端發(fā)送的數(shù)據(jù)服務(wù)端都能夠收到,并且是按序收到。

  • 數(shù)據(jù)首先由應(yīng)用程序緩沖區(qū)復(fù)制到發(fā)送端的輸出緩沖區(qū)(位于內(nèi)核),注意這個過程是用類似write功能的函數(shù)完成的。有的人通常看到write成功就以為數(shù)據(jù)發(fā)送到了對端主機,其實這是錯誤的,write成功僅僅表示數(shù)據(jù)成功的由應(yīng)用進(jìn)程緩沖區(qū)復(fù)制到了輸出緩沖區(qū)。

  • 然后內(nèi)核協(xié)議棧將輸出緩沖區(qū)中的數(shù)據(jù)發(fā)送到對端主機,注意這個過程不受應(yīng)用程序控制,而是發(fā)送端內(nèi)核協(xié)議棧完成,其中包括使用滑動窗口、擁塞控制等功能。

  • 數(shù)據(jù)到達(dá)接收端主機的輸入緩沖區(qū),注意這個接收過程也不受應(yīng)用程序控制,而是由接收端內(nèi)核協(xié)議棧完成,其中包括發(fā)送ack確認(rèn)等。

  • 數(shù)據(jù)由套接字接收緩沖區(qū)復(fù)制到接收端應(yīng)用程序緩沖區(qū),注意這個過程是由類似read等函數(shù)來完成。

  • 思考:如果TCP服務(wù)端一直sleep,客戶端一直發(fā)送數(shù)據(jù),會出現(xiàn)什么情況?

  • 阻塞模式下:
    如果服務(wù)端一直sleep不接收數(shù)據(jù),而客戶端一直write,也就是只能執(zhí)行上述過程中的前三步,這樣最終結(jié)果肯定是接收端的輸入緩沖區(qū)和發(fā)送端的輸出緩沖區(qū)都被填滿,這樣write就無法繼續(xù)將數(shù)據(jù)從應(yīng)用程序復(fù)制到發(fā)送端的輸出緩沖區(qū)了,從而使進(jìn)程進(jìn)入睡眠。
  • 非阻塞情況下:
    服務(wù)端一直sleep,隨著客戶端write,接收端的輸入緩沖區(qū)和發(fā)送端的輸出緩沖區(qū)會被填滿。當(dāng)發(fā)送端的輸出緩沖區(qū)的可用空間為0時,write立即返回-1,并將errno置為EWOULDBLOCK。
  • “華清遠(yuǎn)見” http://www.hqyj.com/學(xué)習(xí)更多編程知識

    總結(jié)

    以上是生活随笔為你收集整理的Socket套接字通信 TCP UDP详解(网络通信)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    女人魂免费观看 | 四虎国产永久在线精品 | 中午字幕在线 | 国产一区二区高清不卡 | 激情欧美日韩一区二区 | 成年人免费在线看 | 美腿丝袜av | 夜夜视频 | 超碰国产在线播放 | 91激情小视频| 丁香九月激情 | 久久天天躁狠狠躁夜夜不卡公司 | 91av网址| 超碰成人av | 久久免费看视频 | 亚洲国产资源 | 色片网站在线观看 | 国产韩国精品一区二区三区 | 麻豆视频国产 | 久久免费看av | 在线视频 一区二区 | 精品国产免费一区二区三区五区 | 日韩一区二区三区高清在线观看 | v片在线看 | 91大神电影 | 国产原创av在线 | 日韩在线视频网 | 日女人电影 | 久草在线免费在线观看 | 国产精品美女久久久久久久久久久 | 免费在线观看中文字幕 | 亚洲在线网址 | 国精产品999国精产品视频 | 精品视频免费久久久看 | 亚洲天堂网视频 | 国内久久久久久 | 久久综合九色九九 | 99精品视频在线观看 | 美女免费网站 | 97在线观看免费 | 欧美有色 | 欧美美女视频在线观看 | 久久久精品国产免费观看同学 | 日日天天av| 在线观看香蕉视频 | 91成年人在线观看 | 日韩国产欧美在线视频 | 就要干b| 亚洲欧美成人网 | 免费观看一级成人毛片 | 999久久久久久 | av激情五月 | 日韩试看 | 国产精品九九九九九 | 色99在线 | 日韩日韩日韩日韩 | 一区二区三区动漫 | 成人精品一区二区三区中文字幕 | 国产精品欧美久久久久久 | 亚洲四虎影院 | 久久狠狠一本精品综合网 | 国产视频在线观看免费 | www.国产精品 | 亚洲精品午夜久久久久久久久久久 | 在线免费观看国产精品 | 9ⅰ精品久久久久久久久中文字幕 | 亚洲电影成人 | 国产成人久久77777精品 | 亚洲一区欧美精品 | 久久精品波多野结衣 | 精品国产伦一区二区三区观看说明 | av中文在线观看 | 亚洲精品乱码久久久久久按摩 | 久久综合色综合88 | 人人爽人人爽 | 乱男乱女www7788 | 中文字幕一区二区三区四区视频 | 91 中文字幕 | 国产黄色片免费在线观看 | 天天爽天天爽夜夜爽 | 五月天免费网站 | 中文字幕在线观看第三页 | 中文字幕 国产视频 | 青青草久草在线 | 伊人官网 | 免费网站黄 | 伊人婷婷网 | 国际精品网 | 日韩激情视频在线 | 久久精品激情 | 欧洲亚洲精品 | 日韩欧美网址 | 一区二区三区电影大全 | 久久99婷婷| 亚洲精品色视频 | 99热超碰 | 91成版人在线观看入口 | 99情趣网视频 | 麻豆视频国产 | 久久综合久久88 | 久二影院 | 国产综合在线视频 | 国产成人精品一区二区在线 | 国产片免费在线观看视频 | 久久精品草 | 9ⅰ精品久久久久久久久中文字幕 | 欧美日韩免费视频 | 欧美精品久久久 | 最近2019年日本中文免费字幕 | 国产精品专区h在线观看 | 麻豆视频在线 | 婷婷中文字幕综合 | 国产一级免费电影 | 国产永久免费观看 | 国产一区在线免费观看 | 日韩高清在线不卡 | 日韩国产欧美在线视频 | 精品二区久久 | 91麻豆精品国产91久久久更新时间 | 日韩特黄一级欧美毛片特黄 | 色综合天天天天做夜夜夜夜做 | 免费a级观看| 热久久免费视频精品 | 日本女人的性生活视频 | 国产99久久久国产精品免费看 | 日韩a在线播放 | 啪啪激情网 | 999成人| 久久久久久网 | 久久精品国亚洲 | 欧美一区二区三区免费观看 | 免费看国产曰批40分钟 | 黄色性av | 国产一级一片免费播放放a 一区二区三区国产欧美 | 狠狠干中文字幕 | 日韩精品免费一区二区在线观看 | 亚洲综合在 | 欧美一区二区三区不卡 | 日韩在线免费 | 日韩精品资源 | 日日夜夜爱 | 欧美日韩中文字幕综合视频 | 最新av免费 | 免费观看不卡av | 国内偷拍精品视频 | www.av中文字幕.com | 成人在线视频免费观看 | 国产免费又粗又猛又爽 | 久草在线免费电影 | 日韩欧美在线观看一区二区 | 91av亚洲 | 天堂在线视频免费观看 | 中文电影网 | 欧美一级日韩免费不卡 | 欧美一级免费 | 超碰在线1| 久久视频这里有久久精品视频11 | 欧亚日韩精品一区二区在线 | ,午夜性刺激免费看视频 | 最近高清中文字幕在线国语5 | 精品一二 | 婷婷婷国产在线视频 | 久久99精品久久久久久三级 | 国产打女人屁股调教97 | 96视频在线| 国产成人精品区 | 亚洲欧美日韩一区二区三区在线观看 | 国产无遮挡又黄又爽馒头漫画 | 日本韩国精品一区二区在线观看 | 精品久久片 | 免费看国产一级片 | 中文av在线播放 | 人人插人人看 | 午夜视频亚洲 | 天天射天| 免费看一及片 | 黄网站色视频 | 欧美国产精品久久久久久免费 | 日韩av中文字幕在线免费观看 | 久久成人高清视频 | 欧美国产91| 激情久久久久久久久久久久久久久久 | 欧美成人理伦片 | 麻豆传媒视频在线免费观看 | 91丨九色丨丝袜 | 久久亚洲二区 | 精品久久久久久国产91 | 国产福利电影网址 | 99免费| 99精品美女 | 亚洲自拍av在线 | 在线免费观看视频一区二区三区 | 亚洲免费av电影 | 97在线影院 | 96视频免费在线观看 | 婷婷深爱网 | 91成人网在线播放 | 国产精品一区二区 91 | 正在播放国产精品 | 综合久久久久久 | 日本爽妇网 | 九热精品| 在线观看深夜视频 | 激情网综合 | 国产第一页在线播放 | av在线播放国产 | 五月婷社区 | 91精品国自产在线观看 | 免费人人干 | 欧美日韩在线视频免费 | 丁香久久 | 国产一线在线 | 成年人免费av | 狠狠做深爱婷婷综合一区 | 亚洲精品一区二区精华 | 丁香综合激情 | 国产成人不卡 | 99久久日韩精品免费热麻豆美女 | 91视频在线自拍 | 久久露脸国产精品 | 日日噜噜噜噜夜夜爽亚洲精品 | 欧美日韩免费观看一区=区三区 | 日韩精品一区二区三区高清免费 | 91精品国产成 | 日韩理论在线播放 | 国产另类av | 射射色 | 国产毛片久久久 | 色婷婷狠狠五月综合天色拍 | 国产成人精品一区二三区 | 国产精品99久久久久久小说 | 在线免费国产 | 成人av一区二区三区 | 综合色综合 | 在线观看国产成人av片 | 久久人人97超碰精品888 | 国产精品久久片 | 免费在线成人av | 天堂在线一区 | 狠狠操电影网 | 日韩欧美在线视频一区二区 | 国产精品1区2区 | 国产女v资源在线观看 | 日韩色中色| 欧美激情第八页 | 操老逼免费视频 | 国产xxxx做受性欧美88 | 国产精品丝袜在线 | aaa日本高清在线播放免费观看 | 伊人日日干 | 在线之家免费在线观看电影 | 久草久草在线观看 | 久久精品一区二区三区中文字幕 | 国产午夜一区二区 | 91在线看黄| 免费观看av网站 | 亚洲精品久| 欧美国产日韩一区 | 91日韩免费 | 欧美精品生活片 | 精品久久国产精品 | 免费亚洲成人 | 国产精品久久久久久吹潮天美传媒 | 中文字幕xxxx | 午夜精品视频一区二区三区在线看 | 精品在线观看一区二区 | 狠狠狠综合 | 亚洲夜夜综合 | 中文字幕 第二区 | 国产a国产a国产a | av电影不卡在线 | 91久久精品一区 | 中文字幕在线观看不卡 | 毛片视频电影 | 国产在线观看av | 日韩在线字幕 | www.狠狠操.com | 国产中文字幕在线看 | 91精品国产综合久久婷婷香蕉 | japanesexxxhd奶水 91在线精品一区二区 | 久久精品女人毛片国产 | 97色免费视频 | 精品一区二区三区久久久 | 欧美91av| 亚洲午夜av久久乱码 | 在线中文字幕一区二区 | 亚洲午夜精品一区二区三区电影院 | 天天插天天狠 | 亚洲在线日韩 | 一级理论片在线观看 | 精品国产成人在线影院 | 激情五月色播五月 | 亚洲激情p | 香蕉久久国产 | 久久在线免费观看视频 | 久久成人精品电影 | 麻花豆传媒一二三产区 | 中文字幕在线免费97 | av免费看网站| 免费观看黄 | 综合色天天| 丁香五香天综合情 | 久久夜色精品国产欧美乱极品 | 亚洲黄色免费电影 | 狠狠躁18三区二区一区ai明星 | 午夜久久久久久久久久久 | 国产一级片毛片 | 精品免费一区二区三区 | www.夜夜爽| 久久人人爽人人爽人人片 | 日韩丝袜视频 | 国内精品一区二区 | 久久精品久久99精品久久 | 91在线麻豆| 在线看片a | 久久久电影网站 | 国产夫妻av在线 | 色婷婷激情四射 | 色九九在线 | 日韩av电影网站在线观看 | 五月婷婷一区二区三区 | 久久国产品 | 国产 在线观看 | 国产精品女同一区二区三区久久夜 | 色橹橹欧美在线观看视频高清 | 伊人天堂久久 | 中文字幕免费高清在线 | 欧美日韩中文字幕在线视频 | 天天视频色版 | 日韩中文字幕网站 | 久久这里只有精品9 | 在线观看视频一区二区三区 | 精品一区电影国产 | 国精产品999国精产 久久久久 | 国产精品久久久久久久久久久久午 | 欧美老女人xx | 超级碰碰碰免费视频 | 99色在线观看视频 | 91av免费看 | 丁香九月激情综合 | 九九久久久久久久久激情 | 久久精品中文视频 | 久久草草影视免费网 | 中国一级特黄毛片大片久久 | 999久久久免费精品国产 | 国产精品手机在线 | 在线a视频 | 日本精品va在线观看 | 日本福利视频在线 | 免费下载高清毛片 | 免费a级毛片在线看 | 成人动态视频 | 国产女人免费看a级丨片 | 超碰国产97| 欧美另类z0zx | 久久久久久久久久久久影院 | 免费av在| 国产一级电影免费观看 | 色婷婷电影网 | 天天操欧美 | 女人18片| 91视频免费看 | 国产精品系列在线观看 | 99这里都是精品 | 中文字幕第一页在线 | 国产一级免费观看视频 | 麻豆影视在线播放 | 久久久免费视频播放 | 超碰在线观看97 | 亚洲在线网址 | 极品嫩模被强到高潮呻吟91 | 国产精品久久二区 | 欧美一级欧美一级 | 亚洲九九九在线观看 | 成人午夜精品福利免费 | 国产精品网红直播 | 91免费看黄色 | 超碰在线98| 99精品久久久久久久 | 天天激情天天干 | 国产丝袜一区二区三区 | 久久成人视屏 | 激情综合电影网 | 国产美女网站在线观看 | 亚洲成人av在线电影 | 日本精品视频在线观看 | 玖玖在线视频观看 | 国产成人精品三级 | 日韩美女免费线视频 | av成人免费在线观看 | 精品国偷自产国产一区 | 狠狠色狠狠色综合日日92 | 99色亚洲| 欧亚日韩精品一区二区在线 | 99精品视频免费在线观看 | 日韩在线三级 | 国产久草在线 | 狠狠色免费 | 国产福利精品视频 | 国产色视频一区二区三区qq号 | 日韩av高清| 国产高清99 | 狠狠的干| 国产专区免费 | 成人蜜桃网| 国产精品1024| 婷婷资源站 | 久久综合偷偷噜噜噜色 | 欧美成人理伦片 | 国产成人一区二区三区久久精品 | 精品视频免费 | 黄色三级av | 丝袜美腿在线播放 | 97香蕉超级碰碰久久免费软件 | 一区二区三区手机在线观看 | 国内久久 | 日本性高潮视频 | 五月婷在线视频 | 亚洲综合激情 | av福利超碰网站 | 国产精品ssss在线亚洲 | 99资源网| 久草在线视频在线观看 | 91香蕉国产 | 亚洲va天堂va欧美ⅴa在线 | 久色小说 | 超碰97久久 | 国产精品成人自拍 | 国产黄色片免费在线观看 | 亚洲精品久久久久999中文字幕 | 99精品视频播放 | 欧美久久久久久 | 91九色视频观看 | 91精品欧美 | 免费日韩一区二区 | 丁香午夜 | 国产无限资源在线观看 | www.超碰97.com | 欧美精品做受xxx性少妇 | 2023亚洲精品国偷拍自产在线 | 色综合天天在线 | 黄色成人av | 国产麻豆精品在线观看 | 久福利| 久久国语露脸国产精品电影 | 欧美视频二区 | 久久视频在线免费观看 | 黄色电影小说 | 在线观看色视频 | 成人久久久精品国产乱码一区二区 | 91免费版在线观看 | 国产高清精 | 91麻豆精品国产91久久久久久久久 | 五月开心网 | 人人插人人艹 | 九九九热精品 | 久久男人视频 | 中文字幕中文字幕 | 激情欧美丁香 | 麻豆视频免费网站 | 久久精品久久久久 | 国内精品久久久久久久 | 黄在线免费观看 | 久久99中文字幕 | 四虎www.| 美女网站在线免费观看 | 亚洲精品88欧美一区二区 | 在线免费av观看 | 最新av电影网址 | 亚洲精品综合一区二区 | 中文字幕在线观看国产 | 91视频高清 | 色婷婷天天干 | 日本黄色免费在线 | 五月的婷婷 | 九九热久久久 | 亚洲成人av电影在线 | 天天综合网久久综合网 | 色婷婷综合久久久 | 在线观看视频你懂的 | 911av视频| 久久久精品国产免费观看一区二区 | 黄色网在线播放 | 丝袜网站在线观看 | 国产一级视频在线观看 | 日韩午夜一级片 | 中文字幕久久精品一区 | 国产一区在线不卡 | 一区二区三区视频网站 | 夜夜骑日日 | 久久久 激情 | 天天色中文 | 国产精品高清在线 | 最新av免费在线 | 国产一二三四在线观看视频 | 超碰97在线人人 | 日韩乱码中文字幕 | 日本精品中文字幕在线观看 | 缴情综合网五月天 | 精品影院一区二区久久久 | 久久久精品在线观看 | 欧美成年人在线观看 | 午夜日b视频 | 亚洲男男gaygayxxxgv | 久久超碰免费 | 操天天操 | 中文有码在线 | 四虎影视国产精品免费久久 | 久久久久欧美精品999 | 色婷婷综合久色 | 欧美久草在线 | 天天操天天爽天天干 | 精品uu | 九九免费观看视频 | 亚洲人成在线观看 | 欧美日韩首页 | 亚洲视频网站在线观看 | 99视频在线观看一区三区 | 国产一级做a爱片久久毛片a | 久久成人人人人精品欧 | 五月天欧美精品 | 欧美乱码精品一区 | 日韩在线免费电影 | 日韩免费一级a毛片在线播放一级 | 国产不卡毛片 | 欧美一区在线看 | 亚洲欧美日韩一二三区 | 国产精品久久久视频 | 成人黄色小说网 | 久久婷综合 | 亚洲欧美激情精品一区二区 | 亚洲激情网站免费观看 | 久久精品视频国产 | www.婷婷com| 深夜免费福利在线 | 久久久精品 一区二区三区 国产99视频在线观看 | 亚洲国产成人在线观看 | 亚洲 欧美日韩 国产 中文 | av高清在线观看 | 天天av综合网 | 日本久久中文 | 亚洲欧美乱综合图片区小说区 | 91高清一区 | 国产精品成人久久久 | 国产区精品在线 | 久久人人爽av | 成人久久18免费网站麻豆 | 日韩欧美视频一区 | а天堂中文最新一区二区三区 | 国产视频一区二区在线观看 | 国产精品电影一区二区 | 精品欧美小视频在线观看 | 亚洲粉嫩av | 天堂在线一区二区三区 | 亚州免费视频 | 国产成人精品一区二区在线观看 | 亚洲成av人影院 | 色com网| 麻豆精品在线 | 亚洲国产中文在线 | 欧美国产日韩一区二区三区 | 国产精品九九久久久久久久 | 久视频在线播放 | 国产九九在线 | 在线视频免费观看 | 日日躁夜夜躁xxxxaaaa | 日韩精品在线视频 | 久久综合九色综合97婷婷女人 | 91黄色免费看 | 亚洲视频在线观看网站 | 伊人视频 | 久久激情影院 | 日韩欧美国产免费播放 | 在线观看91视频 | 91精品一区二区三区蜜臀 | 久久久这里有精品 | 久久99精品波多结衣一区 | 在线观看黄色 | 欧美色图30p | 97成人免费视频 | 免费在线观看av网址 | 成人免费91| 玖玖综合网 | 欧美一区二视频在线免费观看 | 日本美女xx | 天天爱天天射天天干天天 | 在线观看自拍 | 伊人久久影视 | av在线播放观看 | 欧美日韩后 | www.日日操.com| 五月激情丁香婷婷 | 成人午夜性影院 | 亚洲精品中文字幕视频 | 国产美女视频免费 | 欧美少妇bbwhd | 91一区啪爱嗯打偷拍欧美 | 81精品国产乱码久久久久久 | 国产精品一区二区三区久久久 | 精品国产1区2区3区 国产欧美精品在线观看 | 激情网五月婷婷 | 狠狠干美女 | 成人aⅴ视频 | 国产99久久99热这里精品5 | 国产又粗又猛又黄又爽 | 国产成人一区二区精品非洲 | www日| 亚洲精品乱码久久久久久按摩 | 日本三级不卡视频 | 成人免费共享视频 | 久久精品视频在线播放 | 亚洲视频在线观看免费 | 成人免费视频视频在线观看 免费 | 黄在线 | 97福利社| 97超碰色 | 久精品视频 | 九九九视频在线 | www.久久视频 | 丁香av在线 | 久久综合狠狠综合 | 免费看污黄网站 | 国产福利一区在线观看 | 午夜性色 | 超碰在线免费福利 | 国产高清黄色 | 日韩免费电影在线观看 | 成人欧美一区二区三区黑人麻豆 | 日韩伦理片一区二区三区 | 精品黄色在线 | 亚洲视频 一区 | 99视频精品全国免费 | 久久久久久伊人 | 欧美日韩精品网站 | 精品视频网站 | 午夜精品一区二区三区视频免费看 | 国产69精品久久app免费版 | 亚洲成人免费在线 | 天天综合网 天天 | 成人免费观看电影 | 麻豆久久一区 | 波多野结衣视频在线 | 天天操天天干天天玩 | 久久国产精品精品国产色婷婷 | 国产不卡免费视频 | 国产一区二区三区免费视频 | 亚洲精品在线电影 | 99久久婷婷国产综合亚洲 | 999久久国产 | 天天操偷偷干 | 99中文视频在线 | www.色午夜.com | 草久在线 | 中文字幕在线高清 | 欧美午夜理伦三级在线观看 | 麻豆影音先锋 | 欧美另类一二三四区 | 超碰人人99 | 五月天激情视频在线观看 | 日韩欧美视频在线免费观看 | 国产91影院 | 亚洲综合一区二区精品导航 | 欧洲精品码一区二区三区免费看 | 日韩在线第一 | 天堂av免费在线 | 欧美久草视频 | 在线免费日韩 | 亚洲黄色av网址 | 色久综合| 午夜视频黄 | av久久在线| 黄色a级片在线观看 | 中文字幕在线日亚洲9 | 91视频下载| 九九九九精品九九九九 | 日韩最新在线 | 成人国产电影在线观看 | 亚洲精品合集 | 久久天堂影院 | 精品在线一区二区三区 | 中文字幕影片免费在线观看 | 国产理伦在线 | www五月天| 干av在线 | 夜夜骑天天操 | 干综合网 | 夜夜躁日日躁狠狠久久av | 黄色a级片在线观看 | 日批视频在线观看免费 | 成人av影视在线 | 国产精品 中文字幕 亚洲 欧美 | 色综合久久久久综合 | 亚洲jizzjizz日本少妇 | av成人黄色| 97超碰免费在线 | 国产原创av在线 | 日韩系列在线 | 西西大胆免费视频 | av福利免费 | 国产淫片 | 九色视频自拍 | 日韩精品一区二区免费视频 | 亚洲韩国一区二区三区 | 国产伦精品一区二区三区… | 91久久偷偷做嫩草影院 | 在线观看一级 | av日韩在线网站 | 97超碰在线视 | 日韩视频一二三区 | 一级大片在线观看 | 国产精品久久久久久久7电影 | 激情婷婷在线 | 免费在线国产精品 | 久久久久久久久久伊人 | 日韩欧美在线视频一区二区 | 国产一区二区免费看 | 成人毛片一区 | 狠狠干夜夜| 久久久久色| 国产一级一片免费播放放 | 天天操天天色天天射 | 午夜精品电影 | 色婷婷亚洲综合 | 国产一级免费电影 | 久久久久日本精品一区二区三区 | 国产精品手机视频 | 久草网视频 | 三级黄色a| 在线观看国产一区 | 国产成人av网址 | 国产精品露脸在线 | 日韩欧美视频一区二区三区 | 亚洲综合色播 | 黄色av高清 | 亚洲日本在线一区 | 天天躁日日躁狠狠躁 | 亚洲国产网站 | 天无日天天操天天干 | 欧美日韩性生活 | 婷婷色伊人 | 中文字幕91在线 | 久久久国产成人 | 久久国产麻豆 | 99婷婷| 天天干婷婷| 久久亚洲综合国产精品99麻豆的功能介绍 | 国产精品乱码久久久 | 麻豆国产精品永久免费视频 | 日韩免费视频观看 | 免费在线黄 | 奇米影音四色 | 色吧久久 | 亚洲欧美日韩精品久久奇米一区 | 日韩com | av成人资源 | 国产在线播放一区二区 | 国产精品免费观看视频 | 999成人| 国产成a人亚洲精v品在线观看 | 国产精品少妇 | 97香蕉久久国产在线观看 | 亚洲一二视频 | 天天在线操 | 在线观看a视频 | 蜜臀av性久久久久av蜜臀妖精 | 四虎最新域名 | 免费色视频网站 | 久久激情视频 | 日韩三级.com | 久久亚洲成人网 | 在线免费高清一区二区三区 | 欧美国产日韩一区 | 91九色国产视频 | 伊人色播| 国产国语在线 | 伊人开心激情 | 99亚洲国产精品 | 91在线免费视频 | 日韩中文久久 | 黄网站app在线观看免费视频 | 九九精品毛片 | 亚洲春色综合另类校园电影 | 久久dvd | 欧美日韩免费在线观看视频 | 在线观看岛国片 | 午夜久久久精品 | 久久国产精品网站 | 99精品色 | 高清av网| 国产黄色在线网站 | 国产高清免费在线播放 | 亚洲一级免费观看 | 五月天com | 韩国一区在线 | 国产精品日韩久久久久 | 中文字幕在线播放第一页 | 福利精品在线 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 欧美综合在线视频 | 日韩大片在线免费观看 | 成人在线视 | 99日韩精品| 狠狠干我 | 高清不卡一区二区在线 | 四虎成人精品永久免费av九九 | 91精品视频在线观看免费 | 日韩中字在线观看 | 成人网444ppp | 午夜成人影视 | 日本aaaa级毛片在线看 | 中文网丁香综合网 | 成人香蕉视频 | 一区二区视频免费在线观看 | 亚洲国产三级在线 | 少妇按摩av| 午夜久久美女 | 国产九色视频在线观看 | 97成人在线免费视频 | 欧美激情视频免费看 | 在线观看中文字幕2021 | 欧美视频不卡 | 免费在线91 | 中文字幕中文 | 美女久久99| 精品亚洲国产视频 | 国产成人高清av | 国产一区免费在线 | 久久久久久久久久久高潮一区二区 | 国产亚洲精品成人av久久ww | 精品一区91| 日韩欧美视频 | 西西444www大胆高清视频 | 久久躁日日躁aaaaxxxx | 在线观看视频一区二区三区 | 国产中文字幕亚洲 | 91看片淫黄大片在线播放 | 久久国产亚洲 | 四虎国产精品永久在线国在线 | 日韩在线免费小视频 | 中文字幕专区高清在线观看 | 亚洲欧美日本国产 | 国产一二三四在线视频 | 日韩av综合网站 | 国产精品久久久久三级 | 日本电影黄色 | 日本精品在线看 | 91亚色视频| 日本在线观看中文字幕无线观看 | 97国产超碰在线 | 狠狠干激情 | 国产精品一区二区美女视频免费看 | 天天久久综合 | 深夜福利视频一区二区 | 亚洲欧美视屏 | 日韩电影在线观看一区二区三区 | 国产成人一区二区三区在线观看 | 激情深爱 | 亚洲黄在线观看 | 手机在线日韩视频 | 欧美一二三专区 | 国产美女视频 | 亚洲欧洲成人 | 中文字幕亚洲综合久久五月天色无吗'' | 亚洲精品国产综合99久久夜夜嗨 | 亚洲天堂在线观看完整版 | 激情中文在线 | 一级黄色片毛片 | 成人免费共享视频 | 在线免费观看一区二区三区 | 国产a国产a国产a | 二区三区精品 | 丁香六月婷婷激情 | 免费h在线观看 | 国产精品一区免费观看 | 99久久精品午夜一区二区小说 | 在线中文字幕播放 | 四虎www| 四虎成人av | 91成人精品一区在线播放 | 中文字幕一区二区三区乱码不卡 | 国产婷婷色 | 国产高清福利在线 | 黄色大片视频网站 | 亚洲国产精品电影 | 精品久久久久久久久久久久久久久久久久 | 久草视频中文在线 | 综合激情婷婷 | 久久av一区二区三区亚洲 | 欧美在线1 | 欧美日韩伦理在线 | 丝袜美腿在线播放 | 色综合久久88色综合天天人守婷 | 亚洲影音先锋 | 国产在线播放一区二区三区 | 夜夜骑首页 | 国产精品 9999| 成人免费网站在线观看 | 亚洲国产69| 97人人超碰在线 | 中文字字幕在线 | 国产99久久九九精品 | 久久免费在线观看 | 久久免费精品国产 | 永久黄网站色视频免费观看w | 国产黄色特级片 | 一区二区中文字幕在线 | 国产色视频一区二区三区qq号 | 日韩精品中字 | 日韩一区二区三免费高清在线观看 | 婷婷在线免费视频 | 日本久久视频 | 久久大片| 二区精品视频 | 国产女做a爱免费视频 | 干干日日 | 久久久久久欧美二区电影网 | 国产黄免费看 | 天天操天天色综合 | 久草视频在线看 | 日韩高清av | 黄色一级免费网站 | 二区三区中文字幕 | 黄色最新网址 | 国产精品永久在线观看 | 日本性高潮视频 | 欧美久久久一区二区三区 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 亚洲精品小视频 | 久久影视一区 | 91精品视频播放 | 亚洲欧美精品一区 | 五月婷亚洲 | 超碰日韩 | 久久久久久久国产精品视频 | 日韩二区三区在线观看 | 国产成人精品久久久久 | 久久久999精品视频 国产美女免费观看 | 久久久久久高潮国产精品视 | 精品日韩在线一区 | 久久天天躁夜夜躁狠狠85麻豆 | 热热热热热色 | 91视频最新网址 | 在线观看完整版免费 | 激情视频在线高清看 | 国产精品婷婷 | 色婷婷www| 久久a v视频 | 奇米影视999| 片黄色毛片黄色毛片 | 成年人在线看视频 | 日韩18p| 国产一区精品在线 | 久久国产一区二区三区 | 精品久久久久久亚洲综合网站 | 国产一级91 | 日韩视频一区二区在线 | 成全在线视频免费观看 | 欧美日韩中文视频 | 久久1区| 国产黄色免费电影 | 日韩av不卡在线观看 | 成人综合日日夜夜 | 怡红院久久 | 91大神dom调教在线观看 | 午夜色大片在线观看 | 国产在线观看一区 | www国产亚洲 | 中文字幕在线视频第一页 | 亚洲国产高清在线观看视频 | 最近中文字幕大全中文字幕免费 | 亚洲精品1区2区3区 超碰成人网 | 国产一区二三区好的 | 国产成人久久精品一区二区三区 | 久久伊人精品一区二区三区 | 尤物一区二区三区 | 精品亚洲成a人在线观看 | 欧美日韩高清国产 | 激情五月在线视频 | 国产人成在线视频 | 精品伊人久久久 | 久久综合国产伦精品免费 | 综合网天天射 | 国产精品美女999 | 精品久久九九 | 粉嫩av一区二区三区四区 | 久久国产亚洲精品 | 久久伊人国产精品 | 国产专区第一页 | 国产午夜三级一区二区三桃花影视 | 国产淫片免费看 | 欧美日韩国产精品一区二区亚洲 | 黄色一级片视频 | 综合婷婷丁香 | 日韩精品网址 | 天天操天天干天天综合网 | 日韩动态视频 | 久久免费精品一区二区三区 | 开心激情综合网 |