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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

网络编程06-服务器编程非阻塞IO、多路复用

發(fā)布時(shí)間:2024/3/26 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程06-服务器编程非阻塞IO、多路复用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、服務(wù)器編程中四種高性能IO模型

1、阻塞IO

2、非阻塞 IO

3、多路復(fù)用

4、信號(hào)驅(qū)動(dòng)

二、阻塞IO

三、非阻塞IO?

1、阻塞IO與非阻塞IO之間的差異

?2、如何給文件描述符設(shè)置非阻塞屬性----fcntl() ----- man 2 fcntl

四、多路復(fù)用

1、同時(shí)監(jiān)聽多個(gè)套接字IO口

2、什么是多路復(fù)用

3、特點(diǎn)

4、多路復(fù)用的函數(shù)接口-------select -----man 2 select

Client.c


一、服務(wù)器編程中四種高性能IO模型

?

1、阻塞IO

1)read(fd,buf) ; recv(fd) ; recvfrom(fd) 這些函數(shù)本身是不具有阻塞屬性,而是這個(gè)文件描述符的本身阻塞屬性導(dǎo)致這個(gè)函數(shù)執(zhí)行表現(xiàn)出來的形式是阻塞。 2)在默認(rèn)的情況下,Linux下建立的socket套接字 都是 阻塞的。

2、非阻塞 IO

1)給文件描述符添加非阻塞屬性 2)由于非阻塞屬性,所以不斷詢問套接字中是否有數(shù)據(jù)到達(dá)

3、多路復(fù)用

1)同時(shí)對(duì)多個(gè)IO口進(jìn)行操作(也就是同時(shí)監(jiān)聽?zhēng)讉€(gè)套接字) 2)可以在規(guī)定的時(shí)間內(nèi)檢測(cè)數(shù)據(jù)是否到達(dá)

4、信號(hào)驅(qū)動(dòng)

1)屬于異步通信方式 2)當(dāng)socket中有數(shù)據(jù)到達(dá)時(shí),通過發(fā)送信號(hào)告知用戶

二、阻塞IO

讀阻塞:當(dāng)數(shù)據(jù)緩沖區(qū)中沒有數(shù)據(jù)可以讀取時(shí),調(diào)用read/recv/recvfrom就會(huì)無限阻塞。 寫阻塞:當(dāng)緩沖區(qū)剩余的大小 小于 寫入的數(shù)據(jù)量,就會(huì)發(fā)生寫阻塞,直到緩沖區(qū)中的數(shù)據(jù)被讀取了

三、非阻塞IO?

1、阻塞IO與非阻塞IO之間的差異

?

?2、如何給文件描述符設(shè)置非阻塞屬性----fcntl() ----- man 2 fcntl

#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); 參數(shù) ????????fd : 你要 設(shè)置 哪個(gè) 文件,將這個(gè)文件的文件描述符傳遞進(jìn)來 ????????cmd: 請(qǐng)求控制的命令字 ????????arg:這個(gè)參數(shù)要不要填,取決于第二個(gè)參數(shù) ????????第二個(gè)參數(shù):

?

比如:

int fd = open("xxx"); int status = fcntl(fd, F_GETFL ); //得到文件描述符的狀態(tài) status |= O_NONBLOCK ;//在原來的基礎(chǔ)上新增非阻塞屬性 fcntl(fd, F_SETFL,status); //把變量status的狀態(tài)設(shè)置到文件描述符中

?

返回值 ????????F_GETFL Value of file status flags. ????????F_SETFL ????????成功返回0 ????????失敗返回 -1 例子1:設(shè)置一個(gè)非阻塞屬性給套接字,看看這個(gè)套接字還會(huì)不會(huì)阻塞等待客戶端連接?

?

例子2: 使用TCP通信 將其修改為非阻塞屬性

1 #include<stdio.h> 2 #include <sys/socket.h> 3 #include <sys/types.h> /* See NOTES */ 4 #include <netinet/in.h> 5 #include <arpa/inet.h> 6 #include <string.h> 7 #include <unistd.h> 8 #include <fcntl.h> 9 #define OWNADDR "192.168.14.3" //我自己電腦的ip地址 10 #define OWNPORT 20000 //我自己電腦的該程序的端口號(hào) 12 int main() 13 { printf("當(dāng)前是服務(wù)器 IP:%s Port:%u\n",OWNADDR,OWNPORT); 14 //1、買手機(jī)(建立套接字) 15 int socketfd = socket(AF_INET, SOCK_STREAM, 0); 16 if(socketfd == -1) 17 { 18 printf("沒錢了....,失敗\n"); 19 return -1; 20 } 21 //因?yàn)榉?wù)器立馬退出之后,端口號(hào)不會(huì)及時(shí)釋放 //此時(shí)如果服務(wù)器又馬上運(yùn)行,那么端口號(hào)會(huì)被占用,導(dǎo)致服務(wù)器分配端口號(hào)失敗,連接失敗 23 //所以設(shè)置端口號(hào)可以復(fù)用 24 int optval = 1; 25 setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR,&optval, sizeof(optval)); 26 27 //2、綁定自己的電話號(hào)碼(綁定自己的IP地址 和端口號(hào)) 28 //定義一個(gè)IPV4結(jié)構(gòu)體變量,初始化自己的IP地址和端口號(hào) 29 struct sockaddr_in ownAddr; 30 ownAddr.sin_family = AF_INET;/*地址族 IPV4*/ 31 ownAddr.sin_port = htons(OWNPORT); //htons 將本地端口號(hào)轉(zhuǎn)為網(wǎng)絡(luò)端口號(hào) 32 ownAddr.sin_addr.s_addr = inet_addr(OWNADDR); //將本地IP地址轉(zhuǎn)為網(wǎng)絡(luò)IP地址 33 34 bind(socketfd, (struct sockaddr *)&ownAddr,sizeof(struct sockaddr_in)); 35 36 //3、設(shè)置鈴聲(監(jiān)聽) listen 37 listen(socketfd,5); 38 39 //4、坐等電話(阻塞接收客戶端的連接) 40 printf("等待客戶端連接.......\n"); 41 //定義一個(gè)IPV4結(jié)構(gòu)體變量,存儲(chǔ)連接上來的客戶端的IP地址 和 端口號(hào) 42 struct sockaddr_in clientAddr; 43 //如果你要想要獲取對(duì)方的IP地址和端口號(hào),第三個(gè)參數(shù)必須把結(jié)構(gòu)體的大小傳遞進(jìn)去 44 int len = sizeof(struct sockaddr_in); 45 46 //給 socketfd設(shè)置非阻塞屬性 47 int status = fcntl(socketfd,F_GETFL);//得到這個(gè)套接字文件描述符的屬性 48 //將得到的文件描述符的全部屬性 中的 其中一個(gè)屬性設(shè)置成 非阻塞 49 status |= O_NONBLOCK; 50 int ret = fcntl(socketfd,F_SETFL,status);//把變量status的狀態(tài)設(shè)置到文件描述符中 51 if(ret == -1) 52 { 53 printf("fcntl error\n"); 54 55 } 56 while(1) 57 { 58 //此時(shí)是非阻塞,會(huì)一直不斷地循環(huán) 59 int newClientFd = accept(socketfd,(struct sockaddr*)&clientAddr,&len); 60 if(newClientFd != -1) 61 { //printf("有客戶端連接上來了............\n"); 63 //打印連接上來的客戶端的IP地址和端口號(hào),將網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)為 本地字節(jié)序 64 printf("連接上來的客戶端IP:%s 端口 號(hào):%u\n",inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port)); 65 } 66 //printf("11111111111\n"); 67 } 68 69 //5、關(guān)閉 70 close(socketfd); 71 //close(newClientFd); 72 73 return 0; 74 75 }

?

