当前位置: 首页 > news >正文

西安建设规划局网站wordpress 仿36氪

西安建设规划局网站,wordpress 仿36氪,网站建设与网页设计pdf,北京网站建设上石榴汇一、libevent的概念 1.定义 是开源社区的高性能的I/O框架库。旨在简化网络应用中事件驱动的编程模型。 2.特点 ①跨平台支持 ②统一事件源#xff1a;对I/O事件、信号和定时事件提供统一的处理。 ③线程安全 ④基于Reactor模式的实现。 3.工作原理 当有事件发生时对I/O事件、信号和定时事件提供统一的处理。 ③线程安全 ④基于Reactor模式的实现。 3.工作原理 当有事件发生时libevent库内部会采用I/O复用方法检测就绪事件如果就绪则调用该事件的回调函数。 ①首先用户注册事件 ②然后定义事件基础event_base ③调用底层多层复用等待事件发生 ④事件就绪调用回调函数 扩展 1事件表示一项需要监听的事件。 2回调函数某个事件发生时触发的函数。 二、libevent对信号和定时事件的处理 1.步骤 ①首先定义libevent实例 ②定义事件 ③将事件添加到libevent中 ④事件循环检测事件是否就绪 ⑤释放事件 2.代码实现 #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includeassert.h #includeevent.h #includesignal.h #includetime.h void sig_cb(int fd,short ev,void*arg) {if(evEV_SIGNAL){printf(sig%d\n,fd);} } void timeout_cb(int fd,short ev,void*arg) {if(evEV_TIMEOUT){printf(timeout\n);} } int main() {//1.定义libevent事例struct event_base *baseevent_init();//2.定义事件struct event*sig_evevsignal_new(base,SIGINT,sig_cb,NULL);//3.添加事件到libeventevent_add(sig_ev,NULL);struct timeval tv{5,0};//定义事件struct event* time_evevtimer_new(base,timeout_cb,NULL);//添加事件到libeventevent_add(time_ev,tv);//事件循环——内部调用select/poll/epoll循环检测事件event_base_dispatch(base);//会阻塞 epoll_wait//释放事件event_free(time_ev);event_free(sig_ev);event_base_free(base);exit(0);} 三、libevent实现TCP协议 1.服务器端编写的步骤 ①定义libevent实例 ②定义接收连接的事件 ③将事件添加到libevent库中 ④循环检测事件是否就绪就绪则调用该回调函数 ⑤释放事件和实例 注意主要编写的是回调函数回调函数中包括了接受连接和接受数据的功能 2.代码实现 1服务器端代码 #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includeassert.h #includeevent.h #includesignal.h #includetime.h //套接字初始化 int socket_init() {int sockfdsocket(AF_INET,SOCK_STREAM,0);//定义套接字if(sockfd-1){return -1;}struct sockaddr_in saddr;memset(saddr,0,sizeof(saddr));//清空saddr.sin_familyAF_INET;//设置地址符saddr.sin_porthtons(6000);//端口saddr.sin_addr.s_addrinet_addr(127.0.0.1);//ip地址int resbind(sockfd,(struct sockaddr*)saddr,sizeof(saddr));//绑定if(res-1){printf(bind err\n);return -1;}reslisten(sockfd,5); //创建监听队列if(res-1){return -1;}return sockfd; //返回套接字 } struct mess {struct event*ev;//存放事件的指针//char data[1024];//定义自定义数据 };void recv_data(int c,short ev,void*arg) {struct mess*p(struct mess*)arg;//强转获取参数if(evEV_READ)//判断事件是否发生{char buff[128]{0};int nrecv(c,buff,127,0);//接受数据if(n0) //判断对方是否关闭连接{//libevent移除event_free(p-ev);//不移除会阻塞因为如果同名则不放入libevent库free(p);//释放动态申请的空间close(c);printf(client close\n);return;}printf(buff%s\n,buff);send(c,ok,2,0);} } //sockfd的回调函数 void accept_client(int sockfd,short ev,void*arg) {struct event_base* base(struct event_base*)arg;//将参数传递if(evEV_READ)//判断是否为只读事件{int caccept(sockfd,NULL,NULL);//接受客户端连接if(c0){return;}printf(accept c%d\n,c);//客户端连接成功//接受客户端的数据//定义连接数据事件recv_data接受数据事件的回调函数struct mess*p(struct mess*)malloc(sizeof(struct mess));//目的是确保释放时空间还在p-evevent_new(base,c,EV_READ|EV_PERSIST,recv_data,p);event_add(p-ev,NULL);//添加事件到libevent} } int main() {int sockfdsocket_init();if(sockfd-1){exit(1);}//1.定义libevent实例struct even_base*baseevent_init();//2.添加事件sockfd到libevent//设置为只读和永久事件回调函数为accept_client,参数是实例struct event*sock_evevent_new(base,sockfd,EV_READ|EV_PERSIST,accept_client,base);event_add(sock_ev,NULL);//3.启动事件循环会阻塞event_base_dispatch(base);//4.释放事件和实例event_free(sock_ev);event_base_free(base);exit(0); } 2客户端代码 #includestdio.h #includestdlib.h #includestring.h #includeunistd.h #includeassert.h #includesys/socket.h #includesys/types.h #includearpa/inet.h #includenetinet/in.h //客户端的流程 //socket() connect send recv() close() int main() {int sockfdsocket(AF_INET,SOCK_STREAM,0);//创建套接字if(sockfd-1){printf(socket err\n);exit(1);}struct sockaddr_in saddr;//指定服务器端的ip和portmemset(saddr,0,sizeof(saddr));//清空结构体中的4个成员saddr.sin_familyAF_INET;//ipv4协议saddr.sin_porthtons(6000);//服务器端口saddr.sin_addr.s_addrinet_addr(127.0.0.1);//ip地址int resconnect(sockfd,(struct sockaddr*)saddr,sizeof(saddr));//建立连接三次握手if(res-1){printf(connect err\n);exit(1);}while(1){char buff[128]{0};printf(input:\n);fgets(buff,128,stdin);if(strncmp(buff,end,3)0){break;}send(sockfd,buff,strlen(buff)-1,0);//发送数据memset(buff,0,sizeof(buff));//清空buff中的数据recv(sockfd,buff,127,0);printf(buff%s\n,buff);}close(sockfd);exit(0); }
http://www.hkea.cn/news/14260891/

