Libevent使用实例2 (中等) : bufferevent

客户端:

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<unistd.h>

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include<event.h>
#include<event2/bufferevent.h>
#include<event2/buffer.h>
#include<event2/util.h>

int tcp_connect_server(const char* server_ip, int port);

void cmd_msg_cb(int fd, short events, void* arg);
void server_msg_cb(struct bufferevent* bev, void* arg);
void event_cb(struct bufferevent *bev, short event, void *arg);

int main(int argc, char** argv) {
	if(argc < 3) {
		printf("please input 2 parameter \n");
		return -1;
	}

	//两个参数依次是服务器端的IP地址,端口号
	int sockfd = tcp_connect_server(argv[1],atoi(argv[2]));
	if(sockfd == -1) {
		perror("tcp_connect error");
		return -1;
	}

	printf("connect to server successful\n");

	struct event_base* base = event_base_new();

	struct bufferevent* bev = bufferevent_socket_new(base,sockfd,BEV_OPT_CLOSE_ON_FREE);

	//监听终端输入事件
	struct event* ev_cmd = event_new(base,STDIN_FILENO, EV_READ | EV_PERSIST, cmd_msg_cb, (void*)bev);
	
	event_add(ev_cmd,NULL);

	//当socket关闭时会用到回调参数
	bufferevent_setcb(bev,server_msg_cb,NULL,event_cb,(void*)ev_cmd);	
	// read_cb:server_msg_cb,  eventcb:event_cb, cbarg:ev_cmd
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值