已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年深圳市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解一套
- 常德市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(能力提升)
- 商洛市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(基础+提升)
- 2026年承德市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(完整版)
- 绥化市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)参考答案详解
- 广元市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解
- 荣昌县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解参考
- 2026年合肥市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解
- 安康市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解一套
- 大理州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(精练)
- 《乡土中国》第五章课件
- 康复患者心理护理课件
- 早产儿初乳口腔涂抹操作规范
- 2024年药品监管业务知识技能竞赛考试题库(含答案)
- 运动损伤预防的数字化分析与训练
- 线上离婚协议书
- 基于大数据的智能化车间运营分析与决策机制研究
- 《机械加工基础知识》课件
- 护士人员礼仪与行为规范
- 2025年浙江中国移动通信集团浙江有限公司招聘笔试参考题库附带答案详解
- 物料质保协议书范本
评论
0/150
提交评论