libevent:windows环境配置+QT使用

目录

libevent是什么

编译

QT使用

测试代码


  • libevent是什么

Fast portable non-blocking network programming with Libevent

http://www.wangafu.net/~nickm/libevent-book/TOC.html

这篇文档讲的很清楚,尤其是Chapter 1: A tiny introduction to asynchronous IO.,基本上讲清楚了大多数的内容

  • 编译

环境:

1、win10 64位
2、vs2015专业版(nmake)/Cmake
3、libevent 2.1.11(官方下载链接)
4、libevent解压的文件夹目录为:“E:\libevent\libevent-2.1.11-stable”

 参考文章: vs2015编译方式和cmake编译方式.

  • QT使用

根据编译方式不同,配置QT环境.以下使用VS2015方式

创建项目libevent_test.

新建libevent目录下创建libevent.pri文件,并在libevent_test.pro文件中添加

QT       +=  networkINCLUDEPATH += $$PWD/libevent  #通过路径添加子文件内容
include($$PWD/libevent/libevent.pri) #添加子文件夹所需pri文件

将编译生成的文件放置于libevent目录下

E:\libevent\libevent-2.1.11-stable\include下                        event2文件夹及其内文件

E:\libevent\libevent-2.1.11-stable\WIN32-Code\nmake下   evconfig-private.h文件和event2文件夹及其内文件

E:\libevent\libevent-2.1.11-stable下                                     libevent.lib,libevent_core.liblibevent_extras.lib文件

 libevent.pri文件添加

INCLUDEPATH += -L$$PWD
LIBS += -ladvapi32 -lws2_32 -lwsock32
LIBS += -L$$PWD/ -llibevent -llibevent_core -llibevent_extras
  • 测试代码

 main.cpp

#include <QApplication>
#include <QDebug>
#include <WinSock2.h>
#include <windows.h>
#include "include/event2/listener.h"
#include "include/event2/buffer.h"
#include "include/event2/bufferevent.h"
#include "include/event2/event.h"
#include "include/event2/event_compat.h"
#pragma comment(lib, "ws2_32.lib")static  void echo_read_cb(struct bufferevent *bev,void *ctx)
{struct evbuffer *input = bufferevent_get_input(bev);struct evbuffer *output = bufferevent_get_output(bev);evbuffer_add_buffer(output,input);qDebug() << " port  read " ;
}static  void echo_event_cb(struct bufferevent *bev,short events,void *ctx)
{if(events & BEV_EVENT_ERROR)qDebug()<< "error form bufferevent";if(events & (BEV_EVENT_EOF | BEV_EVENT_ERROR))bufferevent_free(bev);
}static  void accept_conn_cb(struct evconnlistener *listener,evutil_socket_t fd,struct sockaddr *address,int socklen,void *ctx)
{struct  event_base *base = evconnlistener_get_base(listener);struct bufferevent *bev = bufferevent_socket_new(base,fd,BEV_OPT_CLOSE_ON_FREE);bufferevent_setcb(bev,echo_read_cb,NULL,echo_event_cb,NULL);bufferevent_enable(bev,EV_READ|EV_WRITE);qDebug() << " port  connect ";
}static  void accept_error_cb(struct evconnlistener *listener,void *ctx)
{struct event_base *base = evconnlistener_get_base(listener);event_base_loopexit(base,NULL);
}int main(int argc, char *argv[])
{QApplication a(argc, argv);WORD sockVerson = MAKEWORD(2, 2);WSADATA wsaData;if (WSAStartup(sockVerson, &wsaData)){qDebug() << "init WinSock fail";return 1;}qDebug() << "init WinSock yes";struct event_base *base;struct evconnlistener *listener;struct sockaddr_in sin;int port = 9876;base = event_base_new();memset(&sin,0,sizeof(sin));sin.sin_family = AF_INET;sin.sin_addr.s_addr = htonl(0);sin.sin_port = htons(port);listener = evconnlistener_new_bind(base,accept_conn_cb,NULL,LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE,-1,(struct sockaddr*)&sin,sizeof(sin));if(!listener){qDebug()<<"could't create listener";return 1;}evconnlistener_set_error_cb(listener,accept_error_cb);event_base_dispatch(base);qDebug()<<"thread quit";return a.exec();
}

验证连接

telnet 连接 

连接成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab入门

命名规则&#xff1a; clc&#xff1a;清除命令行的所有命令 clear all&#xff1a;清除所有工作区的内容 注释&#xff1a;两个% 空格 %% matlab的数据类型 1、数字 3 3 * 5 3 / 5 3 5 3 - 52、字符与字符串 s a %% 求s的ascill码 abs(s) char(97) num2str(65) str I…

家政小程序开发-H5+小程序

移动互联网的发展&#xff0c;微信小程序逐渐成为商家拓展线上业务的重要手段。家政服务作为日常生活中不可或缺的一部分&#xff0c;也开始尝试通过小程序来提高服务质量和效率。 下面是一篇关于家政小程序开发的H5小程序的文章&#xff0c;希望对您有所帮助。 家政服…

Redis进阶底层原理- 缓冲区

Redis中使用了很多缓冲区&#xff0c;在redis各个环节起到了非常核心的作用。下面来一一介绍一下&#xff1a; 输入输出缓冲区&#xff08;客户端缓冲区&#xff09; Redis中的输入输出缓冲区是为了平衡客户端发送命令和服务端处理命令的速度差异&#xff0c;如果客户端发送指…

一本通1910:【00NOIP普及组】计算器的改良题解

