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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux下c/c++实例之socket服务器实例

發(fā)布時(shí)間:2025/3/15 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下c/c++实例之socket服务器实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、簡(jiǎn)介

?

二、詳解

簡(jiǎn)單socket服務(wù)器和客戶端(基礎(chǔ))

服務(wù)器:

/* * socket簡(jiǎn)單編程 服務(wù)端*/#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h>#define BUFFSIZE 1024int main(int argc, char *argv[]) {int server_sockfd = 0;int client_sockfd = 0;int len = 0;int sin_size = 0;struct sockaddr_in server_addr;struct sockaddr_in client_addr;char buf[BUFFSIZE] = {0};bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_port = htons(8000);if((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){perror("socket error!\n");return -1;}if(bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) < 0){perror("bind error!\n");return -1;}if(listen(server_sockfd, 5) < 0){perror("listen error!\n");return -1;}sin_size= sizeof(struct sockaddr_in);if((client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &sin_size)) < 0){perror("accept error!\n");return -1;}printf("accept client %s\n",inet_ntoa(client_addr.sin_addr));len = send(client_sockfd, "Hello word!\n",30,0);while((len = recv(client_sockfd, buf, BUFFSIZE, 0)) >0){buf[len] = '\0';printf("buf = %s\n",buf);if(send(client_sockfd, buf, len, 0) < 0){perror("send error!\n");return -1;}}close(client_sockfd);close(server_sockfd);return 0; }

?客戶端:

/* * socket簡(jiǎn)單編程 客戶端*/#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h>#define BUFFSIZE 1024int main(int argc, char *argv[]) {int client_sockfd = 0;int len = 0;struct sockaddr_in server_addr;char buf[BUFFSIZE] = {0};bzero(&server_addr, sizeof(struct sockaddr_in));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");server_addr.sin_port = htons(8000);if((client_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){perror("socket error!\n");return -1;}if(connect(client_sockfd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)) < 0){perror("client error!\n");return -1;}printf("connect success!\n");len = recv(client_sockfd, buf, BUFFSIZE, 0);buf[len] = '\0';printf("client_buf = %s\n",buf);while(1){printf("Enter string to send:");scanf("%s",buf);if(!strcmp(buf,"quit")){break;}len = send(client_sockfd, buf, strlen(buf), 0);len = recv(client_sockfd, buf, BUFFSIZE, 0);buf[len] = '\0';printf("received: %s\n",buf);}close(client_sockfd);return 0; }

?

(1)多線程并發(fā)服務(wù)器server.c

//使用pthread線程庫(kù) #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> #include <stdlib.h> #define PORT 1234 //服務(wù)器端口 #define BACKLOG 5 //listen隊(duì)列等待的連接數(shù) #define MAXDATASIZE 1024 //緩沖區(qū)大小void process_cli(int connectfd, struct sockaddr_in client); //客戶端請(qǐng)求處理函數(shù) void* start_routine(void* arg); //線程函數(shù)typedef struct _ARG {int connfd;struct sockaddr_in client; }ARG; //客戶端結(jié)構(gòu)體void main() {int listenfd, connectfd; //socket描述符pthread_t thread; //線程體變量ARG *arg; //客戶端結(jié)構(gòu)體變量struct sockaddr_in server; //服務(wù)器地址信息結(jié)構(gòu)體struct sockaddr_in client; //客戶端地址信息結(jié)構(gòu)體int sin_size;if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { //調(diào)用socket,創(chuàng)建監(jiān)聽(tīng)客戶端的socketperror("Creating socket failed.");exit(1);}int opt = SO_REUSEADDR; setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); //設(shè)置socket屬性,端口可以重用//初始化服務(wù)器地址結(jié)構(gòu)體bzero(&server,sizeof(server));server.sin_family=AF_INET;server.sin_port=htons(PORT);server.sin_addr.s_addr = htonl (INADDR_ANY);if (bind(listenfd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1) { //調(diào)用bind,綁定地址和端口perror("Bind error.");exit(1);} if(listen(listenfd,BACKLOG) == -1){ //調(diào)用listen,開(kāi)始監(jiān)聽(tīng)perror("listen() error\n");exit(1);}sin_size=sizeof(struct sockaddr_in);while(1) {if ((connectfd = accept(listenfd,(struct sockaddr *)&client,(socklen_t *)&sin_size))==-1) { //調(diào)用accept,返回與服務(wù)器連接的客戶端描述符perror("accept() error\n");exit(1);}arg = new ARG;arg->connfd = connectfd;memcpy(&arg->client, &client, sizeof(client));if (pthread_create(&thread, NULL, start_routine, (void*)arg)) { //創(chuàng)建線程,以客戶端連接為參數(shù),start_routine為線程執(zhí)行函數(shù)perror("Pthread_create() error");exit(1);}}close(listenfd); //關(guān)閉監(jiān)聽(tīng)socket }void process_cli(int connectfd, sockaddr_in client) {int num;char recvbuf[MAXDATASIZE], sendbuf[MAXDATASIZE], cli_name[MAXDATASIZE];printf("You got a connection from %s. ",inet_ntoa(client.sin_addr) );num = recv(connectfd, cli_name, MAXDATASIZE,0);if (num == 0) {close(connectfd);printf("Client disconnected.\n");return;}cli_name[num - 1] = '\0';printf("Client's name is %s.\n",cli_name);while (num = recv(connectfd, recvbuf, MAXDATASIZE,0)) {recvbuf[num] = '\0';printf("Received client( %s ) message: %s",cli_name, recvbuf);for (int i = 0; i < num - 1; i++) {sendbuf[i] = recvbuf[num - i -2];}sendbuf[num - 1] = '\0';send(connectfd,sendbuf,strlen(sendbuf),0);}close(connectfd); } void* start_routine(void* arg) {ARG *info;info = (ARG *)arg;process_cli(info->connfd, info->client);delete info;pthread_exit(NULL); }

客戶端:

#include <iostream>using namespace std; string m_strIP = "172.168.1.242"; int m_nPort = 15003;void main() {int fd;int retcode;int recv_count;char *rcvbuf;struct sockaddr_in addr;struct timeval timeo = {10, 0};unsigned long flags;memset(&addr,0x00,sizeof(struct sockaddr_in));fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr(m_strIP);addr.sin_port = htons(m_nPort);//flags = fcntl(fd, F_GETFL, 0);//fcntl(fd, F_SETFL, flags | O_NONBLOCK);retcode = connect(fd, (struct sockaddr*)&addr, sizeof(addr));recv_count = recv(fd, rcvbuf, 26, 0);cout<<recv_count<<endl;cout<<rcvbuf<<endlif(0 == retcode){ if (fcntl(fd, F_SETFL, flags) < 0){ cout<<"Connect error!"<<endl;return -1;}else{cout<<"Connect ok sockfd!"<<endl;return fd;}} }

(2)select非阻塞服務(wù)器
select單線程服務(wù)器:

#include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <sys/socketvar.h> #include <fcntl.h> #include <netinet/in.h> #include <arpa/inet.h>const int MAX_CLIENT = 40; using namespace std; int main() {int m_nSocket;sockaddr_in m_stSockaddr;string m_strIP = "172.168.1.242";int m_nPort = 15003;m_nSocket = socket(AF_INET, SOCK_STREAM, 0);if (m_nSocket < 0){cout<<"Create failed!"<<endl;return 1;}cout<<"socket succed!"<<endl;fcntl(m_nSocket, F_SETFL, O_NONBLOCK); //設(shè)置socket非阻塞int nTmp = 1;int nRet =setsockopt(m_nSocket, SOL_SOCKET, SO_REUSEADDR, &nTmp, sizeof(int));if (nRet < 0){return 1;}cout<<"fcntl succed!"<<endl;// 設(shè)置SOCKET接收地址和端口memset (&m_stSockaddr, 0, sizeof(m_stSockaddr));m_stSockaddr.sin_family = AF_INET;m_stSockaddr.sin_addr.s_addr = inet_addr(m_strIP.c_str());m_stSockaddr.sin_port = htons (m_nPort);nRet = bind (m_nSocket, (struct sockaddr*)&m_stSockaddr,sizeof(m_stSockaddr));if (nRet < 0){return 1;}cout<<"bind succed!"<<endl;nRet = listen (m_nSocket, MAX_CLIENT);if (nRet < 0){return 1;}cout<<"listen succed!"<<endl;fd_set readfds;fd_set rdfds;struct timeval tv;sockaddr_in clientAddr;tv.tv_sec=60; // select超時(shí)時(shí)間tv.tv_usec=0;int clientfd;FD_ZERO(&readfds);FD_ZERO(&rdfds);FD_SET(m_nSocket, &readfds);while(1){cout<<"connecting........."<<endl;rdfds = readfds;nRet=select(m_nSocket+1, &rdfds, NULL, NULL, &tv);if(nRet > 0){if(FD_ISSET(m_nSocket, &readfds)){clientfd = accept(m_nSocket, (struct sockaddr*)&clientAddr, &sizeof(clientAddr));if(clientfd<0){cout<<"accept error!"<<endl;continue;}else if(send (clientfd,"Hello,you are connected!\n",26,0) != -1){cout<<"send succedd"<<endl;}close(clientfd);}}}return 0; }

