日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UNIX TCP回射服务器/客户端之使用epoll模型的服务器

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNIX TCP回射服务器/客户端之使用epoll模型的服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序簡介:這是一個運用epoll系列函數進行IO復用的服務器模型。它是目前UNIX與LINUX平臺上效率最高,最受歡迎的IO復用傳輸模型。

其他的不說了,直接粘貼代碼吧!

服務器端:

#include "my_unp.h" int main(void) { int listenfd, connfd, sockfd, epfd; int i, maxi, nfds; ssize_t n; char buf[MAXLINE]; socklen_t clilen; struct sockaddr_in cliaddr; struct sockaddr_in servaddr; //聲明epoll_event結構體的變量,ev用于注冊事件,數組用于回傳要處理的事件 struct epoll_event ev, events[256]; //創建一個epoll的句柄,size用來告訴內核這個監聽的數目一共有多大 epfd = Epoll_create(256); //創建用于TCP協議的套接字 listenfd = Socket(AF_INET, SOCK_STREAM, 0); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(SERV_PORT); //把socket和socket地址結構聯系起來 Bind(listenfd, (SA*)&servaddr, sizeof(servaddr)); //開始監聽LISTENQ端口 Listen(listenfd, LISTENQ); //設置與要處理的事件相關的文件描述符和事件 ev.data.fd = listenfd; ev.events = EPOLLIN|EPOLLET; //注冊epoll事件 Epoll_ctl(epfd, EPOLL_CTL_ADD, listenfd,&ev); maxi = 0; while(1) { //等待epoll事件的發生 //返回需要處理的事件數目nfds,如返回0表示已超時。 nfds = Epoll_wait(epfd, events, 20, 500); //處理所發生的所有事件 for(i=0; i < nfds; ++i) { //如果新監測到一個SOCKET用戶連接到了綁定的SOCKET端口,建立新的連接。 if(events[i].data.fd == listenfd) { connfd = Accept(listenfd,(SA*)&cliaddr, &clilen); printf("connection from %s, port %d.\n", Inet_ntop(AF_INET, (void*)&cliaddr.sin_addr, buf, sizeof(buf)), ntohs(cliaddr.sin_port)); //設置用于讀操作的文件描述符和事件 ev.data.fd = connfd; ev.events = EPOLLIN|EPOLLET; //注冊事件 Epoll_ctl(epfd,EPOLL_CTL_ADD,connfd,&ev); } //如果是已經連接的用戶,并且收到數據,那么進行讀入。 else if(events[i].events & EPOLLIN) { sockfd = events[i].data.fd; if ( sockfd < 0 ) continue; n = read(sockfd, buf, MAXLINE); if ( n < 0) { // Connection Reset:你連接的那一端已經斷開了, //而你卻還試著在對方已斷開的socketfd上讀寫數據! if (errno == ECONNRESET) { Close(sockfd); events[i].data.fd = -1; } else error_quit("read error"); } //如果讀入的數據為空 else if ( n == 0 ) { Close(sockfd); events[i].data.fd = -1; } else { //設置用于寫操作的文件描述符和事件 ev.data.fd = sockfd; ev.events = EPOLLOUT|EPOLLET; //注冊事件 Epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev); } } //如果有數據發送 else if(events[i].events & EPOLLOUT) { sockfd = events[i].data.fd; Writen(sockfd, buf, n); //設置用于讀操作的文件描述符和事件 ev.data.fd = sockfd; ev.events = EPOLLIN|EPOLLET; //注冊事件 Epoll_ctl(epfd, EPOLL_CTL_MOD, sockfd, &ev); } } } return 0; }


客戶端的測試例子:

#include "my_unp.h"?

void str_cli(FILE *fp, int sockfd)??
{??
?char sendline[MAXLINE], recvline[MAXLINE];??
?int len;

?//從終端獲取一行字符串,將其寫入套接字??
?//然后從套接字一行字符串,將其寫入終端??
?while( Fgets(sendline, MAXLINE, fp) != NULL )??
?{??
? Writen(sockfd, sendline, strlen(sendline));??
? len = Read(sockfd, recvline, MAXLINE);
? if( len == 0 )??
? ?error_quit("str_cli: server terminated prematurely");??
? recvline[len] = 0;
? Fputs(recvline, stdout);??
?}??
}?