今天是编程集训的第二天&#xff0c;也是我来到CSDN整整1年。感谢所有阅读过我的文章的人&#xff0c;谢谢。 今天的比赛难度略低于昨天&#xff0c;但这道题也卡了我好久。 进入正题 题目&#xff1a; 题目描述&#xff1a; NCL是一家专门从事计算器改良与升级的实验室&a…

手把手带你实现ChatGLM2-6B的P-Tuning微调

参考文献&#xff1a;chatglm2ptuning 注意问题1&#xff1a;AttributeError: ‘Seq2SeqTrainer’ object has no attribute is_deepspeed_enabl torch.distributed.elastic.multiprocessing.errors.ChildFailedError: 可能是版本太高&#xff0c;可以参考chatglm2的环境

mysql笔记

目录 1、root用户密码忘记 2、SQL的分类 2.1、DQL数据查询语言 前言 2.1.1、设置别名 2.1.2、去除重复行 2.1.3、空值参与运算 2.1.4、着重号 2.1.5、显示表结构 2.1.6、算数运算符 2.1.7、比较运算符 2.1.8、逻辑运算符 2.1.9、位运算符 2.1.10、 模糊查询 2.1.…

基于Java+SpringBoot+Vue前后端分离校园管理系统详细设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

sqli-labs 堆叠注入 解析

打开网页首先判断闭合类型 说明为双引号闭合 我们可以使用单引号将其报错 先尝试判断回显位 可以看见输出回显位为2&#xff0c;3 尝试暴库爆表 这时候进行尝试堆叠注入&#xff0c;创造一张新表 ?id-1 union select 1,database(),group_concat(table_name) from informatio…

分布式应用之zookeeper集群+消息队列Kafka

一、zookeeper集群的相关知识 1.zookeeper的概念 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能…

一级分类全覆盖!安全狗入选《嘶吼2023网络安全产业图谱》

7月10日&#xff0c;嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》。作为国内云原生安全领导厂商&#xff0c;安全狗入选图谱中的多个细分领域。 据悉&#xff0c;本次《嘶吼2023网络安全产业图谱》采用了市…

JavaScript——基础知识及使用

初识 JavaScript JavaScript (简称 JS) 是世界上最流行的编程语言之一.一个脚本语言, 通过解释器运行.主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行. JavaScript 的能做的事情: 网页开发(更复杂的特效和用户交互)网页游戏开发服务器开发(node.js)桌…

Pandas Groupby:在Python中汇总、聚合和分组数据

GroupBy是一个非常简单的概念。我们可以创建一个类别分组&#xff0c;并对这些类别应用一个函数。这是一个简单的概念&#xff0c;但它是一种在数据科学中广泛使用的非常有价值的技术。在真实的的数据科学项目中&#xff0c;您将处理大量数据并一遍又一遍地尝试&#xff0c;因此…

HUAWEI Mate X3:内外屏双享,折叠影像诠释精彩

HUAWEI Mate X3是全球首款四曲折叠手机&#xff0c;轻薄实力派。它采用了独创的寰宇舷窗设计&#xff0c;内外双屏高清呈现均支持120Hz疾速高刷&#xff0c;10.7亿色彩显示&#xff0c;获得德国莱茵TV色准和准确色彩投射双认证。无论是看视频、玩游戏、办公学习&#xff0c;还是…

T5模型: Transfer Text-to-Text Transformer(谷歌)

&#x1f525; T5由谷歌发表于2019&#xff0c;《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》&#xff0c;最终版本发布在&#xff1a;JMLR。 一句话总结T5: 大一统模型&#xff0c;seq2seq形式完成各类nlp任务&#xff0c;大数据集…

JAVA15个常见面试题

下面是一些常见的Java面试题及答案&#xff1a; Java中的值传递和引用传递有什么区别&#xff1f; Java中的参数传递方式都是值传递&#xff0c;但是对于引用类型的参数&#xff0c;传递的是对象的引用副本。 什么是Java中的面向对象编程&#xff1f; 面向对象编程是一种编程范…

推荐系统-基于标签的Top-N个性化推荐实现

随着移动互联网的快速发展&#xff0c;UGC标签系统受到越来越多推荐应用&#xff0c;标签不但能反映用户的兴趣又能描述物品的本身特征。现有的标签推荐算法没有考虑用户的连续行为所产生的影响&#xff0c;于是人们提出了一种基于标签的个性化推荐算法。该算法将〈用户-标签-物…

谷歌云构建漏洞容易引发潜在的供应链攻击

云安全公司Orca Security在谷歌云构建&#xff08;Google Cloud Build&#xff09;服务中发现了一个关键的设计漏洞&#xff0c;该漏洞会让攻击者的权限升级&#xff0c;使他们可以在未经授权的情况下访问谷歌构件注册表&#xff08;Google Artifact Registry&#xff09;代码库…

VoIP监控工具有什么作用

VoIP 监控工具利用思科的 IPSLA 技术生成合成流量并监控客户端体验的呼叫质量。与被动监控VoIP指标相反&#xff0c;IPSLA技术允许IT管理员主动并在潜在问题发生之前检测到它们&#xff0c;这使组织能够轻松遵守严格的SLA指标。 思科 IPSLA 技术在两台设备之间创建流量&#x…

这样创建客户帮助中心,效果超好!

创建一个有效的客户帮助中心是为了为客户提供优质的支持和服务。在这个数字化时代&#xff0c;客户期望能够快速找到所需的信息&#xff0c;并得到准确和及时的解答。本文将分享创建有效客户帮助中心的最佳实践&#xff0c;帮助您提供出色的客户体验并提升客户满意度。 1. 了解…

Python 字典 get()函数使用详解,字典获取值

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 get函数使用详解 1、设置默认返回值2、嵌套字典取值3、get() 和 dict[key] 的区别…