select多線程服務(wù)器:
select服務(wù)器:
socket_server.h(頭文件):

#ifndef _SOCKET_SERVER_H_ #define _SOCKET_SERVER_H_ #include <iostream> #include <errno.h> #include <stdio.h> using namespace std; struct thread_param {void *t_this;int sockd; }; class socket_server { public:socket_server();virtual ~socket_server();void socket_op();void *sock_thread(); private:void my_err(const char*err_string, char *function, int line);int sock_array[10000];int nSock;int maxfd; }; #endif

socket_server.cpp:

#include "socket_server.h" #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <fcntl.h>socket_server::socket_server() {memset(sock_array, 0, sizeof(sock_array));nSock = 0; }socket_server::~socket_server() { }void *sock_thread_proc(void *arg) {pthread_detach(pthread_self());socket_server *p_sock = (socket_server *)arg;p_sock->sock_thread();return ((void *)0); }void *socket_server::sock_thread() {struct timeval tv;//gettimeofday(&tv, NULL);tv.tv_sec=10; // select超時(shí)時(shí)間tv.tv_usec=0; fd_set readfds;fd_set writefds;FD_ZERO(&readfds);FD_ZERO(&writefds);int nRet;int ret;int i,j;char recv_buf[128] = {0};while(1) { if (nSock == 0) {sleep(4);cout<<"nsock is zero"<<endl;continue;}maxfd = sock_array[0];FD_SET(sock_array[0], &readfds);for (i = 1; i< nSock; i++) {FD_SET(sock_array[i], &readfds);if (sock_array[i] > maxfd)maxfd = sock_array[i];}cout<<"maxfd:"<<maxfd<<endl;nRet=select(maxfd + 1, &readfds, NULL, NULL, &tv);if(nRet>0) {for (i = 0; i < nSock; i++) {if (FD_ISSET(sock_array[i], &readfds)) {if ((ret = recv(sock_array[i], recv_buf, sizeof(recv_buf), 0)) < 0)my_err("recv", __FUNCTION__, __LINE__);if (ret > 0) {recv_buf[ret] = '\0';cout<<"server接受數(shù)據(jù):"<<recv_buf<<endl;}elsecout<<"server無(wú)數(shù)據(jù)。"<<endl;FD_SET(sock_array[i], &writefds);nRet=select(sock_array[i] + 1, NULL, &writefds, NULL, &tv);if(nRet > 0) {if (FD_ISSET(sock_array[i], &writefds)) {char *send_data = "接受數(shù)據(jù)成功!";if (send(sock_array[i], send_data, strlen(send_data), 0) < 0){my_err("send", __FUNCTION__, __LINE__);}cout<<"send succeed"<<endl;}}elsecout<<"發(fā)送超時(shí)!"<<endl;//關(guān)閉該套接字close(sock_array[i]);for (j = i; j < nSock - 1; j++) {sock_array[j] = sock_array[j + 1];}nSock--;}}}else {cout<<"接收超時(shí)!"<<endl;break;}cout<<"******deal sock finish******"<<endl;}return ((void *)0); } void socket_server::my_err(const char*err_string, char *function, int line) {fprintf(stderr, "func[%s]line:%d\n", function, line);perror(err_string);exit(1); } void socket_server::socket_op() {pthread_t pid;pthread_create(&pid, NULL, sock_thread_proc, this);int sock_fd;int new_sockfd;struct sockaddr_in serv_addr;struct sockaddr_in client_addr;int nRet;int i;sock_fd = socket(AF_INET, SOCK_STREAM, 0);if (sock_fd < 0)my_err("socket", __FUNCTION__, __LINE__);fcntl(sock_fd, F_SETFL, O_NONBLOCK); //設(shè)置socket非阻塞int optval = 1;//可以重新綁定端口if (setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&optval, sizeof(int)) < 0)my_err("setsockopt", __FUNCTION__, __LINE__);memset(&serv_addr, 0, sizeof(struct sockaddr_in));serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(4507);serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);nRet = bind(sock_fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in));if (nRet < 0)my_err("bind", __FUNCTION__, __LINE__);nRet = listen(sock_fd, 10000);if (nRet < 0)my_err("listen", __FUNCTION__, __LINE__);fd_set readfds;FD_ZERO(&readfds);struct timeval tv;//gettimeofday(&tv, NULL);tv.tv_sec = 10; // select超時(shí)時(shí)間tv.tv_usec=0;socklen_t addr_len = sizeof(struct sockaddr_in);while(1) {FD_SET(sock_fd, &readfds);nRet=select(sock_fd + 1, &readfds, NULL, NULL, &tv);if(nRet > 0) {if (FD_ISSET(sock_fd, &readfds)) {new_sockfd = accept(sock_fd, (struct sockaddr*)&client_addr, &addr_len);sock_array[nSock++] = new_sockfd; //入數(shù)組}}else if(nRet == 0) {cout<<"waiting for connecting......"<<endl;continue;}else {cout<<"select error!"<<endl;}} } int main() {socket_server *obj = new socket_server();cout<<"******socket server begin to accept client******"<<endl;obj->socket_op();delete obj;return 0; }

select客戶端:
socket_client.h(頭文件):

#ifndef _SOCKET_CLIENT_H_ #define _SOCKET_CLIENT_H_ #include <iostream> #include <errno.h> #include <stdio.h> #include <stdlib.h> using namespace std; class socket_client { public:socket_client();virtual ~socket_client();void socket_connect(const int conn_timeout); private:void my_err(const char*err_string, char *function, int line);};#endif

socket_client.cpp:

#include "socket_client.h" #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <fcntl.h> #include <arpa/inet.h>socket_client::socket_client() { }socket_client::~socket_client() { }void socket_client::my_err(const char*err_string, char *function, int line) {fprintf(stderr, "func[%s]line:%d\n", function, line);perror(err_string);exit(1); }void socket_client::socket_connect(const int conn_timeout) {int sock_fd;int nRet;struct sockaddr_in addr;fd_set rdset;fd_set wtset;int retval;char sndbuff[1024] = "socket connnect to the server succeed.";char recv_buf[1024] = {0};sock_fd = socket(AF_INET, SOCK_STREAM, 0);if (sock_fd < 0)my_err("socket", __FUNCTION__, __LINE__);addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr("127.0.0.1");addr.sin_port = htons(4507);if (fcntl(sock_fd, F_SETFL, fcntl(sock_fd, F_GETFL) | O_NONBLOCK) < 0) {my_err("fcntl", __FUNCTION__, __LINE__);}nRet = connect(sock_fd, (struct sockaddr*)&addr, sizeof(addr));if (nRet < 0) {my_err("fcntl", __FUNCTION__, __LINE__);}FD_ZERO(&wtset);FD_SET(sock_fd, &wtset);struct timeval tv;tv.tv_sec = conn_timeout; // select超時(shí)時(shí)間tv.tv_usec = 0;retval = select(sock_fd + 1, NULL, &wtset, NULL, &tv);if (retval == 0) {cout<<"send timeout......"<<endl;}else if (retval > 0) {if(FD_ISSET (sock_fd, &wtset)) {if (send(sock_fd, sndbuff, strlen(sndbuff), 0) < 0)my_err("send", __FUNCTION__, __LINE__);cout<<"send succeed!"<<endl;} } FD_ZERO(&rdset);FD_SET(sock_fd, &rdset);retval = select(sock_fd + 1, &rdset, NULL, NULL, &tv);if (retval == 0) {cout<<"recv timeout......"<<endl;}else if (retval > 0) {if(FD_ISSET (sock_fd, &rdset)) {if ((retval = recv(sock_fd, recv_buf, sizeof(recv_buf), 0)) < 0)my_err("recv", __FUNCTION__, __LINE__); recv_buf[retval] = '\0';cout<<"server接受數(shù)據(jù):"<<recv_buf<<endl;} } close(sock_fd); } int main() {socket_client *obj = new socket_client();obj->socket_connect(10);delete obj;return 0; }

(3)pool非阻塞服務(wù)器和客戶端
pool服務(wù)器:
socket_server.h(頭文件):