int main(int argc, char **argv)??
{??
?int sockfd;??
?struct sockaddr_in servaddr;??
?if( argc != 2 )??
? error_quit("usage: client <IPAddress>");?

?//創建用于TCP協議的套接字??
?sockfd = Socket(AF_INET, SOCK_STREAM, 0);??
?memset(&servaddr, 0, sizeof(servaddr));??
?servaddr.sin_family = AF_INET;??
?servaddr.sin_port = htons(SERV_PORT);?

?//將程序的參數1(argv[1])轉換成套接字地址結構??
?Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);??
?向服務器發起連接,連接成功后client_socket代表了客戶機和服務器的一個socket連接??
?Connect(sockfd, (SA*)&servaddr, sizeof(servaddr));?

?str_cli(stdin, sockfd);??
?return 0;??
}

運行示例(紅色字體的為輸入)(假設某個回射字符串的服務器已經啟動)

www.linuxidc.com@ubuntu:~/code$?gcc my_unp_v1.c client.c -o client
www.linuxidc.com@ubuntu:~/code$?./client 127.0.0.1
ABCD
ABCD
Ctrl+D




總結

以上是生活随笔為你收集整理的UNIX TCP回射服务器/客户端之使用epoll模型的服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av福利站 | 性爱视频免费 | 影音先锋91| 黄色小说在线免费观看 | 国产色婷婷 | 羞羞色视频 | 亚洲精品国产a | 亚洲天堂av在线免费观看 | 麻豆精品在线看 | 国产95在线| 视色av | 91麻豆精品国产91久久久更新时间 | 国产,日韩,欧美 | 成人黄色在线看 | 夜夜欢天天干 | 日韩精品电影一区二区三区 | 337p嫩模大胆色肉噜噜噜 | 男生插女生网站 | 精品欧美一区二区三区在线观看 | 黑人糟蹋人妻hd中文字幕 | 国产自产在线 | 久久久久久久亚洲精品 | 免费三级网站 | 国产精品久久免费视频 | 黄色a一级片 | 国产普通话bbwbbwbbw | 日韩三级在线播放 | a级片在线免费看 | 亚欧在线视频 | 爱情岛论坛亚洲入口 | 操女人网 | 奇米成人网 | 国产无遮挡又黄又爽 | 五月激情丁香婷婷 | 国产精品久久网站 | 成全世界免费高清观看 | 国产毛片一区二区三区 | 日韩夜夜 | 中文人妻一区二区三区 | 色av中文字幕 | 女厕厕露p撒尿八个少妇 | 国内av自拍| 亚洲一区二区三区蜜桃 | 动漫美女被吸奶 | 亚洲精品 日韩无码 | 欧美鲁鲁| 精品国产一二三 | 国产三级精品在线 | 性色av一区二区三区免费 | 日本黄色免费看 | 国产一区日韩精品 | 国产精品第一区 | 密臀久久 | 琪琪成人| 97在线公开视频 | 性——交——性——乱免费的 | 女人高潮娇喘1分47秒 | 在线中文字幕视频 | 人人干在线视频 | 射久久久| av字幕网| 一区二区三区视频网站 | 国产二级一片内射视频播放 | 性生活视屏 | 激情偷乱人成视频在线观看 | 久久精品韩国 | 亚洲九九九 | 欧美国产日韩精品 | 中文字幕免费高清在线 | 中国毛片基地 | 天天干夜夜骑 | 操在线视频 | 国产农村av | 日韩欧美综合一区 | 欧美日韩中文字幕在线视频 | 亚洲成人经典 | 色欧美亚洲 | 亚洲成人av在线 | 男人天堂影院 | 国产高清精品在线 | 色偷偷一区二区三区 | 国产在线精品一区二区三区 | 五十路毛片 | 日韩午夜激情视频 | 日韩欧美综合久久 | 视频一区在线观看 | av网站免费观看 | 国产精品宾馆在线 | 国产传媒专区 | 久久av不卡 | 天天操天天射天天舔 | 激情综合五月婷婷 | 天天高潮夜夜爽 | 最近高清中文在线字幕在线观看 | 国产日产欧美一区二区三区 | 亚洲精品国产欧美 | 一级性生活毛片 | 亚洲国产美女视频 | 可以看的av网址 |