精华内容
下载资源
问答
  • libevent windows编译

    2018-07-17 14:44:04
    2.打开vs命令行工具进入libevent-2.1.8-stable目录下执行nmake ./Makefile.nmake 只要三个libevent.lib,libevent_core.lib,libevent_extras.lib编译出来即可 下面的命令也可 全量编译:nmake /f Makefile.nmake ...

    1.官网下载http://libevent.org/最新源码
    2.打开vs命令行工具进入libevent-2.1.8-stable目录下执行nmake  ./Makefile.nmake  只要三个libevent.lib,libevent_core.lib,libevent_extras.lib编译出来即可
    下面的命令也可
    全量编译:nmake /f Makefile.nmake [all] //all可以省略,默认是all
    库编译:  nmake /f Makefile.nmake static_libs
    测试编译:nmake /f Makefile.nmake tests
    清理输出:nmake /f Makefile.nmake clean
    3.添加静态lib库和include头文件,头文件要把WIN32-Code下的event-config.h包含进去即可。
    服务端源码:
    #include <stdio.h>
    #include <time.h>
    #include <event2/bufferevent.h>
    #include <event2/buffer.h>
    #include <event2/listener.h>
    #include <event2/util.h>
    #include <event2/event.h>
    #pragma comment(lib,"ws2_32.lib")
    const int PORT = 2500;
    const int BUFFER_SIZE = 1024;

    void listener_cb(struct evconnlistener *, evutil_socket_t,
        struct sockaddr *, int socklen, void *);
    void conn_writecb(struct bufferevent *, void *);
    void conn_readcb(struct bufferevent *, void *);
    void conn_eventcb(struct bufferevent *, short, void *);
    void delay(int ms);

    int main(int argc, char **argv)
    {
        printf("I am server\n");
    #ifdef WIN32
        WSAData wsaData;
        WSAStartup(MAKEWORD(2, 0), &wsaData);
    #endif
        struct sockaddr_in sin;
        memset(&sin, 0, sizeof(sin));
        sin.sin_family = AF_INET;
        sin.sin_port = htons(PORT);

        struct evconnlistener *listener;
        struct event_base *base = event_base_new();
        if (!base)
        {
            printf("Could not initialize libevent\n");
            return 1;
        }
        listener = evconnlistener_new_bind(base, listener_cb, (void *)base,
            LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, -1,
            (struct sockaddr*)&sin,
            sizeof(sin));

        if (!listener)
        {
            printf("Could not create a listener\n");
            return 1;
        }

        event_base_dispatch(base);
        evconnlistener_free(listener);
        event_base_free(base);

        printf("done\n");
        return 0;
    }

    void listener_cb(struct evconnlistener *listener, evutil_socket_t fd,
        struct sockaddr *sa, int socklen, void *user_data)
    {
        printf("Detect an connection\n");
        struct event_base *base = (struct event_base *)user_data;
        struct bufferevent *bev;

        bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
        if (!bev)
        {
            printf("Could not create a bufferevent\n");
            event_base_loopbreak(base);
            return;
        }
        bufferevent_setcb(bev, conn_readcb, conn_writecb, conn_eventcb, NULL);
        bufferevent_enable(bev, EV_READ | EV_WRITE);
        //服务器监听到连接时,给客户端发送第一条消息
        char *reply_msg = "I receive a message from server";
        bufferevent_write(bev, reply_msg, strlen(reply_msg));
    }

    //conn_writecwritecb函数将在bufferevent中的output evbuffer缓冲区发送完成后被调用。
    //此时evbuffer_get_length(output) = 0,说明output evbuffer缓冲区被清空。
    //假设发现有10000条记录要发送出去,1次发送10000条将占用大量内存,所以,我们要分批发送
    //先发送100条数据,假设每条数据为1024字节bufferevent_write(bev,buf,1024 *100);
    //系统在这100条记录发送完成后将调用conn_writecbb回调函数,然后在该函数中循环发送剩下的
    //数据
    void conn_writecb(struct bufferevent *bev, void *user_data)
    {
        //    struct evbuffer *output = bufferevent_get_output(bev);
        //    if (evbuffer_get_length(output) == 0)
        //    {
        //        printf("Output evbuffer is flushed\n");
        //        bufferevent_free(bev);
        //    }
        //delay 1 second
        delay(1000);
        static int msg_num = 1;
        char reply_msg[1000] = { '\0' };
        char *str = "I receive a message from server ";
        memcpy(reply_msg, str, strlen(str));
        sprintf(reply_msg + strlen(str), "%d", msg_num);
        bufferevent_write(bev, reply_msg, strlen(reply_msg));
        msg_num++;
    }

    void conn_readcb(struct bufferevent *bev, void *user_data)
    {
        struct evbuffer *input = bufferevent_get_input(bev);
        size_t sz = evbuffer_get_length(input);
        if (sz > 0)
        {
            char msg[BUFFER_SIZE] = { '\0' };
            bufferevent_read(bev, msg, sz);
            printf("%s\n", msg);
        }
    }

    void conn_eventcb(struct bufferevent *bev, short events, void *user_data)
    {
        if (events & BEV_EVENT_EOF)
        {
            printf("Connection closed\n");
        }
        else if (events & BEV_EVENT_ERROR)
        {
            printf("Got an error on the connection: %s\n", strerror(errno));
        }

        bufferevent_free(bev);
    }

    void delay(int ms)
    {
        clock_t start = clock();
        while (clock() - start < ms);
    }

    客户端找个网络调试工具进行连接即可

    展开全文
  • libevent windows 编译

    千次阅读 2013-07-09 09:23:06
    [文章作者:张宴 本文版本:v1.0 最后修改... 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP
    [文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.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”三个文件,在文件开头分别加上一行:
    #define _WIN32_WINNT 0x0500


      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”文件,内容如下:
    1. #include <stdio.h>  
    2.   
    3. #define WIN32_LEAN_AND_MEAN  
    4. #include <windows.h>  
    5. #include <winsock2.h>  
    6.   
    7. #include <event.h>  
    8. #include <evhttp.h>  
    9.   
    10. void root_handler(struct evhttp_request *req, void *arg)  
    11. {  
    12.     struct evbuffer *buf = evbuffer_new();  
    13.     if(!buf){  
    14.         puts("failed to create response buffer");  
    15.         return;  
    16.     }  
    17.   
    18.     evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));  
    19.     evhttp_send_reply(req, HTTP_OK, "OK", buf);  
    20. }  
    21.   
    22. void generic_handler(struct evhttp_request *req, void *arg)  
    23. {  
    24.     struct evbuffer *buf = evbuffer_new();  
    25.     if(!buf){  
    26.         puts("failed to create response buffer");  
    27.         return;  
    28.     }  
    29.   
    30.     evbuffer_add_printf(buf, "Requested: %s\n", evhttp_request_uri(req));  
    31.     evhttp_send_reply(req, HTTP_OK, "OK", buf);  
    32. }  
    33.   
    34. int main(int argc, wchar_t* argv[])  
    35. {  
    36.   struct evhttp *httpd;  
    37.   
    38.   WSADATA wsaData;  
    39.   DWORD Ret;  
    40.   if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)  {  
    41.     printf("WSAStartup failed with error %d\n", Ret);  
    42.     return -1;  
    43.   }  
    44.   
    45.     event_init();  
    46.   
    47.     httpd = evhttp_start("0.0.0.0", 8505);  
    48.     if(!httpd){  
    49.     return 1;  
    50.   }  
    51.   
    52.     evhttp_set_cb(httpd, "/", root_handler, NULL);  
    53.     evhttp_set_gencb(httpd, generic_handler, NULL);  
    54.   
    55.   printf("httpd server start OK!\n");  
    56.   
    57.     event_dispatch();  
    58.   
    59.     evhttp_free(httpd);  
    60.   
    61.   WSACleanup();  
    62.     return 0;  
    63. }  


      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”回车,在命令行窗口中执行以下命令,完成复制过程。
    mkdir D:\test\httpd\include\
    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】上点击鼠标邮件,选择【属性】,对每项内容进行修改。下图中红框内的数据即为修改后的数据。

      点击在新窗口中浏览此图片

      点击在新窗口中浏览此图片

      点击在新窗口中浏览此图片

      点击在新窗口中浏览此图片


      注:下图中,附加依赖项填写:
    ws2_32.lib wsock32.lib libevent.lib libevent_core.lib libevent_extras.lib

      忽略特定库填写:
    libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib

      点击在新窗口中浏览此图片


      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.编译 可以从github下载libevent的压缩包,解压后 修改以下三个文件,添加宏定义: 在以下3个文件开头添加“#define _WIN32_WINNT 0x0500” libevent-2.0.21-stable\event_iocp.c libevent-2.0.21-stab...

    之前简单分析了libevent的源码,过了一段时间要用的时候发现完全忘记了。。从头记录一下流程

    1.编译

    可以从github下载libevent的压缩包,解压后

    修改以下三个文件,添加宏定义:

    在以下3个文件开头添加“#define _WIN32_WINNT 0x0500”

    libevent-2.0.21-stable\event_iocp.c

    libevent-2.0.21-stable\evthread_win32.c

    libevent-2.0.21-stable\listener.c

    接下来打开vs自带的nmake 利用cd跳转到makefile所在文件夹 如

    cd/d  D:\libevent-master 

    nmake /f makefile.nmake

    2.使用lib

    编译成功后,会生成三个lib文件分别是

    libevent_core.lib   libevent_extras.lib  libevent.lib

    新建一个VC++控制台项目:

    环境配置:

    项目下建一个Lib目录,将上面三个lib文件copy到该目录下。

    新建一个Include目录,将D:\libevent-master\include下的文件和文件夹copy到该目录下,D:\libevent-master\WIN32-Code下的文件copy到该目录下,2个event2目录下的文件可合并一起。

    连接器:

    输入:ws2_32.lib;wsock32.lib;libevent.lib;libevent_core.lib;libevent_extras.lib;

    简单的使用可以参考下面这篇博客

    https://blog.csdn.net/lls2012/article/details/70904226

    转载于:https://www.cnblogs.com/wangshaowei/p/9224167.html

    展开全文
  • windows编译libevent

    2018-06-15 14:19:00
    这里简单介绍windows编译礼拜libevent,主要环境vs2017,libevent版本2.1.8。 先下载libevent源码:http://libevent.org/ 解压:libevent-2.1.8-stable 打开vs2017开发人员命令提示符,进入解压的目录输入:nmake...

       这里简单介绍windows编译礼拜libevent,主要环境vs2017,libevent版本2.1.8。

        先下载libevent源码:http://libevent.org/

        解压:libevent-2.1.8-stable

        打开vs2017开发人员命令提示符,进入解压的目录输入:nmake \f Makefile.nmake,  这样可以编译出32位的静态库,把静态库保存,删除所有生成文件,打开vs2017本机X64命令提示工具,进入解压目录,先打开文件Makefile.nmake,找到如下位置:

    LIBFLAGS=/nologo
    后面加入 /MACHINE:X64,如下:
    !IFDEF OPENSSL_DIR
    SSL_CFLAGS=/I$(OPENSSL_DIR)\include /DEVENT__HAVE_OPENSSL
    !ELSE
    SSL_CFLAGS=
    !ENDIF
    
    # Needed for correctness
    CFLAGS=/IWIN32-Code /IWIN32-Code/nmake /Iinclude /Icompat /DHAVE_CONFIG_H /I. $(SSL_CFLAGS)
    
    # For optimization and warnings
    CFLAGS=$(CFLAGS) /Ox /W3 /wd4996 /nologo
    
    # XXXX have a debug mode
    
    LIBFLAGS=/nologo /MACHINE:X64
    
    CORE_OBJS=event.obj buffer.obj bufferevent.obj bufferevent_sock.obj \
    	bufferevent_pair.obj listener.obj evmap.obj log.obj evutil.obj \
    	strlcpy.obj signal.obj bufferevent_filter.obj evthread.obj \
    	bufferevent_ratelim.obj evutil_rand.obj evutil_time.obj
    WIN_OBJS=win32select.obj evthread_win32.obj buffer_iocp.obj \
    	event_iocp.obj bufferevent_async.obj
    EXTRA_OBJS=event_tagging.obj http.obj evdns.obj evrpc.obj

    展开全文
  • Libevent编译与使用

    2016-01-27 19:42:00
    Libevent编译与使用 Libevent官网:http://libevent.org/ windows 7下编译编译环境:windows 7 + VS2010 (1)解压libevent到F:\libevent\libevent-2.0.21-stable (2)打开Microsoft ...
  • libevent编译2

    2019-05-24 14:57:21
    先要将其依赖的库编译好,其中openssl需要编译libevent中,编译libevent_openssl.lib库,zlib在新版本中只有示例用到。 1)windows 平台使用 VS2017 编译 openssl 源码 参考前面的文章 openssl 默认编译到 C:...
  • Windows 编译libevent

    2017-08-15 23:16:03
    先去github上 git glone https://github.com/libevent/libevent打开后 输入 nmake /f Makefile.nmake然后得到三个lib: 在vs2015中项目属性中添加附加目录:在打开链接器中的输入 看见...到这一步就完成安装 Windows li
  • libevent windows build

    2016-06-08 16:49:46
    http://libevent.org/ libevent windows budild 32b 64b debug release makefile.nmake Ox Od MDd Zi
  • 准备工作: 1、Perl 建议使用5.30以上版本,本人在使用时发现28的版本好像在配置openssl的时候有问题。...安装后打开vs编译环境(我编译的是vs2010) 验证perl和nasm是否安装成功 编译openssl 进入openssl-1.0.2j目录
  • libevent编译

    2021-04-03 20:01:46
    1 zlibc编译 2、libevent编译 nmake /f Makefile.nmake 解决办法 ---------------------------、
  • 在网上找了个例子,其实libevent本身带了很多测试用例,不过这是第一次编译成功,尼玛 各种高性能IO库都是在linux下的,win32果断被bs了,还好有libevent对win32支持的比较好。lib很顺利的编译好了。 下面就是很...
  • Windows编译libevent

    千次阅读 2018-03-18 17:25:36
    用cmake在windows编译libevent很简单,但是Github上通过release下载的没有包含cmake脚本GitHub地址:https://github.com/libevent/libevent/releases1.在GitHub上下载源码,我方才下载的是libevent-2.1.8-...
  • 转载至:http://blog.csdn.net/fuyuehua22/article/details/38014345 转载至:... Libevent官网:http://libevent.org/ ...windows 7下编译: ...编译环境: windows 7 + VS2
  • 编译libevent for windows

    2019-09-27 16:30:52
    libevent时常用的网络异步通信开发工具,...libevent在linux下编译方式很多,基于source机制很轻易就可以搞定,但是windows下提的有点少,下面记录下: 获取libevent的代码,一定要stable的,不能有beta啥的,获取方...
  • 由于之前在windows平台下接触过一个网络数据过滤的程序,当时也是第一次写关于网络方面的程序(之前写的小程序不算),明显的经验不足。很多知识都不够用,最后导致这个程序没有完成。但是过程中学到了不少的东西,...
  • Linux之libevent编译&测试

    千次阅读 2015-11-30 23:53:03
    1.下载 http://download.csdn.net/detail/sauphy/9314091 2. 编译 ./configure --prefix=/opt/libevent make make install 3. 开发编译 gcc test_signal.c -o ok -I/opt/libevent/include -L/opt/libevent/li
  • VS2013 编译libevent 并且使用! https://blog.csdn.net/lyin_c/article/details/47154511 libevent代码地址:https://github.com/libevent/libevent Party 1 编译32位 lib 打开vs2015 x86命令行 直接进入...
  • libevent-2.0.21-stable windows编译好的版本,内含libevent.lib、libevent_core.lib、libevent_extras.lib
  • 转自:https://blog.csdn.net/xufeng0991/article/details/44134005libevent是一个常用的网络库,下面就看看在windows下面编译测试的过程吧。一 环境系统:win8.1编译器:VS2013官方下载地址:http://libevent.org/...
  • 最近在写网络传输文件,比较大的...下面在描述编译过程前,简单介绍一下编译环境: 编译环境: 操作系统: win7 编译器: VS2010 库版本: libevent-2.0.22-stable 编译过程: 1)将下载的网络库解压,例
  • https://blog.csdn.net/sauphy/article/details/50121223 1.下载 ... 2. 编译 ./configure --prefix=/opt/libevent make make install 3. 开发编译 gcc test_signal.c -...
  • libevent-windows-linux编译

    2021-03-04 10:29:53
    编译环境与源码请参考 http://www.libevent.net/libevent_1_0.html 目录结构 1、编译zlib @echo "start zlib build" set VS="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary...
  • libeventwindows编译

    千次阅读 2011-01-30 00:54:00
    vs.net tools命令行: nmake Makefile.nmake
  • windows编译libevent 2.18报错问题

    千次阅读 2017-08-30 17:06:10
    windows平台下编译libevent库报错的问题
  • libevent windows vs2010

    2017-05-21 16:11:25
    借鉴前人的经验,注意一点版本尽可能不要搞错,少走弯路。 编译器:VS2010 ...2、使用VS2010的命令行工具,会有环境变量的写入,默认使用nmake之类的进行编译。 3、修改以下三个文件,添加宏定义: 在以下3个文
  • Windows编译Libevent

    2019-10-07 00:07:50
    编译环境:VS2013+Win10 1 下载得到libevent-2.0.22-stable.tar,解压。 2 打开“VS2013开发人员命令提示”工具。 3 命令提示工具中,进入到你的解压目录,运行 nmake /f Makefile.nmake 4 成功后,libevent-2.0...
  • windows环境编译好的库,可以直接拷贝来用 1、拷贝include下面的所有文件到你所在工程下面。 2、拷贝libevent.lib libevent_extras.lib libevent_core.lib到你所在的库。
  • windows编译 libevent

    千次阅读 2017-06-18 10:10:16
    windows 自建 libevent工程 vs2003

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,611
精华内容 1,844
关键字:

libeventwindows编译