linux arm 编译 libev,使用libev动手写网络程序1

libev本身是跨平台的,但是本文是为了讲解libevwork的(libevwork仅支持linux),所以下面所有的操作均在linux下进行。

下载:

安装:

解压:

tar -zxvf libev-4.15.tar.gz

cd libev-4.15

编译安装:

./configure

make

sudo make install

安装完成后,在/usr/local/include下会放置ev.h等头文件,在/usr/local/lib下会放置libev.a等库文件。

这里请注意,操作系统默认可能没有把/usr/local/lib配置到库的搜索路径中,需要手动添加,执行:

sudo vim /etc/ld.so.conf

在尾部加入一行:

/usr/local/lib

保存退出,然后执行:

sudo ldconfig

动手体验:

下面写的程序是一个简单的tcp客户端,它连接127.0.0.1的9090服务,并且把从服务器接收到的内容简单回传。代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

struct ev_loop* g_pEvLoop = NULL;

// IO事件回调

void cbEvents(struct ev_loop *loop, struct ev_io *w, int revents);

int main(int argc, char* argv[])

{

// 创建套接字

int sockc = socket(AF_INET, SOCK_STREAM, 0);

if (sockc < 0)

{

printf("create socket failed! \n");

return -1;

}

// 设置连接的服务器地址

struct sockaddr_in sinto;

sinto.sin_family = AF_INET;

sinto.sin_addr.s_addr = inet_addr("127.0.0.1");

sinto.sin_port = htons(9090);

// 连接服务器

int ret = connect(sockc, (struct sockaddr*)&sinto, sizeof(sinto));

if (ret < 0)

{

printf("connect failed! \n");

return -1;

}

printf("connect ok! \n");

// 初使化ev_loop对象

g_pEvLoop = ev_default_loop(0);

// 注册读事件

ev_io evio;

ev_io_init(&evio, &cbEvents, sockc, EV_READ);

ev_io_start(g_pEvLoop, &evio);

// 启动事件循环

printf("ev start! \n");

ev_run(g_pEvLoop, 0);

printf("ev stop! \n");

return 0;

}

// IO事件回调

void cbEvents(struct ev_loop *loop, struct ev_io *w, int revents)

{

int sockc = w->fd;

// 检测读事件

if ((revents & EV_READ) == EV_READ)

{

char sbuf[1024] = { 0 };

int bytes_in = recv(sockc, sbuf, 1023, 0);

// 连接中断

if (bytes_in <= 0)

{

printf("disconnect! \n");

// 取消事件注册

ev_io_stop(g_pEvLoop, w);

// 释放连接资源

close(sockc);

// 退出事件循环

ev_break(g_pEvLoop, EVBREAK_ALL);

return;

}

// 文本内容,可简单打印

printf("recv: %s \n", sbuf);

// 简单回传

send(sockc, sbuf, bytes_in, 0);

}

}

将代码保存为evtest.c,然后编译:

gcc -o evtest evtest.c -lev

服务端简单地用nc工具来代替,使用nc还有一个好处就是,它能够接收控制台的输入并发送给对端,执行过程如下:

[test@localhost ~]$ nc -lv4 9090

Ncat: Version 7.50 ( https://nmap.org/ncat )

Ncat: Listening on 0.0.0.0:9090

Ncat: Connection from 127.0.0.1.

Ncat: Connection from 127.0.0.1:56792.

a

a

b

b

c

c

^C

客户端执行过程如下:

[test@localhost tmp]$ ./evtest

connect ok!

ev start!

recv: a

recv: b

recv: c

disconnect!

ev stop!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值