#ifndef _SOCKET_SERVER_H_ #define _SOCKET_SERVER_H_ #include <iostream> #include <errno.h> #include <stdio.h> #include <poll.h> using namespace std; struct thread_param {void *t_this;int sockd; }; class socket_server { public:socket_server();virtual ~socket_server();void socket_op();void *sock_thread();void sock_recvsend(int sockfd); private:void my_err(const char*err_string, char *function, int line);int sock_array[10000];int nSock;int maxfd;struct pollfd fds[10000]; }; #endif

socket_server.cpp:

#include "socket_server.h" #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <fcntl.h> #include <poll.h>socket_server::socket_server() {pthread_mutex_init(&m_mutex, NULL);pthread_mutex_init(&m_lock, NULL);pthread_cond_init(&c_lock, NULL);memset(sock_array, 0, sizeof(sock_array));nSock = 0; }socket_server::~socket_server() {pthread_mutex_destroy(&m_mutex);pthread_mutex_destroy(&m_lock);pthread_cond_destroy(&c_lock); }void *sock_thread_proc(void *arg) {pthread_detach(pthread_self());socket_server *p_sock = (socket_server *)arg;p_sock->sock_thread();return ((void *)0); } void *sock_recvsend_proc(void *arg) {pthread_detach(pthread_self());thread_param *p_arg = (thread_param *)arg;socket_server *p_sock = (socket_server *)p_arg->t_this;p_sock->sock_recvsend(p_arg->sockd);delete p_arg;return ((void *)0); } void socket_server::sock_recvsend(int sockfd) {char sndbuff[32767] = {0};int timeout = 10*1000;int ret;int nRet;int count;char recv_buf[32767] = {0};FILE *fp = fopen("./body.txt", "r+");fseek(fp, 0, SEEK_END);int len = ftell(fp);fseek(fp, 0, SEEK_SET);fread(sndbuff, 1, len, fp);while(1) {struct pollfd event;memset(&event, 0, sizeof(event));event.fd = sockfd;event.events = POLLIN;recv_continue:nRet = poll((struct pollfd*)&event, 1, timeout);if (nRet < 0) {printf("poll error!\n");exit(1); }else if (nRet > 0){ //有事件發(fā)生if (event.revents & POLLIN) {if ((ret = recv(event.fd, recv_buf, sizeof(recv_buf), 0)) < 0)my_err("recv", __FUNCTION__, __LINE__);if (ret == 0) {cout<<"out"<<endl;break;}cout<<"server接受數(shù)據(jù):"<<ret<<":"<<strlen(recv_buf)<<endl;recv_buf[ret] = '\0';if(strstr(recv_buf,"Envelope>") == NULL){goto recv_continue;}}memset(&event, 0, sizeof(event));event.fd = sockfd;event.events = POLLOUT;send_continue:nRet = poll((struct pollfd*)&event, 1, timeout);if (nRet > 0) {if (event.revents & POLLOUT) {if ((count = send(event.fd, sndbuff, strlen(sndbuff), 0)) < 0){my_err("send", __FUNCTION__, __LINE__);}cout<<"count:"<<count<<endl;if (count < len) {len = len - count;goto send_continue;} }}else {cout<<"發(fā)送超時(shí)!"<<endl;}}else if(nRet == 0) {cout<<"waiting for connecting123......"<<endl;continue;}else {cout<<"poll error!"<<endl;}}close(sockfd); } void *socket_server::sock_thread() {int timeout = 10*1000;int nRet;int i,j;while(1) { pthread_mutex_lock(&m_mutex);int num = nSock;pthread_mutex_unlock(&m_mutex);while (nSock == 0) {pthread_mutex_lock(&m_lock);pthread_cond_wait(&c_lock, &m_lock);pthread_mutex_unlock(&m_lock);}memset(fds, 0, sizeof(struct pollfd)*10000);for (i = 0; i < nSock; i++) {fds[i].fd = sock_array[i];fds[i].events = POLLIN;}nRet = poll(fds, nSock, timeout);if (nRet < 0) {printf("poll error!\n");exit(1); }else if (nRet > 0){ //有事件發(fā)生for (i = 0; i < nSock; i++) {if (fds[i].revents & POLLIN) {pthread_t pid;thread_param *param = new thread_param();param->t_this = this;param->sockd = fds[i].fd;pthread_create(&pid, NULL, sock_recvsend_proc, param);pthread_mutex_lock(&m_mutex);for (j = i; j < nSock - 1;j++) {sock_array[j] = sock_array[j + 1];}nSock--; pthread_mutex_unlock(&m_mutex);}}}else {cout<<"接收超時(shí)!"<<endl;break;}}return ((void *)0); } void socket_server::my_err(const char*err_string, char *function, int line) {fprintf(stderr, "func[%s]line:%d\n", function, line);perror(err_string);exit(1); } void socket_server::socket_op() {pthread_t pid;pthread_create(&pid, NULL, sock_thread_proc, this);int sock_fd;int new_sockfd;struct sockaddr_in serv_addr;struct sockaddr_in client_addr;int nRet;int i;sock_fd = socket(AF_INET, SOCK_STREAM, 0);if (sock_fd < 0)my_err("socket", __FUNCTION__, __LINE__);fcntl(sock_fd, F_SETFL, O_NONBLOCK); //設(shè)置socket非阻塞int optval = 1;//可以重新綁定端口if (setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&optval, sizeof(int)) < 0)my_err("setsockopt", __FUNCTION__, __LINE__);memset(&serv_addr, 0, sizeof(struct sockaddr_in));serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(4507);serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);nRet = bind(sock_fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in));if (nRet < 0)my_err("bind", __FUNCTION__, __LINE__);nRet = listen(sock_fd, 10000);if (nRet < 0)my_err("listen", __FUNCTION__, __LINE__);int timeout = 5*1000;struct pollfd p_fds;socklen_t addr_len = sizeof(struct sockaddr_in);memset(&p_fds, 0, sizeof(p_fds));p_fds.fd = sock_fd;p_fds.events = POLLIN;while(1) {nRet = poll((struct pollfd*)&p_fds, 1, timeout);if(nRet > 0) {if (p_fds.revents & POLLIN) {new_sockfd = accept(sock_fd, (struct sockaddr*)&client_addr, &addr_len);pthread_mutex_lock(&m_mutex);sock_array[nSock++] = new_sockfd; //入數(shù)組pthread_cond_signal(&c_lock);pthread_mutex_unlock(&m_mutex);}}else if(nRet == 0) {cout<<"waiting for connecting......"<<endl;continue;}else {cout<<"poll error!"<<endl;}}close(sock_fd); } int main() {socket_server *obj = new socket_server();cout<<"******socket server begin to accept client******"<<endl;obj->socket_op();delete obj;return 0; }

pool客戶端:
socket_client.h(頭文件):

#ifndef _SOCKET_CLIENT_H_ #define _SOCKET_CLIENT_H_ #include <iostream> #include <errno.h> #include <stdio.h> #include <stdlib.h> using namespace std; class socket_client { public:socket_client();virtual ~socket_client();void socket_connect(const int conn_timeout); private:void my_err(const char*err_string, char *function, int line);};#endif

socket_client.cpp:

