libevent | 6.libevent应用——链接监听器实现高并发server服务器

  1. 实现代码
#include <stdio.h>
#include <string.h>
#include <event2/event.h>
#include <event2/bufferevent.h>
#include <event2/listener.h>

void read_cb(struct bufferevent * bev,void * ctx)
{
	char tmp[1024] = {0};
	
	bufferevent_read(bev,tmp,sizeof(tmp));
	
	printf("server:%s\n",tmp);
	
	char tmp2[] = {"已经接受到数据!\n"};

	bufferevent_write(bev,tmp2,strlen(tmp2)+1);
	
	printf("getdata and recv it!\n");
}

void write_cb(struct bufferevent * bev ,void  * ctx)
{
	printf("数据已经发送出去了!\n");

}

void event_cb(struct bufferevent * bev,short events,void * ctx)
{
	if(events & BEV_EVENT_EOF)
	{
		printf("connection close\n");
	}
	else if(events & BEV_EVENT_ERROR)
	{
		printf("some others error\n");
	}
	bufferevent_free(bev);
}

void listen_cb(struct evconnlistener * listener,evutil_socket_t fd,struct sockaddr * addr,int len, void * ptr)
{
	struct event_base * base = (struct evrnt_base *)ptr;

	struct bufferevent * bev = NULL;

	bev = bufferevent_socket_new(base,fd ,BEV_OPT_CLOSE_ON_FREE);

	bufferevent_setcb(bev,read_cb,write_cb,event_cb,NULL);//给读写缓冲设置回调函数

	bufferevent_enable(bev,EV_READ);//设置读缓冲区可用,写缓冲区默认可用
}

int main(int argc, const char *argv[])
{
	//创建事件管理器
	struct event_base * base = NULL;
	base = event_base_new();
	
	//创建IP和端口
	struct sockaddr_in serv;
	serv.sin_family = AF_INET;
	serv.sin_port = htons(1111);
	serv.sin_addr.s_addr = htonl(INADDR_ANY);


	//创建事件监听器
	struct evconnlistener* listen = NULL;
	listen = evconnlistener_new_bind(base,listen_cb,base,LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE,-1,(struct sockaddr*)&serv,sizeof(serv));

	//循环执行
	event_base_dispatch(base);

	//释放资源
	evconnlistener_free(listen);
	event_base_free(base);
	return 0;
}
  1. 现象

客户端:
在这里插入图片描述

服务器:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值