用libevent写个简单的server/client
libevent是一个轻量级的事件触发库,可以很好地利用在网络通讯上面,用其进行大量的异步,延时,重发等场景。
下面是一个server的demo
#include include void 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 = {,};
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, ); /* Name the socket. */ server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons();
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, );
main_loop(server_sockfd);
}
用libevent写个简单的server/client的更多相关文章
- libuv httpparser写的简单http server
libuv文档地址:http://docs.libuv.org/en/v1.x/代码地址:https://github.com/libuv/libuvhttp-parser https://githu ...
- 教你写个简单到的 Redis Client 框架 - .NET Core
目录 1,关于 Redis RESP 定义数据类型 2,定义异步消息状态机 3,定义命令发送模板 4,定义 Redis Client 5,实现简单的 RESP 解析 6,实现命令发送客户端 7,如何使 ...
- 从0开始写一个简单的vite hmr 插件
从0开始写一个简单的vite hmr 插件 0. 写在前面 在构建前端项目的时候,除开基本的资源格式(图片,json)以外,还常常会需要导入一些其他格式的资源,这些资源如果没有第三方vite插件的支持 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 如何写一个简单的http服务器
最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...
- NetMQ(ZeroMQ)Client => Server => Client 模式的实现
ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库.它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(m ...
- (2)自己写一个简单的servle容器
自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...
- docker报Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)
docker version Client: Version: 17.05.0-ce API version: 1.24 (downgraded from 1.29) Go version: go1. ...
- (原创)如何使用boost.asio写一个简单的通信程序(一)
boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...
随机推荐
- Ubuntu18.04LTS安装docker报错:Command 'lsb_release' not found
Ubuntu18.04LTS安装docker在执行sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/ ...
- 分布式系统一致性问题与Raft算法(下)
上一篇讲述了什么是分布式一致性问题,以及它难在哪里,liveness和satefy问题,和FLP impossibility定理.有兴趣的童鞋可以看看分布式系统一致性问题与Raft算法(上). 这一节 ...
- 【Amaple教程】6. 路由配置
在 第1节<启动路由> 章节中为了能让单页应用顺利跑起来,我们提前介绍了简单的路由配置方法.我们已了解路由配置的目的是指定不同的url下对应的 模块节点(也叫做模块容器)内应该显示哪个模块 ...
- IDEA激活码(可用2100年,亲测有效)
三步骤: 1.下载rar包 2.将rar中bin包内容替换IDEA安装目录下bin内容,然后编辑idea.exe.vmoptions和idea64.exe.vmoptions文件,编辑内容一样 将最后 ...
- 阿里云Tomcat配置
阿里云Tomcat配置并开放 本文可对以下问题提供参考 服务器 如何配置 Tomcat 配置 端口在监听,但是外网无法访问怎么办 注意事项: 对于阿里云服务器相对较为特殊,因为阿里云服务器除了需要在系 ...
- python切片使用方法(超详细)
#切片:就是根据一个下标范围来获取一部分数据,切片通常结合字符串,列表,元组使用 # 为什么使用切片?因为下标只能获取一个数据,所以想要获取字符串或者列表当中一部分数据需要用切片. # 切片的语法格式 ...
- 为.net Core 3.0 WebApi 创建Linux守护进程
前言 我们一般可以在Linux服务器上执行 dotnet <app_assembly.dll> 命令来运行我们的.net Core WebApi应用.但是这样运行起来的应用很不稳定,关闭终 ...
- scrapy全栈抓xpc练习
# spider文件 # -*- coding: utf-8 -*- import scrapy import re from scrapy import Request import json im ...
- python基础学习day02
pycharm的安装以及简单使用 辅助开发软件,代码逐行调试,设计高端 python的种类: CPython:官方推荐可以转换成c能够识别的字节码. JPython:可以转化为Java语言能够 ...
- react build本地相对目录 "homepage": ".", package.json
react build相对目录 "homepage": ".", package.json