#include "socket_client.h" #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <fcntl.h> #include <arpa/inet.h> #include <poll.h>socket_client::socket_client() { }socket_client::~socket_client() { }void socket_client::my_err(const char*err_string, char *function, int line) {fprintf(stderr, "func[%s]line:%d\n", function, line);perror(err_string);exit(1); }void socket_client::socket_connect(const int conn_timeout) {int sock_fd;int nRet;struct sockaddr_in addr;fd_set rdset;fd_set wtset;int retval;char sndbuff[81920] = {0};FILE *fp = fopen("./file.txt", "r+");fseek(fp, 0, SEEK_END);int len = ftell(fp);fseek(fp, 0, SEEK_SET);fread(sndbuff, 1, len, fp);//cout<<len<<":"<<strlen(sndbuff)<<endl;char recv_buf[81920] = {0};sock_fd = socket(AF_INET, SOCK_STREAM, 0);if (sock_fd < 0)my_err("socket", __FUNCTION__, __LINE__);//int nRecvBuf = 32 * 1024;//if (setsockopt(sock_fd, SOL_SOCKET, SO_RCVBUF, (const char*)&nRecvBuf, sizeof(int)) < 0)// my_err("setsockopt", __FUNCTION__, __LINE__);addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr("172.168.1.242");addr.sin_port = htons(4507);nRet = connect(sock_fd, (struct sockaddr*)&addr, sizeof(addr));if (nRet < 0) {my_err("connect", __FUNCTION__, __LINE__);}if (fcntl(sock_fd, F_SETFL, fcntl(sock_fd, F_GETFL) | O_NONBLOCK) < 0) {my_err("fcntl", __FUNCTION__, __LINE__);}cout<<"sock_fd1:"<<sock_fd<<endl;for (int i = 0; i < 1000; i++){int timeout = 10*1000;struct pollfd event;int send_count = 0;memset(&event, 0, sizeof(event));event.fd = sock_fd;event.events = POLLOUT;send_again:retval = poll((struct polled*)&event, 1, timeout);if (retval == 0) {cout<<"send timeout......"<<endl;}else if (retval > 0) {if(event.revents & POLLOUT) {if ((send_count = send(event.fd, sndbuff, strlen(sndbuff), 0)) < 0)my_err("send", __FUNCTION__, __LINE__);cout<<"send succeed:"<<send_count<<endl;if (send_count < len) {len = len - send_count;goto send_again;} }} // while (1) {memset(&event, 0, sizeof(event));event.fd = sock_fd;event.events = POLLIN; retry: retval = poll((struct polled*)&event, 1, timeout);if (retval == 0) {cout<<"recv timeout......"<<endl;}else if (retval > 0) {if(event.revents & POLLIN) {memset(recv_buf, 0, sizeof(recv_buf));//cout<<"bein"<<endl;if ((retval = recv(event.fd, recv_buf, sizeof(recv_buf), 0)) < 0)my_err("recv", __FUNCTION__, __LINE__);if (retval == 0) {break;} recv_buf[retval] = '\0';cout<<"server接受數(shù)據(jù):"<<strlen(recv_buf)<<endl;//fwrite(recv_buf, 1, strlen(recv_buf), fd);if(strstr(recv_buf,"Envelope>")==NULL){//cout<<"server接受數(shù)據(jù):"<<strlen(recv_buf)<<":"<<recv_buf<<endl;goto retry;}// cout<<"server接受數(shù)據(jù):"<<strlen(recv_buf)<<":"<<recv_buf<<endl;} }//}} close(sock_fd); } int main() {socket_client *obj = new socket_client();struct timeval *t_start, *t_end;int timeuse;int i;t_start = new timeval();gettimeofday(t_start, NULL);for(i = 0; i < 1; i++)obj->socket_connect(10);t_end = new timeval();gettimeofday(t_end, NULL);timeuse = 1000000 * (t_end->tv_sec - t_start->tv_sec ) + t_end->tv_usec - t_start->tv_usec; printf("時(shí)間為(ms):%d, %d\n", timeuse,timeuse/1000);delete obj;delete t_start;delete t_end;return 0; }

makefile:

CC=g++ CFLAGS=-g -DDEBUG LDFLAGS= LIBS= all: socket_client socket_serversocket_client: socket_client.cpp$(CC) -o $@ $(LDFLAGS) socket_client.cpp $(LIBS) socket_server: socket_server.cpp$(CC) -o $@ $(LDFLAGS) socket_server.cpp $(LIBS) clean:rm -rf *.o socket_client socket_server

(4)epool非阻塞服務(wù)器和客戶端

epool服務(wù)器:

#include <stdio.h> #include <sys/epoll.h> #include <stdlib.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/resource.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <strings.h> #define MAXBUF 1024 #define MAXEPOLLSIZE 10000 int main(int argc, char *argv[]) {int listener, new_fd, kdpfd, nfds, n, ret, curfds;socklen_t len;struct sockaddr_in my_addr,their_addr;struct epoll_event ev;struct epoll_event pevent[MAXEPOLLSIZE];struct rlimit rt;rt.rlim_max = rt.rlim_cur = MAXEPOLLSIZE;if (setrlimit(RLIMIT_NOFILE, &rt) == -1) {perror("setrlimit");exit(1);}else {printf("設(shè)置系統(tǒng)資源參數(shù)成功!\n");}if( (listener = socket( AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket");exit(1);}else {printf("socket 創(chuàng)建成功!\n");}if (fcntl(listener, F_SETFL, fcntl(listener, F_GETFD, 0) | O_NONBLOCK) == -1) {perror("fcntl");return -1;}my_addr.sin_family = PF_INET;my_addr.sin_port = htons(5000);my_addr.sin_addr.s_addr = INADDR_ANY;if ( bind( listener, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)) == -1 ) {perror("bind");exit(1);}else {printf("IP 地址和端口綁定成功\n");}if (listen(listener, 2) == -1) {perror("listen");exit(1);}else{printf("開(kāi)啟服務(wù)成功!\n");}kdpfd = epoll_create(MAXEPOLLSIZE);len = sizeof(struct sockaddr_in);ev.events = EPOLLIN | EPOLLET;ev.data.fd = listener;if( epoll_ctl(kdpfd, EPOLL_CTL_ADD, listener, &ev) < 0 ) {fprintf( stderr, "epoll set insertion error: fd=%d\n", listener );return -1;}else {printf("監(jiān)聽(tīng) socket 加入 epoll 成功!\n");}curfds = 1;int timeout = 10*1000;while(1) {/* 等待有事件發(fā)生 */nfds = epoll_wait(kdpfd, pevent, curfds, timeout);if( nfds == -1 ) {perror("epoll_wait");break;}else if (nfds == 0) {printf("waiting for connecting...\n");continue;}for (n = 0; n < nfds; n++) {if (pevent[n].data.fd == listener) {new_fd = accept(listener, (struct sockaddr*)&their_addr, &len );if( new_fd < 0 ){perror("accept");continue;}else{printf("有連接來(lái)自于: %s:%d, 分配的 socket 為:%d\n",inet_ntoa(their_addr.sin_addr), ntohs(their_addr.sin_port), new_fd);}if (fcntl(new_fd, F_SETFL, fcntl(new_fd, F_GETFD, 0) | O_NONBLOCK) == -1){perror("fcntl");return -1;}ev.events = EPOLLIN | EPOLLET;ev.data.fd = new_fd;if(epoll_ctl( kdpfd, EPOLL_CTL_ADD, new_fd, &ev) < 0) {fprintf(stderr, "把 socket '%d' 加入 epoll 失敗!%s\n",new_fd, strerror(errno));return -1;}curfds ++;}else if(pevent[n].events & EPOLLOUT){char buf[MAXBUF + 1];int len;bzero(buf, MAXBUF + 1);len = recv(pevent[n].data.fd, buf, MAXBUF, 0);if (len > 0){printf("%d接收消息成功:'%s',共%d個(gè)字節(jié)的數(shù)據(jù)\n", pevent[n].data.fd, buf, len);}else{if (len < 0)printf("消息接收失敗!錯(cuò)誤代碼是%d,錯(cuò)誤信息是'%s'/n", errno, strerror(errno));elseprintf("recv empty\n");close(pevent[n].data.fd);continue;}if (len ==0 && errno != 11) {epoll_ctl(kdpfd, EPOLL_CTL_DEL, pevent[n].data.fd,&ev);curfds--;}}}}close(listener);close(kdpfd);return 0; }

epoll客戶端:

#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/epoll.h> #include <stdlib.h> #include <sys/types.h> #include <netinet/in.h> #include <string.h> #define MAXEPOLLSIZE 10000 int main() {int sock_fd;struct sockaddr_in addr;struct epoll_event ev;struct epoll_event pevent[MAXEPOLLSIZE];int nRet;int count = 0;if( (sock_fd = socket( PF_INET, SOCK_STREAM, 0)) == -1) {perror("socket");exit(1);}addr.sin_family = PF_INET;addr.sin_addr.s_addr = inet_addr("127.0.0.1");addr.sin_port = htons(5000);nRet = connect(sock_fd, (struct sockaddr*)&addr, sizeof(addr));if (nRet < 0) {perror("connect");return -1;}if (fcntl(sock_fd, F_SETFL, fcntl(sock_fd, F_GETFD, 0) | O_NONBLOCK) == -1) {perror("fcntl");return -1;}int kdpfd = epoll_create(MAXEPOLLSIZE);int len = sizeof(struct sockaddr_in);ev.events = EPOLLOUT | EPOLLET;ev.data.fd = sock_fd;if( epoll_ctl(kdpfd, EPOLL_CTL_ADD, sock_fd, &ev) < 0 ) {fprintf( stderr, "epoll set insertion error: fd=%d\n", sock_fd);return -1;}int curfds = 1;int timeout = 10*1000;int nfds;while(1) {nfds = epoll_wait(kdpfd, pevent, curfds, timeout);if( nfds == -1 ) {perror("epoll_wait");break;}else if (nfds == 0) {printf("waiting for connecting...\n");continue;}int n;printf("nfds:%d\n", nfds);for (n = 0; n < nfds; n++) {if (pevent[n].evnets & EPOLLIN) {char send_buf[100] = "my name is aoyang";count = send(pevent[n].data.fd, send_buf, strlen(send_buf), 0);if (count != strlen(send_buf)) {printf("send error!\n");}printf("count:%d\n", count);epoll_ctl(kdpfd, EPOLL_CTL_DEL, pevent[n].data.fd,&ev);curfds--;close(pevent[n].data.fd);return 0;}}} }

