libevent笔记- bufferevent的客户端

....


using namespace std;


void event_on_write(struct bufferevent *bev, void *arg){
    cout<<"-------notic: data send ok"<<endl; //发送成功后回调

}

void event_on_connect(struct bufferevent *bev, short events, void *arg)
{
    if (events & BEV_EVENT_CONNECTED) {
        cout<<"---------have connected okay"<<endl;
        bufferevent_write(bev, "hello", sizeof("hello")); //connect success and send data
    } else if (events & BEV_EVENT_EOF) {
        cout<<"Connection closed"<<endl;
        bufferevent_free(bev);
        struct event_base *base = (struct event_base *)arg;
        event_base_loopbreak(base);
    } else if (events & BEV_EVENT_ERROR) {
        printf("Got an error on the connection: %s\n",strerror(errno));
        bufferevent_free(bev);
        struct event_base *base = (struct event_base *)arg;
        event_base_loopbreak(base);
    }
}

void event_on_read(struct bufferevent *bev, void *arg)
{
    char buf[1024];
    int n;
    struct evbuffer * input = bufferevent_get_input(bev);
    while((n=evbuffer_remove(input, buf, sizeof(buf)))>0){
         fwrite(buf, 1, n, stdout); fflush(stdout); //recv data and print
    }
}

int main(){

   struct event_base *base = event_base_new();
   struct bufferevent *bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
   文件描叙符可以设置为-1,只要稍后用bufferevent_setfd或者bufferevent_socket_connect()来设置它
   //struct bufferevent *bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE);

   struct sockaddr_in sin;
    memset(&sin, 0, sizeof(sin));
    sin.sin_family = AF_INET;
    //sin.sin_addr.s_addr = inet_addr("127.0.0.1");//点分转换netlong//htonl(0x7f000001);
    evutil_inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr.s_addr);
    sin.sin_port = htons(5001);

     //connect server( event bind fd)
    int connectfd = bufferevent_socket_connect(bev, (struct sockaddr*)&sin, sizeof(sin));

    if( connectfd<0 ){
        cout<<"=========connect failed==============="<<endl;
        bufferevent_free(bev);
        return -1 ;
    }

     //set callback func 
    bufferevent_setcb(bev, event_on_read, event_on_write, event_on_connect, base);
    bufferevent_enable(bev, EV_READ | EV_WRITE); //bev support read and write

    event_base_dispatch(base);
}
            

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字正腔圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值