用libevent写个简单的server/client
来源:互联网 发布:3d网络渲染 编辑:程序博客网 时间:2024/05/21 12:45
libevent是一个轻量级的事件触发库,可以很好地利用在网络通讯上面,用其进行大量的异步,延时,重发等场景。而且libevent里面大量运用了函数指针,用户层/底层 分离,对于提高自己代码构架很有帮助。
下面是一个server的demo
#include includevoid cb_func(evutil_socket_t fd, short what, void *arg){ int client_len; evutil_socket_t client_fd; struct sockaddr_in client_address; evutil_socket_t fd1 = *(evutil_socket_t *)arg; printf("Got an event on socket %d:%s%s%s%s \n\r", (int) fd, (what&EV_TIMEOUT) ? " timeout" : "", (what&EV_READ) ? " read" : "", (what&EV_WRITE) ? " write" : "", (what&EV_SIGNAL) ? " signal" : ""); client_fd=accept(fd1, (struct sockaddr *)&client_address, &client_len); }void main_loop(evutil_socket_t fd1){ struct event *ev1, *ev2; struct timeval five_seconds = {5,0}; struct event_base *base = event_base_new(); /* The caller has already set up fd1, fd2 somehow, and make them nonblocking. */ /* 初始化事件 */ ev1 = event_new(base, fd1, EV_READ|EV_PERSIST, cb_func,&fd1); //EV_PERSIST选项相当于让event_add()持续有效 /* 注册事件 */ event_add(ev1, NULL); //event_add(ev1, &five_seconds); /* 循环监听 */ event_base_dispatch(base);}int main(){ evutil_socket_t server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address;/* Remove any old socket and create an unnamed socket for the server. */ server_sockfd = socket(AF_INET, SOCK_STREAM, 0);/* Name the socket. */ server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(9734); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len);// Create a connection queue and wait for clients. listen(server_sockfd, 5); main_loop(server_sockfd);}
0 0
- 用libevent写个简单的server/client
- Java: 写个简单的Client,Server聊天程序
- libevent基础:用libevent写服务端server程序和客户端client程序
- 利用Libev写一个简单的client和server程序
- 用Go写一个简单的TCP server or client 模型
- 用最简单的方式实现基于libevent框架的http client客户端
- 简单的client/server模型
- libevent for echo server and client
- libevent for echo server and client
- 用python实现的简单Server/Client文件传输
- 3个学习Socket编程的简单例子:TCP Server/Client, Select
- Java Socket 简单的Client/Server程序
- Java Socket 简单的Client/Server程序
- 一个简单的server和client程序
- 简单的socket UDP Client Server通信
- 简单的TCP连接Server和Client
- 最简单的server/client程序
- Python 实现的简单server-client demo
- PC^2配置记录 (PC2 ACM)
- shell中的括号(小括号,中括号,大括号)
- 前端动画渲染引擎pixi.js系列(4)如何实现鼠标交互事件
- Spring:源码解读Spring IOC原理
- 用户输入密码次数的限制笔记
- 用libevent写个简单的server/client
- spring配置文件的说明
- Boke测试
- Phoenix 技术分享
- MySQL的Replace into 与Insert into ..... on duplicate key update ...真正的不同之处
- 对选中图层的操作
- linux tar压缩排除某个文件夹
- 登陆页面实现保存帐号密码功能
- 有限元方法编程计算电场中各个区域分布的电势