服务器中采用的epoll技术的完整例子.doc_第1页
服务器中采用的epoll技术的完整例子.doc_第2页
服务器中采用的epoll技术的完整例子.doc_第3页
服务器中采用的epoll技术的完整例子.doc_第4页
服务器中采用的epoll技术的完整例子.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

服务器中采用的epoll技术的完整例子(附加一个客户端的例子)/* 服务器端的源代码*/#include #include #include #include #include #include #include #define MAXFDS 256#define EVENTS 100#define PORT 8888int epfd;bool setNonBlock(int fd)int flags = fcntl(fd, F_GETFL, 0);flags |= O_NONBLOCK;if(-1 = fcntl(fd, F_SETFL, flags)return false;return true;int main(int argc, char* argv, char* evp)int fd, nfds, confd;int on = 1;char* buffer512;struct sockaddr_in saddr, caddr;struct epoll_event ev, eventsEVENTS;if(-1 = socket(AF_INET, SOCKSTREAM), 0)std:cout 创建套接字出错啦 std:endl;return -1;struct sigaction sig;sigemptyset(&sig.sa_mask);sig_handler = SIG_IGN;sigaction(SIGPIPE, &sig, NULL);epfd = epoll_create(MAXFDS);setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on);memset(&saddr, 0, sizeof(saddr);saddr.sin_family = AF_INET;saddr.sin_port = htons(short)(PORT);saddr.sin_addr.s_addr = INADDR_ANY;if(-1 = bind(fd, (struct sockaddr*)&saddr, sizeof(saddr)std:cout 套接字不能绑定到服务器上 std:endl;return -1;if(-1 = listen(fd, 32)std:cout 监听套接字的时候出错了 std:endl;return -1;ev.data.fd = fd;ev.events = EPOLLIN;epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev);while(true)nfds = epoll_wait(epfd, &events, MAXFDS, 0);for(int i=0; i nfds; + i)if(fd = eventsi.data.fd)memset(&caddr, sizeof(caddr);cfd = accept(fd, (struct sockaddr*)&caddr, &sizeof(caddr);if(-1 = cfd)std:cout 服务器接收套接字的时候出问题了 std:endl;break;setNonBlock(cfd);ev.data.fd = cfd;ev.events = EPOLLIN;epoll_ctl(epfd, EPOLL_CTL_ADD, cfd, &ev); else if(eventsi.data.fd & EPOLLIN)bzero(&buffer, sizeof(buffer);std:cout 服务器端要读取客户端发过来的消息 std:endl;ret = recv(eventsi.data.fd, buffer, sizeof(buffer), 0);if(ret 0)std:cout 服务器收到的消息出错了 endl;return -1;std:cout 接收到的消息为: (char*) buffer std:endl;ev.data.fd = eventsi.data.fd;ev.events = EPOLLOUT;epoll_ctl(epfd, EPOLL_CTL_MOD, eventsi.data.fd, &ev);else if(eventsi.data.fd & EPOLLOUT)bzero(&buffer, sizeof(buffer);bcopy(The Author: magicmingleeH, buffer, sizeof(The Author: magicmingleeH);ret = send(eventsi.data.fd, buffer, strlen(buffer);if(ret 0)std:cout 服务器发送消息给客户端的时候出错啦 0)shutdown(fd, SHUT_RDWR);close(fd);/* 客户端源代码*/#include #include #include #include #define PORT 8888int main(int argc, char* argv, char* evp)int fd;int on = 1;char* buffer512;struct sockaddr_in seraddr;memset(&seraddr, 0, sizeof(seraddr);if(fd = socket(AF_INET, SOCK_STREAM, 0) 0)std:cout 客户端创建套接字出错了 std:endl;return -1;/如果用于多次测试,那么打开下面debug选项#ifdef _Debug_mingsetsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on);#endifseraddr.sin_port = htons(short)(PORT);seraddr.sin_family = AF_INET;seraddr.sin_addr.s_addr = inet_addr();/设置自己的ip吧/你也可以采用无阻塞连接,不过需要对连接的错误结果进行分析处理if(TEMP_FAILURE_RETRY(connect(fd, (struct sockaddr*)&seraddr, sizeof(seraddr) 0)std:cout 连接错误了 std:endl;return -1;/下面就进行收发信息bcopy(The

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论