例題1: 寫一個(gè)服務(wù)器,最多可以接受1000個(gè)客戶端連接,可以隨時(shí)接受連接。 只要連接上服務(wù)器的客戶端有數(shù)據(jù)達(dá)到,那么就把數(shù)據(jù)打印出來。要求非阻塞IO實(shí)現(xiàn)。不能開線程 思路: 最多可以接受20個(gè)客戶端連接 ---> 用戶連接成功 ---> 判斷滿人 --> 拒絕連接 --> 斷開該用戶 2 ---> 用戶連接成功 ---> 未滿人 --> 保存套接字到數(shù)組 3 4 5 struct ciient{ int clifd[1000]; //已連接的用戶的套接字 6 int count; //已連接用戶的總數(shù) 7 8 } 9 10 非阻塞IO:不斷詢問這些已連接的用戶以及是否有新的人連接過來! 11 while(1) 12 { 13 int clifd[20]; ??? 有沒有數(shù)據(jù)來? 14 } 1 #include<stdio.h> 2 #include<stdio.h> 3 #include <sys/types.h> /* See NOTES */ 4 #include <sys/socket.h> 5 #include <sys/socket.h> 6 #include <arpa/inet.h> 7 #include <unistd.h> 8 #include<stdlib.h> 9 #include <string.h> 10 #include <errno.h> 11 #include <signal.h> 12 #include <sys/wait.h> 13 #include <fcntl.h> 14 15 //#include <pthread.h> 16 17 #define SERVER_PORT 9999 18 19 20 struct client{ int clientFd_Array[1000] ;//存儲(chǔ)所有連接上來的客戶端的套接字文件描述符 21 int clientCount; //連接上來的客戶端的總數(shù) 22 23 }; 24 25 26 void sys_err(const char*err) 27 { fprintf(stderr,"%s\n",strerror(errno)); 28 exit(0); 29 30 } 31 32 33 int main() 34 { int ret; 35 struct sockaddr_in clientAddr;//存儲(chǔ)連接上來的客戶端的IP地址和端口號(hào) 36 int len = sizeof(struct sockaddr_in); 37 struct client clientManager; //客戶端 結(jié)構(gòu)體管理變量 38 39 //初始化結(jié)構(gòu)體 40 clientManager.clientCount = 0; 41 42 printf("服務(wù)器 Port:%d PID:%d \n",SERVER_PORT,getpid()); 43 44 //1、建立套接字 45 int socketFd = socket(AF_INET,SOCK_STREAM, 0); 46 if(socketFd == -1){ 47 sys_err("socket error"); 48 } 49 //端口復(fù)用 50 int optval = 1; 51 setsockopt(socketFd,SOL_SOCKET,SO_REUSEADDR,&optval, sizeof(optval)); 52 53 //2、綁定自己的IP地址和端口號(hào) 54 struct sockaddr_in serverAddr; 55 serverAddr.sin_family = AF_INET; 56 serverAddr.sin_port = htons(SERVER_PORT);//short 57 serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); 58 59 ret = bind(socketFd,(struct sockaddr*)&serverAddr,sizeof(struct sockaddr_in)); 60 if(ret == -1){ 61 sys_err("bind error"); 62 } 63 64 //3、設(shè)置監(jiān)聽 65 listen(socketFd,128); 66 67 //設(shè)置該監(jiān)聽套接字 為 非阻塞屬性 68 //第一步 先得到原來該套接字原來的屬性 69 int state = fcntl(socketFd,F_GETFL); 70 //第二步 在原來的基礎(chǔ)上新增 一個(gè)非阻塞 屬性 71 state |= O_NONBLOCK; // state = state | O_NONBLOCK 72 //第三步 將 新的屬性 設(shè)置回 文件描述符中 73 fcntl(socketFd,F_SETFL,state); 74 75 while(1){ 76 //4、接收新的客戶端連接.... 77 int newClientFd = accept(socketFd, (struct sockaddr*)&clientAddr,&len); 78 if(newClientFd > 0) //說明有客戶端連接上來了 79 { 80 printf("有新的客戶端連接上來 IP:%s Port:%hu newClientFd:%d\n", 81 inet_ntoa(clientAddr.sin_addr), 82 ntohs(clientAddr.sin_port), 83 newClientFd); 84 85 //將客戶端文件描述符的屬性 設(shè)置成 非阻塞屬性 86 //第一步 先得到原來該套接字原來的屬性 87 int state = fcntl(newClientFd,F_GETFL); 88 //第二步 在原來的基礎(chǔ)上新增 一個(gè)非阻塞 屬性 89 state |= O_NONBLOCK; // state = state | O_NONBLOCK 90 //第三步 將 新的屬性 設(shè)置回 文件描述符中 91 fcntl(newClientFd,F_SETFL,state); 92 93 94 //將每一個(gè)連接上來的客戶端存儲(chǔ)到結(jié)構(gòu)體變量中 95 clientManager.clientFd_Array[clientManager.clientCount] = newClientFd; 96 clientManager.clientCount++; 97 } 98 99 //挨個(gè)輪詢查看 連接上來的客戶端 是否有數(shù)據(jù)到達(dá) 100 for(int i=0; i<clientManager.clientCount; i++){ 101 char buf[1024] = {0}; 102 int ret = recv(clientManager.clientFd_Array[i],buf, sizeof(buf), 0); 103 if(ret == 0) //客戶端斷開了 104 { 105 //printf("客戶端退出了....\n"); 106 //sleep(1); 107 break; 108 } 109 else if(ret > 0) //有數(shù)據(jù) 來了,可以進(jìn)行打印 110 { 111 printf("recv:%s\n",buf); 112 } 113 } 114 115 116 } 117 118 //關(guān)閉 119 close(socketFd); return 0; 123 124 }

四、多路復(fù)用

1、同時(shí)監(jiān)聽多個(gè)套接字IO口

阻塞IO ---->只能同時(shí)監(jiān)聽一個(gè)套接字 非阻塞IO--->一直輪詢 問IO口有沒有數(shù)據(jù)到達(dá),非常浪費(fèi)CPU資源

2、什么是多路復(fù)用

就是預(yù)先把需要監(jiān)聽的文件描述符加入到一個(gè)集合,然后再規(guī)定的時(shí)間內(nèi)或者無限時(shí)間進(jìn)行等待。如果在規(guī)定的時(shí)間內(nèi),集合中文件描述符沒有數(shù)據(jù)變化,則說明超時(shí)接收,并進(jìn)入下一次規(guī)定的時(shí)間再次等待。一旦集合中的文件描述符有數(shù)據(jù)變化,則其他的沒有數(shù)據(jù)變化的文件描述符就會(huì)被剔除到集合之外,并且再次進(jìn)入下一次的等待狀態(tài)。

3、特點(diǎn)

同時(shí)對(duì)多個(gè)IO口進(jìn)行監(jiān)聽。

4、多路復(fù)用的函數(shù)接口-------select -----man 2 select

#include <sys/select.h> 2 #include <sys/time.h> 3 #include <sys/types.h> 4 #include <unistd.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); //poll epoll 參數(shù): ????????nfds: 三個(gè)集合中 最大的文件描述符的值 + 1,因?yàn)榇藚?shù)會(huì)告訴內(nèi)核檢測(cè)前多少個(gè)文件描述符的狀態(tài) ????????readfds:監(jiān)控有讀數(shù)據(jù)到達(dá)文件描述符集合,傳入傳出參數(shù) ????????writefds: 監(jiān)控寫數(shù)據(jù)到達(dá)文件描述符集合,傳入傳出參數(shù) ????????exceptfds: 監(jiān)控異常發(fā)生達(dá)文件描述符集合,如帶外數(shù)據(jù)到達(dá)異常,傳入傳出參數(shù) ????????timeout:設(shè)置阻塞等待時(shí)間,3種情況 ????????????????1.設(shè)置NULL,永遠(yuǎn)等下去,這個(gè)函數(shù)是阻塞(無限等待,直到有文件描述符的狀態(tài)發(fā)生變化) ????????????????2.設(shè)置timeval,等待固定時(shí)間 ????????????????3.設(shè)置timeval里時(shí)間均為0,檢查描述字后立即返回,輪詢 ????????????????---> 如果這個(gè)參數(shù)填NULL,則說明這個(gè)函數(shù)是阻塞(無限等待,直到有文件描述符的狀 態(tài)發(fā)生變化) struct timeval { 2 long tv_sec; /* seconds 秒*/ 3 long tv_usec; /* microseconds 微秒*/ 4 }; 5 void FD_CLR(int fd, fd_set *set); //把文件描述符集合里fd清0 6 int FD_ISSET(int fd, fd_set *set); //測(cè)試文件描述符集合里fd是否置1 7 void FD_SET(int fd, fd_set *set); //把文件描述符集合里fd位置1 8 void FD_ZERO(fd_set *set); //把文件描述符集合里所有位清0 返回值: 成功 有數(shù)據(jù)到達(dá) ---->狀態(tài)發(fā)生變化的文件描述符的總數(shù) 沒有數(shù)據(jù)到達(dá),超時(shí)-->0 失敗 -1 注意: 1、select能監(jiān)聽的文件描述符個(gè)數(shù)受限于FD_SETSIZE,一般為1024,單純改變進(jìn)程打開的文件描述符 個(gè)數(shù)并不能改變select監(jiān)聽文件個(gè)數(shù) 2、解決1024以下客戶端時(shí)使用select是很合適的,但如果鏈接客戶端過多,select采用的是輪詢模 型,會(huì)大大降低服務(wù)器響應(yīng)效率 3、可以進(jìn)行跨平臺(tái) /*4_accept非阻塞IO輪訓(xùn)服務(wù)器*/ #include <stdio.h> #include <unistd.h> #include <string.h> /*socket*/ #include <sys/types.h> /* See NOTES */ //man 2 socket /*inet_addr*/ #include <sys/socket.h> //man 3 inet_addr #include <netinet/in.h> #include <arpa/inet.h> /*fcntl*/ #include <fcntl.h> //man 2 fcntl#define SERVER_IP "192.168.11.2" #define SERVER_PORT 60000int main(int argc,char **argv) {//創(chuàng)建套接字int socket_fd = socket(AF_INET,SOCK_STREAM,0);if(socket_fd < 0){perror("socket fail");return -1;}//所以設(shè)置端口號(hào)可以復(fù)用,這兩條語句放在 綁定bind 之前int optval = 1;setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR,&optval, sizeof(optval));//綁定struct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);bind(socket_fd,(struct sockaddr *)&server_addr,sizeof(server_addr));//監(jiān)聽listen(socket_fd,20);//添加非阻塞屬性到socket_fd套接字中int status = fcntl(socket_fd, F_GETFL); //得到文件描述符的狀態(tài)-->F_GETFLstatus |= O_NONBLOCK ;//在原來的基礎(chǔ)上新增非阻塞屬性fcntl(socket_fd, F_SETFL,status); //把變量status的狀態(tài)設(shè)置到文件描述符中//接收int socket_client;int client_cnt[20],cnt=0,j=0;//初始化客戶端的套接字for(j=0;j<20;j++){client_cnt[j] = -1;} struct sockaddr_in client_addr;socklen_t addrlen = sizeof(client_addr);int ret;char buf[1024] = {0};//在不開進(jìn)程和線程的情況,同時(shí)能夠接受多個(gè)客戶端while(1){//由于socket_fd套接字帶有阻塞屬性,所以導(dǎo)致accept函數(shù)阻塞socket_client = accept(socket_fd,(struct sockaddr *)&client_addr,&addrlen);if(socket_client != -1){char *ip = inet_ntoa(client_addr.sin_addr);int port = ntohs(client_addr.sin_port);printf("有新的客戶端上線 [ip:%s port:%d]\n",ip,port);//將socket_client設(shè)置為非阻塞屬性存放在數(shù)組中int status = fcntl(socket_client, F_GETFL); //得到文件描述符的狀態(tài)-->F_GETFLstatus |= O_NONBLOCK ;//在原來的基礎(chǔ)上新增非阻塞屬性fcntl(socket_client, F_SETFL,status); //把變量status的狀態(tài)設(shè)置到文件描述符中//將所有的客戶端套接字存放在數(shù)組中client_cnt[cnt++] = socket_client; //cnt表示的是數(shù)組里面有效的客戶端套接字//printf("cnt = %d\n",cnt);}#if 0 //查看數(shù)組里面所有的客戶端套接字(調(diào)試用)for(j=0;j<20;j++){printf("%d ",client_cnt[j]); }printf("\n");printf("等待連接中....\n");sleep(1); #endif//遍歷數(shù)組里面所有的套接字(循環(huán)接受每一個(gè)客戶端發(fā)過來的數(shù)據(jù))for(j=0;j<cnt;j++) //cnt是數(shù)組里面有效的套接字{memset(buf,0,sizeof(buf));//默認(rèn)狀態(tài)下recv這個(gè)函數(shù)是阻塞屬性,但是現(xiàn)在的recv是非阻塞的ret = recv(client_cnt[j],buf,sizeof(buf),0);if(ret > 0) //只打印有效的數(shù)據(jù)printf("buf:%s ret:%d\n",buf,ret);}}//關(guān)閉套接字close(socket_fd); }/*5_accept非阻塞IO輪訓(xùn)服務(wù)器ip與端口*/ #include <stdio.h> #include <unistd.h> #include <string.h> /*socket*/ #include <sys/types.h> /* See NOTES */ //man 2 socket /*inet_addr*/ #include <sys/socket.h> //man 3 inet_addr #include <netinet/in.h> #include <arpa/inet.h> /*fcntl*/ #include <fcntl.h> //man 2 fcntl#define SERVER_IP "192.168.11.2" #define SERVER_PORT 60000struct client_info {int cli_socket;struct sockaddr_in cli_addr; };int main(int argc,char **argv) {//創(chuàng)建套接字int socket_fd = socket(AF_INET,SOCK_STREAM,0);if(socket_fd < 0){perror("socket fail");return -1;}//所以設(shè)置端口號(hào)可以復(fù)用,這兩條語句放在 綁定bind 之前int optval = 1;setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR,&optval, sizeof(optval));//綁定struct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);bind(socket_fd,(struct sockaddr *)&server_addr,sizeof(server_addr));//監(jiān)聽listen(socket_fd,20);//添加非阻塞屬性到socket_fd套接字中int status = fcntl(socket_fd, F_GETFL); //得到文件描述符的狀態(tài)-->F_GETFLstatus |= O_NONBLOCK ;//在原來的基礎(chǔ)上新增非阻塞屬性fcntl(socket_fd, F_SETFL,status); //把變量status的狀態(tài)設(shè)置到文件描述符中//初始化客戶端的套接字int cnt = 0,j=0;struct client_info info[100];for(j=0;j<100;j++)info[j].cli_socket = -1;struct sockaddr_in client_addr;socklen_t addrlen = sizeof(client_addr);//接收int socket_client; int ret;char buf[1024] = {0};//在不開進(jìn)程和線程的情況,同時(shí)能夠接受多個(gè)客戶端while(1){//由于socket_fd套接字帶有阻塞屬性,所以導(dǎo)致accept函數(shù)阻塞socket_client = accept(socket_fd,(struct sockaddr *)&client_addr,&addrlen);if(socket_client != -1){char *ip = inet_ntoa(client_addr.sin_addr);int port = ntohs(client_addr.sin_port);printf("有新的客戶端上線 [ip:%s port:%d]\n",ip,port);//將socket_client設(shè)置為非阻塞屬性存放在數(shù)組中int status = fcntl(socket_client, F_GETFL); //得到文件描述符的狀態(tài)-->F_GETFLstatus |= O_NONBLOCK ;//在原來的基礎(chǔ)上新增非阻塞屬性fcntl(socket_client, F_SETFL,status); //把變量status的狀態(tài)設(shè)置到文件描述符中//將所有的客戶端套接字存放在數(shù)組中//cnt表示的是數(shù)組里面有效的客戶端套接字info[cnt].cli_socket = socket_client;info[cnt].cli_addr = client_addr;cnt++;}#if 0 //查看數(shù)組里面所有的客戶端套接字(調(diào)試用)for(j=0;j<20;j++){printf("%d ",info[j].cli_socket); }printf("\n");printf("等待連接中....\n");sleep(1); #endif//遍歷數(shù)組里面所有的套接字(循環(huán)接受每一個(gè)客戶端發(fā)過來的數(shù)據(jù))for(j=0;j<cnt;j++) //cnt是數(shù)組里面有效的套接字{memset(buf,0,sizeof(buf));//默認(rèn)狀態(tài)下recv這個(gè)函數(shù)是阻塞屬性,但是現(xiàn)在的recv是非阻塞的 /* ret = recv(client_cnt[j],buf,sizeof(buf),0);if(ret > 0) //只打印有效的數(shù)據(jù)printf("buf:%s ret:%d\n",buf,ret); */ret = recv(info[j].cli_socket,buf,sizeof(buf),0); if(ret > 0) //只打印有效的數(shù)據(jù)printf("[ip:%s port:%d]buf:%s ret:%d\n",inet_ntoa(info[j].cli_addr.sin_addr),ntohs(info[j].cli_addr.sin_port),buf,ret); }}//關(guān)閉套接字close(socket_fd); }/*6_使用多路復(fù)用select實(shí)現(xiàn)TCP服務(wù)器*/ #include<stdio.h> #include<stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include<stdlib.h> #include <string.h> #include <errno.h> #include <signal.h> #include <sys/wait.h> #include <fcntl.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h>#define SERVER_IP "192.168.11.2" #define SERVER_PORT 60000void sys_err(const char*err) {fprintf(stderr,"%s\n",strerror(errno));exit(0); }int main() {int ret,max_fd,i=0,imax=0;int client[FD_SETSIZE]; //存儲(chǔ)所有客戶端的文件描述符//該宏系統(tǒng)已經(jīng)定義好了 文件描述符的總數(shù) 1024struct sockaddr_in clientAddr;//存儲(chǔ)連接上來的客戶端的IP地址和端口號(hào)int len = sizeof(struct sockaddr_in);printf("服務(wù)器 Port:%d PID:%d \n",SERVER_PORT,getpid());//1、建立套接字(監(jiān)聽套接字)int socket_fd = socket(AF_INET,SOCK_STREAM, 0);if(socket_fd == -1){sys_err("socket error");//perror("bind"); //兩種錯(cuò)誤條釋放作用一樣}//端口復(fù)用int optval = 1;setsockopt(socket_fd,SOL_SOCKET,SO_REUSEADDR,&optval, sizeof(optval));//2、綁定自己的IP地址和端口號(hào)struct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);//short//server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //表示本機(jī)任意IP地址server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);ret = bind(socket_fd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr_in));if(ret == -1){sys_err("bind error");}//3、設(shè)置監(jiān)聽listen(socket_fd,128);//定義文件描述符集合fd_set rset,allset;//清空集合FD_ZERO(&allset);FD_SET(socket_fd, &allset); //把監(jiān)聽套接字 加入到集合中//最大的文件描述符,在沒有客戶端進(jìn)來之前,最大的文件描述符最大值就是socket_fdmax_fd = socket_fd;//初始化為 -1 給存放客戶端套接字的數(shù)組初始化for(int k=0; k<FD_SETSIZE; k++){client[k] = -1;}//設(shè)置阻塞的時(shí)間struct timeval t;t.tv_sec = 5;t.tv_usec = 0;while(1){rset = allset; //每次循環(huán)的時(shí)候都需要重新設(shè)置select的集合//多路復(fù)用 ,同時(shí)監(jiān)聽 多個(gè)套接字文件描述符的狀態(tài) --阻塞監(jiān)聽//nready表示的是狀態(tài)發(fā)生變化的文件描述符的總數(shù),(不是里面存放了多少個(gè)描述符)int nready = select(max_fd+1,&rset, NULL,NULL, NULL);if(nready == -1){perror("select error");break;}//程序走到這里,說明集合中的文件描述符的狀態(tài)一定發(fā)生變化了//如果是監(jiān)聽套接字文件描述符發(fā)生變化了,說明一定是有新客戶端連接上來了if(FD_ISSET(socket_fd, &rset)){//接收新的客戶端int new_clientfd = accept(socket_fd, (struct sockaddr*)&clientAddr,&len);printf("有新的客戶端連接上來 IP:%s Port:%hu new_clientfd:%d\n",inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port),new_clientfd);//把新的客戶端文件描述符加入到集合中 FD_SET(new_clientfd, &allset);//更新文件描述符最大值if(new_clientfd > max_fd)max_fd = new_clientfd;//將連接上來的客戶端文件描述符 加入到 數(shù)組中for(i=0; i<FD_SETSIZE; i++){if(client[i] <0 ){client[i] = new_clientfd;break;}}//imax = i;//存放客戶端套接字?jǐn)?shù)組里面的最大的下標(biāo)值(可以通過這個(gè)值來記錄你客戶端數(shù)目)//說明該集合中只有監(jiān)聽套接字文件描述符發(fā)生變化if(--nready == 0)continue;} //程序走到這里,說明有客戶端發(fā)送數(shù)據(jù)過來for(i=0; i<FD_SETSIZE; i++){if(client[i] <0)continue;//說明該客戶端發(fā)送數(shù)據(jù)過來了,//客戶端套接字的狀態(tài)就發(fā)生變化這句話if(FD_ISSET(client[i], &rset))就成立if(FD_ISSET(client[i], &rset)){char buf[1024] = {0};int ret = read(client[i],buf,sizeof(buf));if(ret == 0) //該客戶端斷開了{(lán)printf("有客戶端斷開了.....\n");close(client[i]);//關(guān)閉文件描述符FD_CLR(client[i],&allset);//將該客戶端從 文件集合中刪除client[i] = -1; //該文件描述符對(duì)應(yīng)的數(shù)組位置置 -1}printf("recv:%s\n",buf);//說明所有發(fā)生變化的文件描述符 已經(jīng)被我們處理完了,則退出if(--nready == 0)break;} } }//關(guān)閉close(socket_fd); return 0; }

Client.c

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /*socket*/ #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> /*ip*/ #include <netinet/in.h> //man 3 inet_addr #include <arpa/inet.h>//服務(wù)器的IP地址 #define SERVER_IP "192.168.11.2" #define SERVER_PORT 60000int main(int argc,char **argv) {//建立套接字--socketint socket_fd;//AF_INET-->ipv4 SOCK_STREAM-->tcpsocket_fd = socket(AF_INET,SOCK_STREAM,0);if(socket_fd < 0){perror("socket fail");return -1;}printf("socket_fd = %d\n",socket_fd);//填充IP地址(服務(wù)器)--新結(jié)構(gòu)體struct sockaddr_in server_addr;server_addr.sin_family = AF_INET; //ipv4server_addr.sin_port = htons(SERVER_PORT);//host to net(本機(jī)端口號(hào)轉(zhuǎn)網(wǎng)絡(luò)端口號(hào))server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);//將本機(jī)IP轉(zhuǎn)換為網(wǎng)絡(luò)IP//連接服務(wù)器int ret;ret = connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(server_addr));if(ret < 0){printf("connect fail\n");return -1;}//給服務(wù)器發(fā)送數(shù)據(jù)char buf[1024] = {0};while(1){ memset(buf,0,sizeof(buf));scanf("%s",buf);ret = send(socket_fd,buf,strlen(buf),0);printf("send success ret:%d\n",ret);}//關(guān)閉套接字close(socket_fd);return 0; }

總結(jié)

以上是生活随笔為你收集整理的网络编程06-服务器编程非阻塞IO、多路复用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

国产91av视频在线观看 | 四虎成人免费观看 | 欧美成人手机版 | 亚洲精品在线观看的 | 亚洲三级在线免费观看 | 亚洲国产大片 | 日韩视频中文 | 成人丝袜 | 91视频午夜| 久久婷婷精品视频 | av成人在线观看 | 精品久久久一区二区 | 在线免费国产 | 亚洲国产成人久久综合 | 精品在线观看一区二区 | 久久精品福利视频 | 91最新视频在线观看 | 国产精品日韩 | 播五月婷婷 | 视频成人永久免费视频 | 亚洲精品高清一区二区三区四区 | 久久久久国产精品视频 | 黄色av成人在线 | 亚洲精品小区久久久久久 | 精品电影一区 | 999成人网 | 免费精品在线 | 午夜精品99久久免费 | 欧美色黄 | 欧美一二三区在线观看 | 久久久久草 | 国产福利免费看 | 免费色视频 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产精品久久久久久一区二区 | 日韩xxx视频 | 久久久久久久免费看 | 在线观看香蕉视频 | 成人黄大片视频在线观看 | 国产精品成人免费精品自在线观看 | 中文字幕中文 | 97在线观视频免费观看 | 欧美伦理电影一区二区 | 午夜精品久久久久99热app | 天天干天天干 | 福利网址在线观看 | 麻豆国产在线播放 | 色综合久久88 | 婷婷深爱 | 色小说在线| 久热免费在线观看 | 国产做a爱一级久久 | 久久看片| 一区二区在线电影 | 欧美日韩在线播放一区 | 丁香六月激情 | 在线视频一二区 | 激情五月伊人 | 91cn国产在线| 国产精品毛片久久久久久久 | 91精品人成在线观看 | 三级在线视频观看 | 九九热视频在线免费观看 | 久久色在线观看 | 国产日韩视频在线播放 | 日韩在线国产 | 中文字幕 国产精品 | 免费看三片 | 欧美亚洲另类在线视频 | 色婷婷精品大在线视频 | 99久久国产免费看 | 91福利视频网站 | 欧美视频日韩视频 | 夜夜婷婷 | 亚洲男男gaygay无套 | 999久久国产精品免费观看网站 | 亚洲一区精品二人人爽久久 | 欧美性黑人 | 91精品国自产拍天天拍 | 久久一区二区免费视频 | 一区二区三区四区五区六区 | 六月丁香婷 | 国产一级做a爱片久久毛片a | 91九色在线 | japanesexxxxfreehd乱熟 | 久久免费毛片视频 | 国产精品久久久久久久久久久久午夜 | 伊人伊成久久人综合网小说 | 婷婷视频在线播放 | 美女在线观看av | 香蕉网站在线观看 | 久久久久久久久网站 | 国产精品久久视频 | 精品国产99国产精品 | 青青网视频 | 丁香六月婷婷开心婷婷网 | 亚洲国产中文字幕在线观看 | 97电影院网| 青青河边草免费直播 | 欧美成年人在线观看 | 欧美三级在线播放 | 日韩精品专区在线影院重磅 | 香蕉视频久久久 | 98久9在线 | 免费 | 亚洲国产午夜视频 | 午夜视频不卡 | 日韩精品中文字幕久久臀 | 欧美精品久久久久久久久久白贞 | 97超碰人人模人人人爽人人爱 | 亚洲精品成人av在线 | 亚洲精品三级 | 日韩在线看片 | 日韩免费 | 国产一区二区手机在线观看 | 日日夜夜天天人人 | 久久久久久久久久久久国产精品 | 黄色国产在线观看 | 国产精品自在线拍国产 | 亚洲视频一 | 日本不卡一区二区 | 午夜av电影 | 99精品免费网 | 黄网站色视频免费观看 | 国产一区二区免费在线观看 | 人人草人 | 亚洲精品国产拍在线 | 精品欧美乱码久久久久久 | 97在线观看免费高清完整版在线观看 | 涩涩网站免费 | 亚洲精品国产自产拍在线观看 | 免费福利片2019潦草影视午夜 | 中文字幕永久 | 欧美日韩国产二区三区 | 婷婷色婷婷 | 在线观看视频亚洲 | 日本视频高清 | 中文字幕第一页在线播放 | 欧美国产日韩激情 | 99热这里只有精品国产首页 | 亚洲国产激情 | 日韩激情三级 | 久久艹国产 | 狠狠躁日日躁夜夜躁av | 日韩欧美视频一区二区三区 | 日韩视频免费看 | 精品国产一二三四区 | 国产高清久久久 | 久色网 | 91av在| 男女啪啪网站 | 国产成人av电影在线观看 | 97超碰人人干 | 超碰在线色 | 国产精品久久久久久久久久久免费看 | 久久99这里只有精品 | 欧美三人交 | 精品国产一区二区三区不卡 | 黄色a一级片| 91在线看网站 | 欧美日韩视频在线观看一区二区 | 久久天堂亚洲 | 欧美精品v国产精品 | 五月激情六月丁香 | 最新日韩视频在线观看 | 亚洲午夜精品一区二区三区电影院 | 在线a人片免费观看视频 | 手机在线黄色网址 | 久久精品人人做人人综合老师 | 亚洲精品裸体 | 波多野结衣在线观看一区 | 精品日韩在线 | 精品99视频 | 在线观看黄网站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国色天香在线 | 国产视频一区二区在线播放 | 人人射人人爱 | 日韩欧美网站 | 一区二区三区四区在线 | 91精品久久久久久久久 | 日韩精品一区二区免费 | 久久91网 | 日本在线精品视频 | 亚洲精品午夜国产va久久成人 | 婷婷伊人网 | 国产麻豆精品传媒av国产下载 | 国产精品久久久久久久久软件 | av一级在线观看 | 免费男女羞羞的视频网站中文字幕 | 亚洲成av人片在线观看香蕉 | 国产欧美精品一区二区三区四区 | 不卡中文字幕在线 | 国产精品久久久久一区二区 | 欧美日韩亚洲在线观看 | av不卡免费在线观看 | 国产精品原创av片国产免费 | 91视频88av| 日韩精品三区四区 | 91精品久久久久久综合乱菊 | 日韩欧美在线视频一区二区 | 久草视频免费观 | 中文字幕在线观看三区 | 福利视频导航网址 | 亚洲国产精品电影 | 91电影福利 | 免费在线观看日韩视频 | 精品国产片 | 亚洲一级电影在线观看 | 九色琪琪久久综合网天天 | 色婷婷综合久久久久 | 99久久999久久久精玫瑰 | 国产精品99精品久久免费 | 美女性爽视频国产免费app | 超碰97国产精品人人cao | 丁香在线观看完整电影视频 | 久久高清片 | 久久手机免费视频 | 国产免费又粗又猛又爽 | 免费人成网 | 欧美夫妻性生活电影 | 超碰最新网址 | 天天干干 | 免费成人在线网站 | 欧美黄污视频 | 99综合电影在线视频 | 97国产在线视频 | 欧美精品久久久久久久久久白贞 | 97天堂网| 国产精品视频一二三 | 天天操天天射天天爽 | 在线观看中文字幕视频 | 四虎成人精品永久免费av九九 | 天天操天天干天天操天天干 | 欧美综合久久久 | 69久久夜色精品国产69 | 天天插夜夜操 | 99精品一区二区 | 精品免费视频. | 一区二区精品视频 | 美女黄久久 | 国产精品伦一区二区三区视频 | 国内精品久久久久久久久 | 婷婷在线网站 | 国产中文字幕视频在线观看 | 91私密视频| 波多野结衣久久资源 | 国产精品久久久 | 欧美日韩伦理一区 | 国产精品日韩精品 | 亚州国产精品 | 91黄色小网站 | 亚洲高清激情 | 日韩精品高清不卡 | 国产中文字幕视频在线观看 | 高清一区二区三区 | 欧美一二在线 | 国产成人一区二区三区在线观看 | 日韩专区一区二区 | 久久精品视频18 | av女优中文字幕在线观看 | 亚洲国产精品一区二区尤物区 | 97高清视频 | 久久免费99精品久久久久久 | 国产精品欧美久久久久天天影视 | 久草香蕉在线 | 狠狠色噜噜狠狠狠狠 | 九月婷婷色 | 欧美色噜噜噜 | 亚洲最大激情中文字幕 | 亚洲一级黄色片 | 夜添久久精品亚洲国产精品 | 激情网第四色 | 美女黄频视频大全 | 97操碰 | 狠狠操夜夜操 | 久草在线资源网 | 久久福利剧场 | 成人午夜在线电影 | 天天干天天想 | 99精品久久只有精品 | 18性欧美xxxⅹ性满足 | 天天干天天干天天 | 2019av在线视频| 亚洲午夜久久久久久久久久久 | 中文字幕 国产专区 | 99产精品成人啪免费网站 | 波多野结衣在线视频免费观看 | 在线观看日韩一区 | 亚洲春色成人 | 国产1级视频 | 日本系列中文字幕 | 久久免费精品 | 国产又粗又猛又黄又爽的视频 | 一级片黄色片网站 | 免费在线日韩 | 久久资源在线 | 中文乱幕日产无线码1区 | 婷婷激情欧美 | 精品久久久久国产 | 国产精品爽爽久久久久久蜜臀 | av大片网址 | 香蕉影院在线播放 | 少妇bbw揉bbb欧美 | 欧美精品在线观看 | 国产精品久免费的黄网站 | 亚洲dvd | 婷婷电影在线观看 | 色丁香久久 | 香蕉在线影院 | 国产情侣一区 | 521色香蕉网站在线观看 | 免费久久99精品国产 | 玖玖在线视频观看 | 亚洲精品在线视频播放 | 精品国产一区二区三区蜜臀 | 午夜精品一区二区三区在线播放 | 五月婷丁香 | 欧美视频国产视频 | 一区二区三区精品在线视频 | 久久久久久久久久久电影 | 在线观看91精品视频 | 欧美电影在线观看 | 日本中文字幕影院 | 美女视频a美女大全免费下载蜜臀 | 色噜噜日韩精品欧美一区二区 | 91cn国产在线 | 狠色在线| 国产69精品久久久久久久久久 | 天天天操天天天干 | 天天做天天爱天天综合网 | 黄色精品久久 | 色综合久久综合网 | 狠狠色婷婷丁香六月 | 99精品欧美一区二区蜜桃免费 | 综合久久久久 | 成人av资源网站 | 激情欧美丁香 | 日韩在线视频二区 | 久久精品中文字幕免费mv | 日韩精品aaa | 草久在线 | 国内精品视频久久 | 亚洲精品久久久久中文字幕m男 | 最近日本mv字幕免费观看 | 日本激情中文字幕 | 人人射人人插 | 91视频大全| 天天爽天天爽天天爽 | 成年人精品 | av网站在线观看免费 | 免费在线观看亚洲视频 | av在观看 | 日韩高清毛片 | 午夜国产在线 | 亚洲欧美在线观看视频 | 成人97人人超碰人人99 | 黄色精品一区二区 | 91丨九色丨高潮 | 激情狠狠干 | 久久观看免费视频 | 久久精品久久精品久久 | 91大神一区二区三区 | 亚洲成人网av | 国产盗摄精品一区二区 | 国产精品理论片在线播放 | 国产经典三级 | 高清色免费 | 久久久午夜精品福利内容 | 亚洲免费av在线播放 | www.久久免费视频 | 在线a视频 | 黄免费网站 | 亚洲国产网站 | 亚洲伊人天堂 | 波多野结衣在线观看一区 | 亚洲精品男女 | 亚洲人人av | 国产99黄 | 九月婷婷色 | 免费亚洲婷婷 | 色综合久久88色综合天天免费 | 五月天激情综合 | 日韩在线观看视频一区二区三区 | 国产精品久久久久一区二区三区 | 97成人精品区在线播放 | www.狠狠色.com | 亚洲日韩中文字幕在线播放 | 色久天| 手机在线日韩视频 | 在线国产片 | 日韩久久午夜一级啪啪 | 色婷婷丁香| 日本在线观看中文字幕无线观看 | 91麻豆操 | 中文字幕不卡在线88 | 亚洲老妇xxxxxx | 啪啪动态视频 | 国产小视频在线观看 | 国产一级视频在线免费观看 | 久久国产精品一区二区三区四区 | av黄在线播放 | 精品久久1 | 探花视频在线版播放免费观看 | 狠狠躁日日躁狂躁夜夜躁av | 国产特黄色片 | 区一区二区三在线观看 | 久久爱综合 | 免费网址你懂的 | 亚洲va在线va天堂 | av丝袜制服 | 国产日产亚洲精华av | 久久精品99国产国产 | 久久久久国产a免费观看rela | 国产99久久久久 | 精品国产视频在线 | 亚洲精品视频播放 | 高清久久久 | 欧洲一区二区三区精品 | 涩av在线| 在线观看你懂的网站 | 亚洲精选99 | 一区二区精品国产 | 国产一区二区在线影院 | 精品国产理论 | 日韩在线观看视频中文字幕 | 久久激情五月丁香伊人 | 五月天伊人网 | 成人va天堂 | 久久蜜臀av | 91精品久久久久久综合乱菊 | 亚洲a在线观看 | 欧美色图亚洲图片 | 国产69精品久久久久9999apgf | 最新超碰| 最近日韩免费视频 | 久久精品美女视频 | 欧美日韩1区2区 | 天天干天天做天天爱 | 国产美女精品 | 人人爽久久涩噜噜噜网站 | 中文字幕免费不卡视频 | 国产私拍在线 | 91精品视频一区 | 久久精品二区 | 久久免费精品视频 | 久草 | 高清不卡一区二区三区 | 国内精品久久久久久久影视麻豆 | 久久亚洲美女 | 91看片网址 | 国产精品国产三级国产aⅴ入口 | 亚洲一区二区三区四区精品 | 中文字幕在线日 | 国产成a人亚洲精v品在线观看 | 久久夜色精品国产欧美乱极品 | 色狠狠干 | 一级片黄色片网站 | 中国美女一级看片 | 欧美伦理一区二区三区 | 人人看97 | 91大神精品视频在线观看 | 五月天久久 | 在线免费视频a | 97在线精品国自产拍中文 | 国产一级在线 | 青草草在线 | 日韩欧美网址 | 国产麻豆传媒 | 亚洲精品动漫成人3d无尽在线 | 欧美日性视频 | 亚洲欧美日韩在线一区二区 | 国产精品久久久影视 | 日韩乱色精品一区二区 | 五月激情在线 | 有码中文在线 | 麻花天美星空视频 | 中文在线8资源库 | 亚洲 欧美 国产 va在线影院 | 成人免费观看a | 亚洲天堂网在线观看视频 | 综合成人在线 | 99久久精品国产一区二区三区 | 亚洲美女精品 | 久久久久久激情 | 在线免费观看视频a | 在线观看国产v片 | 亚洲视频每日更新 | 亚洲综合色激情五月 | 丁香婷婷综合激情五月色 | 欧美日韩另类在线 | 精品国产美女 | 91在线看 | 中文在线√天堂 | 日本中文字幕网址 | 人操人 | 高清视频一区 | 色a资源在线 | 国产成人av电影在线观看 | 久久久久综合 | 久久视频一区二区 | 在线观看av国产 | www.天天干.com | 天干啦夜天干天干在线线 | 国产黄色免费看 | 天天干夜夜爱 | 国产一区免费在线观看 | 国产精品九九久久久久久久 | 亚洲精品乱码久久久久久蜜桃动漫 | 天堂av免费看 | 在线v| 天天操天天操天天爽 | 中文字幕久久精品 | 国产最新91 | av手机版| 黄色成人91 | 国产精品 亚洲精品 | 国产精品免费在线观看视频 | av不卡免费在线观看 | 国产91精品一区二区麻豆亚洲 | 久久人人精| 欧美日韩另类在线观看 | 91精品国产乱码久久 | 狂野欧美激情性xxxx | 九九热1 | 91在线区 | 国产不卡在线 | 国产成人一区二 | 香蕉在线影院 | 久久精品免费 | 五月婷婷一区二区三区 | 99久久精品免费 | 五月天丁香亚洲 | 激情五月***国产精品 | 欧美一区二区伦理片 | 99re视频在线观看 | 日韩精品一区二区三区高清免费 | 色婷婷伊人 | 伊人久操 | 国产日产在线观看 | 胖bbbb搡bbbb擦bbbb| 久久久久久久av麻豆果冻 | 最近日本韩国中文字幕 | 亚洲欧美综合精品久久成人 | 九色最新网址 | 我爱av激情网 | 日韩在线观看免费 | 亚洲五月六月 | 国产高清免费 | 国内久久久久久 | 亚洲精品国偷拍自产在线观看 | 99精品欧美一区二区蜜桃免费 | 国产成人精品三级 | 一区二区三区免费在线播放 | 婷婷丁香自拍 | 久久成人亚洲欧美电影 | 色视频在线观看 | 欧美a在线免费观看 | 国产欧美精品在线观看 | 国产破处在线播放 | 9999在线视频 | 天堂av在线免费 | 精品亚洲男同gayvideo网站 | 久草在线免费看视频 | 啪啪精品 | 91视频在线看 | 成人久久久久久久久久 | 成人av久久| 97福利视频| 成年人看片 | 又黄又爽的视频在线观看网站 | 国产精品无| 在线国产91 | 久久国精品 | 91精品国产网站 | 精品视频成人 | 中中文字幕av在线 | 狠狠色丁香婷婷综合久久片 | 天天插天天操天天干 | 开心激情五月网 | 日本久久久久久久久久 | 九九热在线精品 | 国产黄色网 | 蜜桃视频日本 | 国产91精品久久久久 | 欧美日韩二三区 | 91亚洲永久精品 | 97日日碰人人模人人澡分享吧 | 久草在线免费新视频 | 色老板在线| 国产日本在线观看 | 亚洲精品免费在线视频 | 精品黄色在线观看 | 99一区二区三区 | 日韩欧美高清一区二区 | av网站在线免费观看 | 亚洲dvd| 日韩高清一区在线 | 黄网站app在线观看免费视频 | 精品在线播放视频 | 久久精品亚洲一区二区三区观看模式 | 国产成人精品亚洲日本在线观看 | 最新中文字幕 | 日日夜夜天天 | 久久免费视频这里只有精品 | 日韩在线观看免费 | 丁香婷五月 | 国产高清在线精品 | 久久精品看 | 搡bbbb搡bbb视频 | 国产在线国偷精品产拍免费yy | 中文字幕成人 | 中文字幕第一页在线 | 黄色的网站在线 | 99久久久久国产精品免费 | 久草国产在线观看 | 天天操天天干天天操天天干 | 欧美91精品久久久久国产性生爱 | 欧美日韩高清一区二区 国产亚洲免费看 | 婷婷精品国产一区二区三区日韩 | 午夜在线免费观看 | 五月婷婷在线视频观看 | 综合视频在线 | 中文字幕视频三区 | 99久精品视频 | 麻豆视频成人 | 成人宗合网 | 国产成人三级在线观看 | 中文字幕日韩国产 | a午夜在线 | 久久久鲁| 欧美色伊人 | 久久福利影视 | 特级西西444www高清大视频 | 日韩3区 | 日韩特级黄色片 | 精品在线视频一区二区三区 | 午夜av剧场 | 丰满少妇一级片 | 日本中文字幕观看 | 五月激情丁香婷婷 | 欧美日韩视频网站 | 国产精品理论片在线观看 | 4438全国亚洲精品观看视频 | 一本色道久久综合亚洲二区三区 | 久久天天躁狠狠躁夜夜不卡公司 | 久色小说| 又黄又爽又无遮挡免费的网站 | 天天天在线综合网 | 日韩av高清在线观看 | 国产又粗又硬又长又爽的视频 | 国产高清视频免费观看 | 国产一性一爱一乱一交 | 免费看的黄色小视频 | 日日干日日操 | av中文在线 | 久久99久久99精品免观看软件 | 亚洲免费视频在线观看 | 国产黄免费| 久久免费精品视频 | 国产蜜臀av| 色婷婷免费视频 | 在线日韩精品视频 | 久久dvd | 99视频在线免费看 | av日韩精品 | 中国一级特黄毛片大片久久 | 免费中文字幕 | 精品专区| 奇米网网址 | 国产精品女 | 99精品一区二区三区 | 视频在线观看91 | 成人久久 | www最近高清中文国语在线观看 | 中文字幕二区在线观看 | 香蕉视频国产在线观看 | 亚洲视频在线视频 | 伊人国产视频 | 国产精品资源在线观看 | 中国精品少妇 | 国产精品国产三级国产专区53 | 久久免费黄色大片 | 韩国在线视频一区 | 一级成人免费 | 国产日本在线播放 | 青青草国产在线 | 91传媒视频在线观看 | 久久99最新地址 | 久操伊人| 国产精品久久久久久高潮 | 国产欧美日韩视频 | 亚洲欧美激情插 | 中国一级特黄毛片大片久久 | 国产专区在线视频 | 婷婷在线五月 | 超碰在线人人97 | 中文字幕在线播放一区 | 正在播放国产一区二区 | 国产精品嫩草55av | 久草网在线观看 | 激情喷水 | 99热精品久久| 久草精品视频在线播放 | 国产精品久久久久久久久久久久午夜 | 色视频网站在线观看一=区 a视频免费在线观看 | 五月导航 | 国语自产偷拍精品视频偷 | 日韩二区在线 | 欧美日韩国产一区 | 国产日韩欧美在线免费观看 | 久久视频免费看 | 久久视屏网| 国产女v资源在线观看 | 99久久日韩精品免费热麻豆美女 | av网站免费线看精品 | 成人久久久精品国产乱码一区二区 | 欧美视频在线观看免费网址 | 日韩在线在线 | 国产精品网址在线观看 | 激情综合网天天干 | 国产精品2区 | 蜜臀久久99精品久久久酒店新书 | 色99之美女主播在线视频 | 日韩精品一区二区三区免费观看 | 一区二区三区中文字幕在线观看 | 亚洲精品成人av在线 | 啪啪激情网 | 91九色蝌蚪视频在线 | 99这里只有 | 人人玩人人添人人澡97 | 精品中文字幕在线观看 | 99精品免费在线观看 | 91网在线观看 | 欧美一级在线观看视频 | 精品亚洲欧美一区 | 中文字幕一二 | 97在线视频网站 | 国产一级电影在线 | 国产系列精品av | 国产男男gay做爰 | 中国精品少妇 | 婷婷精品国产欧美精品亚洲人人爽 | 欧美午夜精品久久久久久孕妇 | 91视频91蝌蚪 | 欧美一级免费片 | 国产精品久久久久久一二三四五 | 久久精品视频2 | 500部大龄熟乱视频使用方法 | 黄色的视频 | 亚洲精品视频在线播放 | 高清色免费 | av资源网在线播放 | 亚洲黄污 | 色噜噜在线观看 | 一区二区精品久久 | 久久8| 亚洲成aⅴ人在线观看 | 91九色视频观看 | 亚洲免费观看在线视频 | 久草在线资源观看 | 亚洲在线免费视频 | 国产精品入口久久 | 久久高清国产 | 五月婷网站 | 欧美国产日韩一区二区三区 | 黄色精品一区二区 | 日韩亚洲在线 | 国产精品伦一区二区三区视频 | 亚a在线 | 久久大视频 | 91尤物在线播放 | 一级性生活片 | 国产专区在线看 | 人人揉人人揉人人揉人人揉97 | 亚洲免费国产视频 | 日本久久久亚洲精品 | 色www免费视频 | 日韩欧美综合视频 | 久久久精品国产一区二区 | www毛片com| 亚洲国产日韩一区 | 综合av在线 | 欧美日韩国产高清视频 | 精品视频在线免费 | 久久久精品国产一区二区电影四季 | 成人免费视频网站 | 日日操操操 | 亚洲影院色 | 六月色 | 99久久久久久 | 久久久 激情 | 国产网站色 | 欧美性视频网站 | 亚洲欧美偷拍另类 | .国产精品成人自产拍在线观看6 | 亚洲精品乱码白浆高清久久久久久 | 激情 一区二区 | 久久桃花网 | 欧美在线1 | 91精品视频观看 | 99精品在线视频观看 | 黄色免费av | 香蕉视频久久久 | 久久福利| 91超碰在线播放 | 日韩免费高清 | 福利视频在线看 | 狠狠狠狠狠狠操 | 97碰视频| 999国内精品永久免费视频 | 激情五月婷婷丁香 | 青青草国产成人99久久 | 手机av在线网站 | 五月天久久久久久 | 日韩婷婷 | 9幺看片 | 欧美夫妻生活视频 | 在线观看精品一区 | 波多野结衣在线观看一区二区三区 | 日本成人a| 日韩高清不卡在线 | 国产成人一区二区三区影院在线 | 最新中文字幕在线资源 | 91爱爱网址 | 麻豆免费观看视频 | 欧美巨大 | 日本一区二区三区视频在线播放 | 午夜 在线 | 91在线日韩 | 国产乱老熟视频网88av | 欧美日韩精品在线免费观看 | 免费看一级黄色 | 久久老司机精品视频 | 日韩免费观看一区二区 | 五月婷影院 | 欧美少妇bbwhd | 亚洲精品mv在线观看 | 69av久久 | 国产h在线观看 | 超碰97.com| wwwwww国产 | 人人草在线观看 | 国产精品久久99综合免费观看尤物 | 国产精品久久久久久久久婷婷 | 国产精品对白一区二区三区 | 五月天综合激情 | 日韩精品视频网站 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 中文字幕乱码日本亚洲一区二区 | 婷婷激情欧美 | 色网站在线 | 久久这里有精品 | 99操视频 | 一级片免费观看视频 | 五月综合激情婷婷 | 午夜精品久久久久久久99 | 免费视频久久久久久久 | 亚洲黄色在线观看 | 97在线观看视频 | 狠狠色噜噜狠狠狠合久 | 亚洲国产丝袜在线观看 | 欧美午夜一区二区福利视频 | 国产伦理一区二区 | 亚洲伊人av | 久免费视频 | 久久亚洲成人网 | 免费看一及片 | 四虎国产精品成人免费4hu | 超级碰碰免费视频 | 亚洲一区二区三区在线看 | 99精品国产99久久久久久97 | 久久都是精品 | 久久精品国产精品亚洲精品 | 久久久久久久久久久综合 | 99精品偷拍视频一区二区三区 | 三级av在线播放 | 久久久久久激情 | 免费试看一区 | 99电影456麻豆| 一级片免费观看视频 | 国产精品自在欧美一区 | 久久久久国产一区二区三区 | 一级成人免费 | 91禁在线观看 | 亚洲精品在线免费观看视频 | 久久精品美女 | 久草综合视频 | 日韩激情久久 | 久久久久久久久久久成人 | 欧洲精品久久久久毛片完整版 | 久久久久久久免费观看 | 在线观看网站av | 99久久久国产免费 | 免费高清av在线看 | 五月婷婷爱 | 久久精品免费看 | 激情综合五月 | 亚洲综合狠狠干 | 中文字幕在线观看你懂的 | 99精品欧美一区二区 | 伊人五月在线 | 色婷婷激情电影 | 亚州国产精品久久久 | 正在播放一区二区 | av免费网页 | 四虎影视成人永久免费观看视频 | 午夜精品成人一区二区三区 | 色偷偷888欧美精品久久久 | 亚洲精品国产精品久久99热 | 最新国产精品亚洲 | 欧美九九九 | 中文字幕在线播放av | 人人爱人人爽 | 蜜桃视频日韩 | 中国一级片在线观看 | www.狠狠操.com | 久久久91精品国产一区二区三区 | 激情综合亚洲 | 久草在线免费资源 | 最新av免费 | japanesefreesex中国少妇 | 久草精品在线播放 | 婷婷免费在线视频 | 99国产精品免费网站 | 日韩v欧美v日本v亚洲v国产v | 精品美女久久久久久免费 | 亚洲精品免费播放 | 91丨九色丨国产在线观看 | 在线播放91 | 欧美日韩国产精品一区二区 | 91精品啪在线观看国产线免费 | 黄色字幕网 | 国产午夜视频在线观看 | 91麻豆精品国产91久久久久久 | 欧美成年性 | 一区二区三区四区五区六区 | www.91成人 | 四虎8848免费高清在线观看 | 日韩免费在线观看网站 | 日本高清中文字幕有码在线 | 国内精品久久久久久久久久清纯 | 国产亚洲精品成人av久久影院 | 国产免费观看久久黄 | 91在线免费播放 | 日韩在线视 | 国产99久久精品一区二区300 | 国产精品理论片 | 欧美日韩国产一区二 | 欧美国产日韩一区二区三区 | 69亚洲乱 | 五月婷久久 | 日韩日韩日韩日韩 | 成人一区二区三区在线观看 | www.福利视频 | 五月激情亚洲 | 一区二区三区四区五区在线 | 91大神视频网站 | 国产va在线观看免费 | 亚洲区二区 | 69国产盗摄一区二区三区五区 | 日韩精品久久一区二区三区 | 国产精品高清免费在线观看 | 久久这里精品视频 | 欧美午夜久久久 | 国产精品一区在线播放 | 91av手机在线观看 | 免费91麻豆精品国产自产在线观看 | 国产精品mv在线观看 | 精品国产中文字幕 | 国产视频一二区 | 成人a视频在线观看 | 国产精品夜夜夜一区二区三区尤 | 欧美精品在线观看免费 | 国产小视频免费观看 | 天天搞天天 | 欧美日韩一区二区三区在线免费观看 | 麻豆视频一区 | 亚州av成人| 日本aaaa级毛片在线看 | 精品在线不卡 | 中文字幕电影一区 | www天天操 | 激情文学丁香 | 又长又大又黑又粗欧美 | 久久综合中文色婷婷 | 国产精品mv在线观看 | 丁香婷婷色| 狠狠的日日| 999久久国精品免费观看网站 | 丝袜美腿在线 | 日韩视频中文字幕在线观看 | 国产精品免费观看在线 | 99久久精品国产观看 | 国产精品二区三区 | 五月天激情婷婷 | 最新av在线播放 | 亚洲免费视频在线观看 | 国产日产在线观看 |