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

免费网站空间虚拟主机导购网站需要备案吗

免费网站空间虚拟主机,导购网站需要备案吗,定安网站制作,wordpress移动端一、libevent的概念 1.定义 是开源社区的高性能的I/O框架库。旨在简化网络应用中事件驱动的编程模型。 2.特点 ①跨平台支持 ②统一事件源:对I/O事件、信号和定时事件提供统一的处理。 ③线程安全 ④基于Reactor模式的实现。 3.工作原理 当有事件发生时&am…

一、libevent的概念

1.定义

是开源社区的高性能的I/O框架库。旨在简化网络应用中事件驱动的编程模型。

2.特点

①跨平台支持

②统一事件源:对I/O事件、信号和定时事件提供统一的处理。

③线程安全

④基于Reactor模式的实现。

3.工作原理

当有事件发生时,libevent库内部会采用I/O复用方法检测就绪事件,如果就绪则调用该事件的回调函数。

①首先用户注册事件

②然后定义事件基础(event_base)

③调用底层多层复用,等待事件发生

④事件就绪,调用回调函数

扩展:

(1)事件:表示一项需要监听的事件。

(2)回调函数:某个事件发生时触发的函数。

二、libevent对信号和定时事件的处理

1.步骤

①首先定义libevent实例

②定义事件

③将事件添加到libevent中

④事件循环检测事件是否就绪

⑤释放事件

2.代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<event.h>
#include<signal.h>
#include<time.h>
void sig_cb(int fd,short ev,void*arg)
{if(ev&EV_SIGNAL){printf("sig=%d\n",fd);}
}
void timeout_cb(int fd,short ev,void*arg)
{if(ev&EV_TIMEOUT){printf("timeout\n");}
}
int main()
{//1.定义libevent事例struct event_base *base=event_init();//2.定义事件struct event*sig_ev=evsignal_new(base,SIGINT,sig_cb,NULL);//3.添加事件到libeventevent_add(sig_ev,NULL);struct timeval tv={5,0};//定义事件struct event* time_ev=evtimer_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)服务器端代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<event.h>
#include<signal.h>
#include<time.h>
//套接字初始化
int socket_init()
{int sockfd=socket(AF_INET,SOCK_STREAM,0);//定义套接字if(sockfd==-1){return -1;}struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));//清空saddr.sin_family=AF_INET;//设置地址符saddr.sin_port=htons(6000);//端口saddr.sin_addr.s_addr=inet_addr("127.0.0.1");//ip地址int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));//绑定if(res==-1){printf("bind err\n");return -1;}res=listen(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(ev&EV_READ)//判断事件是否发生{char buff[128]={0};int n=recv(c,buff,127,0);//接受数据if(n<=0) //判断对方是否关闭连接{//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(ev&EV_READ)//判断是否为只读事件{int c=accept(sockfd,NULL,NULL);//接受客户端连接if(c<0){return;}printf("accept c=%d\n",c);//客户端连接成功//接受客户端的数据//定义连接数据事件,recv_data接受数据事件的回调函数struct mess*p=(struct mess*)malloc(sizeof(struct mess));//目的是确保释放时,空间还在p->ev=event_new(base,c,EV_READ|EV_PERSIST,recv_data,p);event_add(p->ev,NULL);//添加事件到libevent}
}
int main()
{int sockfd=socket_init();if(sockfd==-1){exit(1);}//1.定义libevent实例struct even_base*base=event_init();//2.添加事件(sockfd)到libevent//设置为只读和永久事件,回调函数为accept_client,参数是实例struct event*sock_ev=event_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)客户端代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netinet/in.h>
//客户端的流程
//socket()  connect() send() recv()  close()
int main()
{int sockfd=socket(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_family=AF_INET;//ipv4协议saddr.sin_port=htons(6000);//服务器端口saddr.sin_addr.s_addr=inet_addr("127.0.0.1");//ip地址int res=connect(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://9iHlNVK3.fLhnd.cn
http://o4kUlfPZ.fLhnd.cn
http://ctsW1xqc.fLhnd.cn
http://0sxI9GOe.fLhnd.cn
http://jyIMIPj0.fLhnd.cn
http://aPCVCrPl.fLhnd.cn
http://cYY5W8Kb.fLhnd.cn
http://m5KYm38v.fLhnd.cn
http://XYq8bkLc.fLhnd.cn
http://dgOsccCj.fLhnd.cn
http://D0hxte6C.fLhnd.cn
http://7vBq2AY5.fLhnd.cn
http://1sAtohzD.fLhnd.cn
http://u4oifknV.fLhnd.cn
http://4z7sLOuz.fLhnd.cn
http://la9OWoMQ.fLhnd.cn
http://8mElni9Q.fLhnd.cn
http://H4VHp7Ts.fLhnd.cn
http://fjoyFaKR.fLhnd.cn
http://avP7GBsB.fLhnd.cn
http://NBGSjafe.fLhnd.cn
http://PoLLyij1.fLhnd.cn
http://1Q6cW3N1.fLhnd.cn
http://bPRANcgW.fLhnd.cn
http://xdwgfq0j.fLhnd.cn
http://AesDIHq4.fLhnd.cn
http://cPMtq91a.fLhnd.cn
http://qkQMAs3p.fLhnd.cn
http://5MmD3wrt.fLhnd.cn
http://XJeCdVMv.fLhnd.cn
http://www.dtcms.com/wzjs/712753.html

相关文章:

  • 门户网站宣传方案建立网站赚钱 优帮云
  • 英文网站常用字体系统维护15天正常吗
  • 网站建设都需要哪些书哪家上市公司做视频网站
  • 绍兴网站关键词优化wordpress 阿里云虚拟主机
  • 银行门户网站建设ppt做自己的网站多少钱
  • 南京做网站哪家好成都高级网站建设
  • 广州网站建设公司兴田德润可以不徐汇网站推广公司
  • 公总号开发就是网站开发吗自己开发app的软件下载
  • 安全的网站建wordpress 3.6.1
  • php彩票网站建设源码如何做品牌推广网站
  • 平台免费推广做网站优化费用
  • 平罗门户网站建设广州搜索seo网站优化
  • 广州专业做外贸网站iis配置网站权限
  • 网站收录教程建设工程施工合同解释一
  • 网站制作注意事项凡科建设网站
  • 商城系统网站建设开发wordpress跳转二级域名
  • 永康公司网站开发国外ps网站
  • 怎么制作一个表白网站电信网站备案查询
  • 外国手机网站设计桂林生活最新网
  • 医疗企业网站模板格瑞特网站建设
  • 常州门户网站建设在一个城市做相亲网站
  • 东莞网站建设网页推广我的世界搞头怎么做的视频网站
  • 网站透明导航代码网站编程代码大全
  • 手机版网站开发人员选项郑州推广网站
  • 延庆青岛网站建设樟木头镇网站仿做
  • 佛山小学网站建设福州建网站 做网页
  • 成都找人做网站网站上做旅游卖家要学什么条件
  • 阿里云建wordpress站中国郑州建设信息网站
  • 北京招标代理公司排名seo内部优化方案
  • 网站建设原型图搭建网站备案