在 Ubuntu 的环境上进行编译运行,先要安装 libevent 的库,然后将生成的 软件上传到 阿里云上面,
在阿里云的管理后台打开相应的端口,在客户端使用 网络调试助手 发送数据,成功回显
代码如下:
#include <stdio.h>
#include <event.h>
#include <arpa/inet.h>
#include <event2/listener.h>
void CliReadCb(struct bufferevent *bev,void *arg)
{
//将接受到的消息发回去
char buf[1024];
int len;
len=bufferevent_read(bev,buf,sizeof(buf));
bufferevent_write(bev,buf,len);
}
void CliWriteCb(struct bufferevent *bev,void *arg)
{
}
void CliEventCb(struct bufferevent *bev,short int events,void *arg)
{
printf("Link Event %X\n",events);
if(events&(BEV_EVENT_EOF|BEV_EVENT_ERROR))
{
bufferevent_free(bev);
}
}
void cb_listener(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *addr, int len, void *ptr)
{
printf("New Client\n");
struct bufferevent *bev;
bev=bufferevent_socket_new(evconnlistener_get_base(listener),fd,BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(bev,CliReadCb,CliWriteCb,CliEventCb,bev);
bufferevent_enable(bev,EV_READ);
}
/***********************************************************
* 使用bufferevnet 和 evconnlistener 创建服务器代码
*
***********************************************************/
int main()
{
struct event_base *base=event_base_new();
struct sockaddr_in serverAddr;
struct evconnlistener* listener;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(9000);
serverAddr.sin_addr.s_addr = inet_addr("0.0.0.0");
listener = evconnlistener_new_bind(base, cb_listener, base, LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE, 36, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
printf("Tcp Server is running!\n");
event_base_dispatch(base);
evconnlistener_free(listener);
event_base_free(base);
return (0);
}