(5)其他設(shè)計(jì)

#include "user_exception.h" #include "tcpsocket.h"#if defined (MEM_DEBUG) #define new DEBUG_NEW #define delete DEBUG_DELETE #endifnamespace util { tcpsocket::tcpsocket(): ipsocket() {_runmode = -1; } tcpsocket::~tcpsocket() {close(); }//client use int tcpsocket::create(const char* ipaddr, int port) {::memset(&inet_address, 0, sizeof(inet_address));if (ipaddr == 0){inet_address.sin_addr.s_addr = htonl(INADDR_ANY);}else{ // if (::inet_pton(AF_INET, ipaddr, &inet_address.sin_addr) <= 0) // throw bad_file(__FILE__, __LINE__, bad_file::bad_sock, strerror(errno));inet_address.sin_addr.s_addr = inet_addr(ipaddr) ;}inet_address.sin_family = AF_INET;inet_address.sin_port = htons(port);_runmode = 0;open(TCP);connect(&inet_address);return 0; } //server use int tcpsocket::create(int port) {open(TCP);::memset(&inet_address, 0, sizeof(inet_address));inet_address.sin_family = AF_INET;inet_address.sin_addr.s_addr = htonl(INADDR_ANY);inet_address.sin_port = htons(port);bind(&inet_address);accept(&inet_address);_runmode = 1;return 0; } void tcpsocket::receive(string& msg) {int read_count;int total;int len;char buff[4];if (this == 0)return;// Read length.total = 0;do{read_count = recv(buff + total, 4 - total);if (read_count < 0){if (errno == EINTR)continue;elsethrow bad_file(__FILE__, __LINE__, bad_file::bad_sock, strerror(errno));}total += read_count;if (total == 0) // No data available.throw bad_file(__FILE__, __LINE__, bad_file::bad_sock, strerror(errno));} while (total < 4);// Get message length.len = ((buff[0] & 0xff) << 24) + ((buff[1] & 0xff) << 16) + ((buff[2] & 0xff) << 8) + (buff[3] & 0xff);if (len <= 0)throw bad_file(__FILE__, __LINE__, bad_file::bad_sock, strerror(errno));// Read message.char* data = new char[len + 1];total = 0;do{read_count = ipsocket::recv(data + total, len - total);if (read_count < 0){if (errno == EINTR){continue;}else{delete[] data;throw bad_file(__FILE__, __LINE__, bad_file::bad_sock, strerror(errno));}}total += read_count;} while (total < len);data[len] = '\0';msg = data;delete[] data; #if defined(DEBUG)std::cout << "length = " << msg.length() << " [" << msg << "]" << std::endl; #endif } void tcpsocket::send(const string& msg) { #if defined(DEBUG)std::cout << "length = " << msg.length() << " [" << msg << "]" << std::endl; #endifif (this == 0)return;int write_count;int len = msg.length();char* data = new char[len + 4];// This is length of packet.data[3] = len & 0xff;data[2] = (len >> 8) & 0xff;data[1] = (len >> 16) & 0xff;data[0] = (len >> 24) & 0xff;memcpy(data + 4, msg.c_str(), len);int total = 0;len += 4;do{write_count = ipsocket::send(data + total, len - total);if (write_count < 0){if (errno == EINTR){continue;}else{delete[] data;throw bad_file(__FILE__, __LINE__, bad_file::bad_sock, strerror(errno));}}total += write_count;} while (total < len);delete[] data ; } }

?

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的linux下c/c++实例之socket服务器实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

