原文地址:http://www.s135.com/libevent_windows
本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe。
假设 Visual Studio 2005 的安装路径为“D:\Program Files\Microsoft Visual Studio 8\”,Libevent 2.0.10 解压后的路径为“D:\libevent-2.0.10-stable”。
一、编译生成 Libevent 2.0.10 静态链接库。
1、修改“D:\libevent-2.0.10-stable\event_iocp.c”、“D:\libevent-2.0.10-stable\evthread_win32.c”、“D:\libevent-2.0.10-stable\listener.c”三个文件,在文件开头分别加上一行:
2、鼠标点击Windows左下角的【开始】-【所有程序】,找到【Microsoft Visual Studio 2005】,执行下图中的脚本:
3、按照下图中的方法编译Libevent 2.0.10:
4、生成的“libevent.lib”、“libevent_core.lib”、“libevent_extras.lib”三个文件就是我们需要的 Libevent 静态链接库。
二、利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序
1、打开 Visual Studio 2005,新建一个项目
2、选择在“d:\test”目录内创建一个“Win32 控制台应用程序”
3、按照下图进行选择
4、创建完成项目后,会自动生成“d:\test\httpd\”目录,在该目录内创建一个“httpd.c”文件,内容如下:
- #include <stdio.h>
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
- #include <winsock2.h>
- #include <event.h>
- #include <evhttp.h>
- void root_handler(struct evhttp_request *req, void *arg)
- {
- struct evbuffer *buf = evbuffer_new();
- if(!buf){
- puts("failed to create response buffer");
- return;
- }
- evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));
- evhttp_send_reply(req, HTTP_OK, "OK", buf);
- }
- void generic_handler(struct evhttp_request *req, void *arg)
- {
- struct evbuffer *buf = evbuffer_new();
- if(!buf){
- puts("failed to create response buffer");
- return;
- }
- evbuffer_add_printf(buf, "Requested: %s\n", evhttp_request_uri(req));
- evhttp_send_reply(req, HTTP_OK, "OK", buf);
- }
- int main(int argc, wchar_t* argv[])
- {
- struct evhttp *httpd;
- WSADATA wsaData;
- DWORD Ret;
- if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) {
- printf("WSAStartup failed with error %d\n", Ret);
- return -1;
- }
- event_init();
- httpd = evhttp_start("0.0.0.0", 8505);
- if(!httpd){
- return 1;
- }
- evhttp_set_cb(httpd, "/", root_handler, NULL);
- evhttp_set_gencb(httpd, generic_handler, NULL);
- printf("httpd server start OK!\n");
- event_dispatch();
- evhttp_free(httpd);
- WSACleanup();
- return 0;
- }
5、回到 Visual Studio 2005,在左侧的【源文件】中选择【添加】-【现有项】,将上一步创建的“httpd.c”文件添加进来。
6、在【解决方案“httpd”】上点击鼠标右键,选择【属性】
7、将【配置】改为“Release”
8、将“D:\libevent-2.0.10-stable\include”整个目录复制到“D:\test\httpd\include”;将“D:\libevent-2.0.10-stable\WIN32-Code”目录内的“tree.h”文件和“event2”子目录,复制到“D:\test\httpd\include\”内;将“D:\libevent-2.0.10-stable\”目录内的所有“*.h”头文件复制到“D:\test\httpd\include\”内。可以在Windows左下角的【开始】-【运行】中输入“cmd”回车,在命令行窗口中执行以下命令,完成复制过程。
xcopy /E /H /R D:\libevent-2.0.10-stable\include\* D:\test\httpd\include\
xcopy /E /H /R D:\libevent-2.0.10-stable\WIN32-Code\* D:\test\httpd\include\
xcopy /E /H /R D:\libevent-2.0.10-stable\*.h D:\test\httpd\include\
9、回到 Visual Studio 2005,在左侧菜单中【解决方案“httpd”】下面一行【httpd】上点击鼠标邮件,选择【属性】,对每项内容进行修改。下图中红框内的数据即为修改后的数据。
注:下图中,附加依赖项填写:
忽略特定库填写:
10、完成设置后,在【解决方案“httpd”】上点击鼠标右键,选择【生成解决方案】。如果是重新编译,可以选择【重新生成解决方案】。生成成功后,“d:\test\httpd\Release”目录内的“httpd.exe”即为生成的可执行文件。
11、双击“httpd.exe”运行后,打开浏览器,访问“http://127.0.0.1:8505/”,则可以看到以下信息:一个简单的 HTTP Web Server 输出的内容。
12、如果你觉得像DOS程序一样的“httpd.exe”可执行文件图标不好看、没有显示版本信息,那么,你可以按照下图步骤,添加ICO图标文件。
13、添加版本信息
14、大功告成,下面显示的是带有自定义图标、版本信息的“httpd.exe”可执行程序。
附1:编译好的 Libevent 2.0.10 静态链接库与 httpd 的 Visual Studio 2005 工程源代码下载
附2:ICO图标制作工具下载
相关推荐
由于VS2019是一个Windows开发环境,我们需要下载适用于Windows的libevent源码,然后使用Visual Studio的CMake工具进行配置和编译,确保生成适用于VS2019的静态或动态链接库。 接下来,我们需要创建一个简单的HTTP...
标题"libevent-2.0.22-stable在windows环境下使用mingw编译"指的是一个关于使用MinGW编译工具在Windows操作系统上构建libevent库的2.0.22稳定版本的过程。libevent是一个开源的、跨平台的事件通知库,它提供了一种...
libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨...
描述中提到的“libevent 多线程 HTTP post服务器”表明这是一个利用libevent库开发的服务端程序,该程序能够接收并处理来自客户端的HTTP POST请求,并且采用了多线程技术以实现并发处理,提升系统性能。这通常意味着...
这是一个使用libevent实现的web服务器,客户端采用CInternetSession来实现的,是一个完整的可用的例子,项目采用cmake来管理。提供给大家参考,有问题可以邮件给buptxu@qq.com,多谢。
压缩包里面有静态编译好的openssl1.0.2和libevent-2.1.8,以及libevent的源代码及编译方法,openssl的编译方法请看:https://mp.csdn.net/postedit/81085150
在Windows环境下,libevent的静态库版本为libevent-2.0.19,这意味着它包含了一系列预编译的.lib文件,无需在项目中链接到libevent的动态库(.dll),从而避免了运行时对特定.dll文件的依赖。 **libevent的核心功能...
libevent-2.0.22-stable.tar.gz源码编译的Windows和Linux下的静态库,另附源码,电子书《libevent参考手册(中文版).pdf》、《libevent源码深度剖析.pdf》、《LibeventBook.pdf》。 Linux环境下该libevent静态库修改...
总结起来,这个压缩包为开发者提供了一个在Visual Studio 2017环境下编译和调试Libevent的便捷途径,使得深入学习和使用Libevent变得更为容易。通过理解Libevent的核心概念和使用方法,开发者可以构建出高效、可靠的...
例如,他们可以创建一个服务器,当有新的客户端连接时,libevent_core.lib会处理网络连接,libevent.lib则负责调度事件,libevent_extras.lib可能用于实现HTTP服务或者进行DNS查询。 在实际开发中,首先需要将这些...
libevent是一个开源的事件通知库,它在C语言中实现,广泛应用于网络编程,尤其是服务器端的高并发处理。它通过提供一个统一的API,使得开发者能够方便地处理各种I/O事件,如网络套接字、信号、定时器等。在本资源中...
总的来说,libevent 2.1.12版本是一个强大且可靠的事件库,它的全面文件包包含了预编译的库文件和头文件,方便开发者在自己的项目中快速集成和使用。无论是初学者还是经验丰富的开发者,都能从中受益,实现高效的...
本话题主要涉及如何在Visual Studio 2008环境下编译和调试libevent库,这是一个广泛应用于网络事件处理的高性能库。libevent-2.0.22是本文讨论的具体版本,这个版本包含了对多种事件机制的支持,如select、poll、...
**一、libevent实现UDP relay服务器** 1. **初始化libevent库**:在服务器端,首先需要初始化libevent库,设置事件基础(event_base),这通常是程序的入口点。事件基础管理事件处理和调度。 2. **创建UDP监听套接...
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows...
libEvent是一个跨平台的事件通知库,它允许程序员编写高性能的异步网络服务。本篇将深入探讨如何利用libEvent库在C++中实现HTTP的POST和GET请求。 首先,理解HTTP的基本概念至关重要。HTTP(超文本传输协议)是...
c++版本libevent,仿照libevent写的一个服务器框架,libevent的基本功能已实现,暂时不能在windows平台上使用,定时器是纯粹的timer wheel方式,与libevent的小根堆不一样,而且最大定时时间是固定的,暂时不支持...
7. **跨平台兼容性**:Libevent的一个重要优势就是其跨平台能力,可以用于Windows、Linux、Mac OS X等多种操作系统,并且在不同平台上都能保持一致的API和行为。 **文件名称列表解析** 压缩包内的文件名"libevent-...
**标题与描述解析** 标题提及的是"libevent对应...在实际开发中,开发者根据项目需求选择链接这些库中的一个或多个,并通过NDK的JNI(Java Native Interface)接口与Java代码交互,实现Android应用的原生性能优化。
全部C代码,linux下的线程池和libevent配合实现的高并发tcp服务器,tcp通讯采用分帧的方式发包,帧包含帧头和数据部分,使用libevent的bufferevent方式来实现的帧提取,可直接使用GCC来编译。还配套有一个C#写的...