




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆分期赔偿合同协议
- 轻微受伤赔偿协议书模板
- 国内过桥资金借款合同
- 个人长期租车合同
- 人力资源管理理论实践试题库
- 车饰合作协议书范本
- 溢价入股协议书
- 烟酒补偿协议书
- 签订合同授权的委托书
- 基于物联网技术的智能家居设备通信协议说明
- 托管班学生隐私保护协议
- 古诗渔歌子古诗阅读赏析课件
- 第二章 中国的自然环境《第四节 自然灾害》课件
- 有机合成工作总结模板
- 2024年上海市高考英语完形填空试题真题汇编(含答案详解)
- 汤显祖《牡丹亭·游园》品读课件
- 物业安全生产培训
- 第17课《老师 我想对您说》课件
- 人工智能在影视后期制作中的应用
- 论实验动物生物安全制度法治化完善
- Unit 4 Space Exploration Reading and Thinking 说课课件-2022-2023学年高中英语人教版(2019)高中英语必修第三册
评论
0/150
提交评论