日本最新高清不卡中文字幕 | 久久网址 | 开心激情五月婷婷 | 欧美日韩一区二区三区免费视频 | 亚洲激情视频在线观看 | 日本xxxx.com| 久久视频国产精品免费视频在线 | 亚洲成 人精品 | 精品在线视频播放 | 日韩av一区在线观看 | 伊人丁香 | 97自拍超碰 | 久久国产精品免费一区 | 国产小视频在线免费观看视频 | 中文在线a天堂 | 一区二区视频在线观看免费 | 免费无遮挡动漫网站 | 成人在线观看免费视频 | 国产成人综合图片 | 日韩素人在线观看 | 91亚洲精品国偷拍自产在线观看 | 国产精彩在线视频 | av在线色 | 国产亚洲精品久久久久久无几年桃 | av免费观看高清 | 亚洲片在线观看 | 国产美女免费观看 | 色婷婷 亚洲 | av大全在线免费观看 | 国产成人一区二区三区电影 | 黄色免费在线看 | 成人h在线观看 | 有码中文字幕 | 色91在线 | 免费网站色 | 日韩av午夜在线观看 | 久草国产在线观看 | 精品一区二区在线看 | 91豆麻精品91久久久久久 | 在线观看中文av | 精品国产激情 | 一区二区三高清 | 亚洲午夜久久久久久久久久久 | 激情图片区 | 国产中年夫妇高潮精品视频 | 999国内精品永久免费视频 | 久久午夜网 | 国产在线视频一区二区 | 亚洲,国产成人av | 91av视频免费观看 | 色狠狠久久av五月综合 | 91精品一区国产高清在线gif | 天天艹天天| 日韩精品在线免费观看 | 樱空桃av | 久久久国产精品人人片99精片欧美一 | 欧美 日韩 性 | 欧美 国产 视频 | 永久精品视频 | 青青草在久久免费久久免费 | 国产三级久久久 | 黄色软件视频网站 | 欧美日韩精品二区第二页 | 亚洲精品视频免费 | 正在播放国产91 | 91亚洲精品久久久中文字幕 | 免费观看一区 | 精品久久久久久久久久久久久久久久 | 三级av中文字幕 | 黄色大片中国 | www.神马久久 | 久久久久久片 | 成人动漫一区二区 | a在线免费观看视频 | 一级国产视频 | 国产手机av在线 | 免费av网址大全 | 91色亚洲| 黄色成人在线观看 | 日韩在线大片 | 日本精品久久久一区二区三区 | 福利一区二区在线 | 成人国产精品电影 | 九九热1| 伊人五月婷 | 色综合久久88色综合天天免费 | 精品人人人 | 日韩一二区在线观看 | 国产精品岛国久久久久久久久红粉 | 00av视频 | 激情五月伊人 | 亚洲va天堂va欧美ⅴa在线 | 免费高清在线视频一区· | 欧美成人xxxx | 久久99热国产 | 亚洲成人一二三 | 九九视频精品免费 | 国产码电影| 久久精品影视 | 日韩电影中文字幕在线观看 | 黄色高清视频在线观看 | 国产特级毛片aaaaaaa高清 | 日韩精品一区二区不卡 | 黄色福利网 | 色偷偷网站视频 | 免费在线国产 | 久草在线网址 | 国产综合精品一区二区三区 | 狠狠色噜噜狠狠狠合久 | 久久国产欧美日韩精品 | 国产欧美在线一区二区三区 | 精品久久美女 | 久久撸在线视频 | 欧美国产亚洲精品久久久8v | 久久九九免费视频 | 欧美一二三区播放 | 91精品在线观看入口 | 四虎成人免费观看 | 久热免费在线观看 | 夜色在线资源 | 黄色毛片一级 | 亚洲午夜电影网 | 婷婷开心久久网 | 不卡的av电影在线观看 | 中文字幕第 | 精品视频 | 综合色在线观看 | 欧美国产不卡 | 欧洲不卡av | 中文字幕中文字幕中文字幕 | 日韩av免费在线看 | 99热99re6国产在线播放 | av888.com| 久草在线看片 | 日本中文字幕在线视频 | 99精品成人 | 欧美国产高清 | 欧美一级电影 | 97精品超碰一区二区三区 | 国产69精品久久久久久久久久 | 中文字幕欧美三区 | 久精品视频在线观看 | 亚洲欧美日韩国产一区二区 | 色诱亚洲精品久久久久久 | 综合激情av | 99热免费在线 | 国产在线日韩 | 亚洲成人av在线电影 | 国产视频一区在线免费观看 | 国产小视频福利在线 | 激情视频一区二区 | 国产精品入口66mio女同 | 国产精品黄色在线观看 | 日韩网站视频 | 成人在线视频免费观看 | 国产99自拍| 97操操操 | 黄视频网站大全 | 久久天天躁狠狠躁亚洲综合公司 | 97视频在线免费 | 亚洲理论在线 | 91私密视频 | 亚洲国产精品电影在线观看 | 97精品国产一二三产区 | 亚洲人成人在线 | 久久任你操 | 丁香午夜 | 99精品偷拍视频一区二区三区 | av一区二区在线观看中文字幕 | 国产伦理久久精品久久久久_ | 在线 视频 一区二区 | 日韩精品免费一区二区在线观看 | 天天射天天搞 | 2019天天干天天色 | 国产自在线观看 | 黄色免费网战 | www.天天操.com| 91豆花在线观看 | 在线看国产精品 | 夜夜爽88888免费视频4848 | 伊人丁香| 日韩免费观看一区二区 | 亚洲久草在线视频 | 中文字幕一区二区三区视频 | 精品电影一区二区 | 久久xx视频 | 欧美精品久久久久a | 一级性视频 | 国产精品久久久久久影院 | 九九亚洲视频 | 九色91av| 在线观看韩日电影免费 | 国产精品18久久久久久久久 | 狠狠操天天操 | 久久久久久久久久伊人 | 日p视频在线观看 | 在线观看国产高清视频 | 亚洲第一成网站 | 奇米导航| 欧美性生交大片免网 | 波多野结衣在线视频一区 | 日韩女同av | 懂色av一区二区在线播放 | 96看片 | 国产成人99久久亚洲综合精品 | 国产又粗又硬又爽的视频 | 久久综合狠狠综合久久综合88 | 欧美日韩在线免费观看视频 | 国产色视频网站 | 最新av中文字幕 | 在线视频亚洲 | 亚洲精品在线看 | 亚洲成人资源在线观看 | 免费看三片 | 国产色拍拍拍拍在线精品 | 国产伦理一区二区三区 | 成人免费视频播放 | 国产精品www | 国产成人精品a | 91精品国产自产91精品 | 免费看的黄网站软件 | 五月色丁香 | 精品一区二区电影 | 91成品人影院| 国产一二三四在线视频 | 日韩黄色网络 | 视频国产区 | 色欧美88888久久久久久影院 | 国产亚洲在线视频 | 蜜桃视频精品 | 国产高清一区二区 | 日韩电影一区二区三区 | 日韩女同一区二区三区在线观看 | 国产一区欧美一区 | 婷婷在线观看视频 | 成人三级网站在线观看 | 五月天综合网站 | 国产资源网 | 中文字幕 国产 一区 | 黄色a在线| 永久免费在线 | 久久亚洲视频 | 国产aaa免费视频 | 国产一区欧美日韩 | 中文字幕久久精品亚洲乱码 | 国产精品成人在线观看 | 久久综合久久综合这里只有精品 | 欧美久草视频 | 成片视频在线观看 | 国产精品久久久网站 | 激情婷婷色 | 亚洲高清免费在线 | 在线观看网站av | 国产一区自拍视频 | 亚洲人视频在线 | 欧美性色综合 | 国产对白av | 久久国产精品色av免费看 | 亚洲精品88欧美一区二区 | 97视频资源| 中文字幕 国产视频 | 日韩精品电影在线播放 | 日日天天干 | 成年在线观看 | 欧美一区中文字幕 | 国产麻豆传媒 | 99自拍视频在线观看 | 97在线观看免费高清完整版在线观看 | 日韩视频免费在线观看 | 中文字幕视频在线播放 | 天天操操操操操操 | 中文字幕字幕中文 | 天天射天天爽 | av在观看| 国产 一区二区三区 在线 | 岛国av在线免费 | 中文字幕在线观看三区 | 亚洲va欧美va人人爽春色影视 | 国产xx在线 | 成年人黄色免费网站 | 国产中的精品av小宝探花 | a级国产乱理伦片在线观看 亚洲3级 | 日韩av女优视频 | 日韩色在线观看 | 日本精品中文字幕在线观看 | 韩国av电影在线观看 | www看片网站 | 手机在线视频福利 | 韩国av免费| www成人精品 | 久草爱视频 | 在线观看深夜福利 | 欧美日韩不卡一区二区三区 | 中文资源在线官网 | 国内亚洲精品 | 欧美精品亚州精品 | 91网页版免费观看 | 欧美精品v国产精品 | 国产精品色| 激情电影影院 | 911国产精品 | 91麻豆精品国产自产 | 欧美日韩亚洲在线 | 91精品黄色| 丁香亚洲| 天天在线免费视频 | 美女免费网视频 | 久久99精品久久久久久久久久久久 | 久久深夜福利免费观看 | 成片人卡1卡2卡3手机免费看 | 国产精品久久久久一区二区国产 | 日韩久久精品 | 婷婷网站天天婷婷网站 | 国产精品久久久久9999 | 97成人资源站 | 特级西西www44高清大胆图片 | 91精品国自产在线观看欧美 | 九九热免费观看 | 黄网站色视频免费观看 | av天天澡天天爽天天av | 久久综合中文色婷婷 | 亚洲五月婷 | 亚洲欧美日韩一二三区 | 中文国产在线观看 | 日本爱爱免费 | 久久9精品 | 国产精品亚洲片夜色在线 | 免费av大片 | 射九九| 久久久久久毛片精品免费不卡 | 91桃色免费观看 | 成人中文字幕+乱码+中文字幕 | 国产成人精品福利 | 毛片精品免费在线观看 | 欧美在线不卡一区 | 在线色吧 | 77国产精品 | 国产高清久久 | 女人魂免费观看 | 中文字幕欧美日韩va免费视频 | 久久综合久久八八 | 国产精品精品久久久 | 久久综合免费视频 | 国产一级黄色免费看 | 五月开心综合 | 日日夜夜综合 | 国产一卡久久电影永久 | 日韩簧片在线观看 | 男女激情片在线观看 | 手机看片1042 | 少妇bbb搡bbbb搡bbbb′ | 成人av资源网 | 在线a人片免费观看视频 | 国产精品久久久久久久久久久久 | 欧美少妇xx | 国产欧美精品xxxx另类 | 国产亚洲精品电影 | 99久久久国产免费 | 久久久久亚洲a | 精品视频99 | 日韩精品欧美一区 | 婷婷丁香六月 | 亚洲午夜久久久久久久久电影网 | 国产精品女主播一区二区三区 | 麻豆视传媒官网免费观看 | 中文字幕在线观看三区 | 欧美日韩中文字幕在线视频 | 视频国产精品 | 在线观看国产中文字幕 | 国产+日韩欧美 | 亚洲精品免费在线观看视频 | 丝袜精品视频 | 日韩欧美在线一区 | 欧美一区二视频在线免费观看 | 免费看一级一片 | 国产伦理精品一区二区 | 久操视频在线观看 | 日韩精品免费在线观看 | 欧美日韩一级久久久久久免费看 | 免费看黄视频 | www欧美xxxx | 国产片免费在线观看视频 | 欧美日在线观看 | 午夜精品导航 | 午夜精品久久久久久久99无限制 | 国产精品久久久久影院 | 亚洲专区 国产精品 | 不卡电影免费在线播放一区 | 天天做天天爱天天综合网 | 粉嫩av一区二区三区四区 | 成人国产精品 | 91在线播放综合 | 婷婷色网址 | 亚洲免费不卡 | 亚洲免费av一区二区 | 97夜夜澡人人爽人人免费 | 国产精品久久精品国产 | 日韩黄色av网站 | 狠狠狠综合 | 亚洲经典在线 | 日韩av网页 | 日韩欧美视频免费看 | 狠狠狠综合 | 六月激情久久 | 国产欧美精品在线观看 | 91在线免费公开视频 | 国产精品免费不卡 | 亚洲欧美婷婷六月色综合 | 国产中文在线字幕 | 欧美在线free | 午夜123| 精品国产一区二区三区免费 | 日日操日日干 | 久久精品一区二区三区中文字幕 | 国产在线视频一区 | 日韩精品一区电影 | 欧美二区视频 | 日韩国产精品一区 | 久久综合影视 | 亚州人成在线播放 | 日韩在线字幕 | 国产亚洲精品成人av久久ww | 青青久视频 | 久久爽久久爽久久av东京爽 | 中文在线字幕免费观看 | 免费久久99精品国产婷婷六月 | 免费日韩一级片 | 欧美精品视 | 99久久精品免费看国产免费软件 | 五月婷婷网站 | 欧美综合国产 | 黄色91在线观看 | 波多野结衣在线观看视频 | 欧美日本在线视频 | 91av中文| 97手机电影网 | 99久久国产免费看 | 色九九视频 | 久久99精品一区二区三区三区 | 最新中文字幕视频 | 性色大片在线观看 | 久久xx视频 | 亚洲精品理论片 | 综合色影院 | 亚洲人成免费 | 欧美视频网址 | 久久色网站| 手机在线免费av | 日本在线观看中文字幕 | 国产精品久久久久久久久久久久午夜片 | www.伊人网.com| 日韩欧美在线综合网 | 中文字幕在线视频第一页 | 国产亚洲aⅴaaaaaa毛片 | 黄色av大片| 色片网站在线观看 | 欧美一级视频免费 | 国产资源精品 | 成人黄色资源 | 日韩大片在线 | 精品二区视频 | 97超碰.com| 激情婷婷在线 | 麻豆成人网 | 国产精品1区 | 国产美女视频免费观看的网站 | 国产精品对白一区二区三区 | 国产精品剧情在线亚洲 | 亚洲狠狠婷婷综合久久久 | 手机av永久免费 | 亚洲妇女av | 在线免费观看视频一区二区三区 | 美女久久一区 | 在线观看日韩视频 | 在线日本看片免费人成视久网 | 国产综合激情 | 国产精品久久人 | 成人sm另类专区 | 亚洲精品成人免费 | 久久精品亚洲国产 | 中文字幕中文字幕中文字幕 | 日本夜夜草视频网站 | 国产久草在线观看 | 中文成人字幕 | 国产精品麻 | 9999在线视频 | 91精品国产综合久久福利 | 亚洲天堂首页 | 国产高清区 | 综合网色| 欧美日韩高清一区 | 欧美性网站 | 国产a级免费| 三级在线国产 | 久久久久久福利 | av动图| 久久成人国产精品一区二区 | 黄色av高清 | 国产成人精品一区二区三区免费 | 亚洲伊人婷婷 | 偷拍精偷拍精品欧洲亚洲网站 | 伊人婷婷久久 | 久久五月婷婷丁香 | 美女一级毛片视频 | av福利在线播放 | 国产色啪| 福利视频 | 天天躁日日躁狠狠躁av麻豆 | 久久精品视频中文字幕 | 国产综合视频在线观看 | 成人av在线直播 | 一区二区在线影院 | 国产一区二区三区四区在线 | 日批网站免费观看 | 久久不色 | 久久久久五月天 | 91免费试看| 亚洲国产视频直播 | 成年人电影毛片 | 国产精品嫩草在线 | 99精品欧美一区二区三区黑人哦 | 麻豆传媒电影在线观看 | 不卡的av在线 | 五月婷婷综合网 | 99久久精品日本一区二区免费 | 五月激情六月丁香 | 亚洲电影在线看 | 亚洲va天堂va欧美ⅴa在线 | 欧美a视频 | 久久久久久久久影视 | 操操日| 福利视频一区二区 | 中文字幕在线观看不卡 | 久久影院午夜论 | 99国产精品视频免费观看一公开 | 成人av一区二区在线观看 | 成人av视屏| 国产精品6999成人免费视频 | 国产精品观看在线亚洲人成网 | 国内精品在线一区 | 顶级bbw搡bbbb搡bbbb | 在线视频1卡二卡三卡 | 最近中文字幕完整高清 | 韩国精品一区二区三区六区色诱 | 国内毛片毛片 | 欧美乱码精品一区 | 国内精品久久久久久久久久清纯 | 国产原创av在线 | 久久久精品国产一区二区三区 | 91女子私密保健养生少妇 | 7777精品伊人久久久大香线蕉 | 久久久免费观看 | 日韩在线观看中文字幕 | 日韩成人免费在线 | 成人亚洲精品国产www | 日韩欧美视频一区二区 | 免费a网站 | 欧美日韩在线第一页 | 日本高清免费中文字幕 | 黄色片免费电影 | 天天操天天色天天射 | 国产视频精品免费 | 91精品久久久久久粉嫩 | 99精品在线免费观看 | 天天操网| a级片在线播放 | 啪啪肉肉污av国网站 | 手机在线永久免费观看av片 | www天天操| 亚洲天堂精品视频在线观看 | 午夜精品久久久久 | 一区二区亚洲精品 | 国产视| 九九欧美视频 | 久草在线这里只有精品 | 日韩aⅴ视频| 国产在线观看二区 | 国产日韩欧美视频在线观看 | 四虎永久免费网站 | 亚洲精品成人免费 | 欧美激情一区不卡 | 中文字幕第一页在线 | 国产成人精品电影久久久 | 国产乱老熟视频网88av | 午夜黄色大片 | 日韩欧美视频免费看 | 在线观看色网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产系列在线观看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 色福利网 | 国产精品久久久久久久免费大片 | 午夜精品久久久久久久久久 | 九九免费观看全部免费视频 | 免费av网址在线观看 | 三级黄色免费 | 国产资源站 | 99热这里只有精品在线观看 | 欧美午夜理伦三级在线观看 | 精品一区欧美 | 综合色影院 | 久久天天躁狠狠躁夜夜不卡公司 | av大全在线免费观看 | 午夜电影一区 | 国产成年免费视频 | 国产亚洲精品久久19p | 亚洲在线免费视频 | 久久香蕉国产精品麻豆粉嫩av | 日韩久久精品一区二区 | 欧美日韩国产精品一区二区亚洲 | 五月天久久激情 | 国产亚洲高清视频 | 午夜精品电影一区二区在线 | 中文字幕在线影视资源 | 亚洲一区视频在线播放 | 久久夜视频 | 天天摸天天弄 | www最近高清中文国语在线观看 | 亚洲天堂网在线视频观看 | 久久久久这里只有精品 | 色婷婷97| 免费高清无人区完整版 | 99在线国产 | 亚洲午夜精品一区二区三区电影院 | 亚洲国产成人精品在线观看 | 欧美999| 色综合久久久久网 | 亚洲国产福利视频 | 一区二区三区中文字幕在线观看 | 亚洲1级片| 国产69久久久欧美一级 | 人人网av | 伊人五月综合 | 在线观看亚洲电影 | 免费精品国产va自在自线 | 国产福利一区二区三区在线观看 | 日韩欧美视频在线免费观看 | 国产精品美女网站 | 91污视频在线 | 国产精品一区二区视频 | 久久在线影院 | 免费观看视频的网站 | 亚洲中字幕 | 天堂网中文在线 | 亚洲欧美国产精品18p | 成人久久久久久久久久 | 久久久资源 | 99久久精品午夜一区二区小说 | 日韩理论在线播放 | 99精品免费久久久久久日本 | 国产香蕉97碰碰久久人人 | 婷婷久草 | 国产又黄又爽又猛视频日本 | 狠狠躁日日躁狂躁夜夜躁 | 毛片激情永久免费 | 久热免费 | 亚洲另类久久 | 日韩高清黄色 | www久久 | 久久久午夜精品福利内容 | 天天操操操操操操 | 日韩毛片在线一区二区毛片 | 不卡视频一区二区三区 | 亚洲精品国产精品国自 | 美女啪啪图片 | 国产精品剧情 | 久久精品视频日本 | 中文字幕亚洲综合久久五月天色无吗'' | 国产99re | 日韩动态视频 | 国产日本亚洲高清 | 欧美亚洲专区 | 日本三级久久久 | 日本三级大片 | 人人插人人草 | 福利二区视频 | 日韩免费在线视频 | 福利网址在线观看 | 99视频一区二区 | 日本三级在线观看中文字 | 日日夜精品| 国产在线观看地址 | 久久官网| 成人在线观看日韩 | 国产特黄色片 | 色视频 在线 | 日韩午夜三级 | 国产美女视频免费观看的网站 | 国产精品99久久久久人中文网介绍 | 四虎成人在线 | 麻豆精品传媒视频 | 久久精品三级 | 国产精品理论视频 | 在线观看中文字幕网站 | 国产精品久久久久永久免费 | www.xxxx变态.com | 日韩有码第一页 | 亚洲国产日韩一区 | 久久99国产精品免费 | 97av视频在线观看 | 午夜视频在线观看一区二区三区 | 久久99热久久99精品 | 日韩xxxx视频 | 国语精品视频 | 人人超在线公开视频 | 国产免费精彩视频 | 91视频免费看网站 | 日韩美精品视频 | 九九在线免费视频 | 国产成人精品av在线 | 国产男女免费完整视频 | 中文字幕乱码视频 | 99久久精品国产一区二区成人 | 欧美性色黄大片在线观看 | 麻豆免费视频网站 | 亚洲高清视频一区二区三区 | 四虎影视成人永久免费观看亚洲欧美 | 免费观看黄色12片一级视频 | 久久九九网站 | 六月激情久久 | 久久不卡日韩美女 | 丝袜美腿在线 | 精品国产乱码久久久久 | 97精品欧美91久久久久久 | 久久99精品热在线观看 | 五月天亚洲精品 | 欧美国产亚洲精品久久久8v | 麻豆精品传媒视频 | 日本丰满少妇免费一区 | 久久免费av电影 | 蜜桃av久久久亚洲精品 | 成人av免费在线看 | 日韩欧美在线综合网 | 亚洲欧洲一级 | av免费在线观看网站 | 97超碰人人 | 免费麻豆网站 | 国产精品麻豆果冻传媒在线播放 | 在线观看免费视频你懂的 | 国产小视频在线免费观看视频 | 亚洲综合在线一区二区三区 | 成人在线中文字幕 | 亚洲精品观看 | 在线观看中文字幕亚洲 | 久久久久免费 | 欧美性精品 | 9i看片成人免费看片 | 又黄又爽的视频在线观看网站 | 99热精品国产 | 免费又黄又爽 | 久久成人精品 | 狠狠干夜夜操 | 亚洲经典视频在线观看 | 国产精品久久久久永久免费看 | 国产91免费观看 | 久草网视频 | 在线观看免费一区 | 激情开心| 久久久亚洲国产精品麻豆综合天堂 | 911免费视频 | 91在线视频免费播放 | 国产精品18久久久久久久久久久久 | 天天做天天看 | 国产成人一区二区三区影院在线 | 在线观看不卡的av | 91亚·色| 精品在线视频一区二区三区 | 中文字幕在线观看1 | 亚洲一区久久 | 久久再线视频 | 国产精品1区2区3区 久久免费视频7 | 日日日视频 | 夜夜夜草 | 天天干人人 | 国产精品mv | 亚洲电影图片小说 | 91毛片在线观看 | 成人三级黄色 | 丁香五月缴情综合网 | 成人av在线影院 | 国产97视频 | 亚洲精品国产精品国自产观看浪潮 | 国产视频 亚洲精品 | 中文字幕色婷婷在线视频 | 国产一区二区高清 | 国产看片网站 | 麻豆va一区二区三区久久浪 | av黄色在线播放 | 99视频在线精品国自产拍免费观看 | 网站在线观看日韩 | 久久精品国产亚洲a | 国产成人一区二区三区免费看 | 国产一级黄色片免费看 | 最近高清中文字幕 | 18做爰免费视频网站 | 国产成人av一区二区三区在线观看 | 国产区 在线 | 国产精品一区专区欧美日韩 | 精品免费久久久久 | 超碰在线个人 | av日韩中文| 久久成人在线 | 不卡国产在线 | 999电影免费在线观看 | 手机看片99 | 一区二区理论片 | av7777777| 久久久久亚洲精品成人网小说 | 久草电影免费在线观看 | 色无五月 | 999国内精品永久免费视频 | 天天操天天舔天天干 | 亚洲免费精彩视频 | av福利在线导航 | 国产精品久久久久久久久久久久午夜 | 女人魂免费观看 | 日韩天堂在线观看 | av网站免费线看精品 | 欧美福利视频一区 | 国产中文字幕一区 | 91免费看黄色 | 欧美久久久 | 日韩精品一区二区免费视频 | 国产亚洲无 | 在线观看亚洲专区 | 国产精品无| 色综合夜色一区 | 337p日本大胆噜噜噜噜 | 国产91丝袜在线播放动漫 | 天天综合网天天 | 欧美在线久久 | 日韩黄色大片在线观看 | 国产精品综合av一区二区国产馆 | 国产精品成人一区二区 | 久久久久久国产一区二区三区 | 婷婷色六月天 | 日韩在线观看av | 福利一区在线视频 | 99在线高清视频在线播放 | 亚洲精品在线视频播放 | 91成年人网站 | 99精品电影 | 亚洲 欧洲 国产 日本 综合 | 久久久久久中文字幕 | 欧美日韩高清国产 | av高清免费| 国产高清免费在线播放 | 免费裸体视频网 | 午夜精品久久久久久久久久久久 | 国产一级免费片 | 亚洲电影图片小说 | 高清视频一区二区三区 | 久久久www成人免费毛片 | 国产精品 日韩 | 在线视频成人 | 日韩av高清在线观看 | 精品国产激情 | 免费高清在线观看成人 | 中文字幕专区高清在线观看 | av免费看在线 | 最近日韩免费视频 | 婷婷夜夜 | 欧美乱熟臀69xxxxxx | 国产老妇av | 中文字幕一区二区在线观看 | 中文字幕丝袜制服 | 在线涩涩| 免费观看www7722午夜电影 | 成人av播放| 亚洲欧洲日韩在线观看 | 久久久久久久久久伊人 | 日韩毛片在线免费观看 | 久久国产美女视频 | 在线观看视频亚洲 | 久久高清片 | 日批视频在线 | 国产成人av综合色 | 五月激情片 | 久久色在线观看 | 91精品视频免费观看 | 国产精品中文字幕在线播放 | 天天射天天射天天 | 日韩精品一区在线播放 | 在线免费三级 | 久久九九久久九九 | 天天玩天天操天天射 | 国产一性一爱一乱一交 | 国产一区二区三区 在线 | 九九日韩 | 亚洲综合色丁香婷婷六月图片 | 成人免费看片网址 | 国产人成在线观看 | av电影免费 | 免费男女羞羞的视频网站中文字幕 | 日韩极品视频在线观看 | 免费观看91视频 | 成人黄色av免费在线观看 | 草莓视频在线观看免费观看 | 欧美国产三区 | 国产在线观看网站 | 欧美成人黄色 | 亚洲国产三级在线 | 国内精品久久久久 | www免费看| 国产一级片直播 | 国产精品欧美激情在线观看 | 欧美精选一区二区三区 | 国产高清在线免费 | 日韩欧美一区二区在线播放 | 国产精品色在线 | 亚洲成人av在线电影 | 黄色一级大片在线免费看国产一 | www亚洲精品 | 日韩动漫免费观看高清完整版在线观看 | 久久小视频 | 操久在线 | 色天天综合久久久久综合片 | 国产免费久久久久 | 久草免费色站 | 欧美日韩大片在线观看 | 亚洲精品黄网站 | 亚洲免费在线观看视频 | 一区免费视频 | 亚洲毛片久久 | 国产精品久久久久久久久久ktv | 制服丝袜一区二区 | 久久久国际精品 | 天天综合在线观看 | 国产色视频123区 | 91插插插免费视频 | 免费观看性生交大片3 | 国产一区二区不卡视频 | 久久综合色播五月 | 九九热只有这里有精品 | 欧美日韩不卡在线 | 日韩精品一区二区三区外面 | 国产色网站 | 久久激情五月婷婷 | 国产高清av在线播放 | 日韩精品大片 | 玖玖爱国产在线 | 国产黄色片一级三级 | 久久久鲁| 制服丝袜亚洲 | 激情五月在线视频 | 日韩在线免费小视频 | 久久精品91久久久久久再现 | 草久电影 | 欧美日韩中文视频 | 中文字幕成人av | 综合久久网站 | 国产99免费| 成年人免费看的视频 | 亚洲精品美女在线观看播放 | 99久久精品国产免费看不卡 | 欧美一级欧美一级 | 久久久久久久久久电影 | 日韩中文字幕视频在线 | 欧美黄网站 | 久久96| 九九热.com | 亚洲高清视频在线播放 | 国产亚洲精品久久久久久大师 | 国产性天天综合网 | 国产午夜精品一区二区三区 | 天天操综合网站 | 亚洲欧美婷婷六月色综合 | 日本字幕网 | av福利超碰网站 | 欧美日韩天堂 | www.超碰97.com | 中文字幕在线观看国产 | 天天干亚洲 | 日韩精品一区二区三区第95 | 国产69精品久久久久99尤 | 精品国产一区二区在线 | 91成人精品一区在线播放69 | 亚洲永久字幕 | 欧美在线a视频 | 黄色一级大片在线免费看产 | 国产精品嫩草69影院 | 欧美成a人片在线观看久 | 欧美日韩精品免费观看视频 | 一区二区三区免费在线观看视频 | 黄色片网站av | 欧美国产视频在线 | 欧美成人精品三级在线观看播放 | 亚洲人成人在线 | 人人搞人人干 | 2024国产精品视频 | 国产一二三在线视频 | 国产福利专区 | 国产a级片免费观看 | 日韩视频中文字幕 | 久草热视频| 97超碰中文字幕 | 亚洲午夜久久久久 | 99在线免费视频观看 |