相关文章:

  • 做网站在哪里接活西宁哪家网络公司做网站
  • 住房和城乡建设统计网站十堰微网站建设费用
  • 做地产网站有服务器还需要买网站空间吗
  • 百度举报网站如何用家用电脑做网站
  • 北京企业展示网站建设那个做图网站叫什么
  • 南京外贸网站建设案例手机商城网站免费建站
  • 企业网站价格上海企业所得税优惠政策最新2023
  • WordPress完美建站长沙网站托管哪家好
  • wordpress如何导航网站网站开发用什么后端框架
  • 苏州手机网站开发公司my网站域名
  • 学敏网站建设泗阳做网站设计
  • 网站建设公司好做吗WordPress批量注册
  • 建设自己网站的流程图南京本地网站有哪些
  • 河南省建设工程监理协会网站产品页面设计模板
  • 网站做代理还可以刷水吗信息港怎么发布信息
  • 二手房网站开发文档为什么只有我的电脑看网站后台内容管理是乱码
  • 青岛金桥建设机械有限公司网站wordpress批量导入文章cvs
  • 回老家做PHP网站百度投广告怎么收费
  • 互动型网站模板建立企业网站公司
  • 自己的网站怎么做下载链接梵克雅宝中国官网旗舰店
  • 西部数码上传网站wordpress怎么换图标
  • 厦门做网站培训建筑网官方网站查询
  • 想找个人做网站制作免费网站
  • 广东两学一做网站怎样让百度收录自己的网站
  • 云南建设厅和网站中文域名是什么
  • 佛山市官网网站建设公司网站开发图片放哪里
  • 网站流程优化投资平台
  • 购买了网站如何使用吗网页制作基础教程免费
  • 黄骅贴吧11万wordpress 谷歌seo
  • 对网站开发与管理的分析嘉兴建站公司