step1:安装libevent

yum install libevent

step2:

代码入下:

  1. #include <sys/socket.h>
  2. #include <sys/types.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5.  
  6. #include <event.h>
  7.  
  8. #define PORT 25341
  9. #define BACKLOG 5
  10. #define MEM_SIZE 1024
  11.  
  12. struct event_base* base;
  13. struct sock_ev {
  14. struct event* read_ev;
  15. struct event* write_ev;
  16. char* buffer;
  17. };
  18.  
  19. void release_sock_event(struct sock_ev* ev)
  20. {
  21. event_del(ev->read_ev);
  22. free(ev->read_ev);
  23. free(ev->write_ev);
  24. free(ev->buffer);
  25. free(ev);
  26. }
  27.  
  28. void on_write(int sock, short event, void* arg)
  29. {
  30. char* buffer = (char*)arg;
  31. send(sock, buffer, strlen(buffer), );
  32.  
  33. free(buffer);
  34. }
  35.  
  36. void on_read(int sock, short event, void* arg)
  37. {
  38. struct event* write_ev;
  39. int size;
  40. struct sock_ev* ev = (struct sock_ev*)arg;
  41. ev->buffer = (char*)malloc(MEM_SIZE);
  42. bzero(ev->buffer, MEM_SIZE);
  43. size = recv(sock, ev->buffer, MEM_SIZE, );
  44. printf("receive data:%s, size:%d\n", ev->buffer, size);
  45. ) {
  46. release_sock_event(ev);
  47. close(sock);
  48. return;
  49. }
  50. event_set(ev->write_ev, sock, EV_WRITE, on_write, ev->buffer);
  51. event_base_set(base, ev->write_ev);
  52. event_add(ev->write_ev, NULL);
  53. }
  54.  
  55. void on_accept(int sock, short event, void* arg)
  56. {
  57. struct sockaddr_in cli_addr;
  58. int newfd, sin_size;
  59. struct sock_ev* ev = (struct sock_ev*)malloc(sizeof(struct sock_ev));
  60. ev->read_ev = (struct event*)malloc(sizeof(struct event));
  61. ev->write_ev = (struct event*)malloc(sizeof(struct event));
  62. sin_size = sizeof(struct sockaddr_in);
  63. newfd = accept(sock, (struct sockaddr*)&cli_addr, &sin_size);
  64. event_set(ev->read_ev, newfd, EV_READ|EV_PERSIST, on_read, ev);
  65. event_base_set(base, ev->read_ev);
  66. event_add(ev->read_ev, NULL);
  67. }
  68.  
  69. int main(int argc, char* argv[])
  70. {
  71. struct sockaddr_in my_addr;
  72. int sock;
  73.  
  74. sock = socket(AF_INET, SOCK_STREAM, );
  75. ;
  76. setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
  77. memset(&my_addr, , sizeof(my_addr));
  78. my_addr.sin_family = AF_INET;
  79. my_addr.sin_port = htons(PORT);
  80. my_addr.sin_addr.s_addr = INADDR_ANY;
  81. bind(sock, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));
  82. listen(sock, BACKLOG);
  83.  
  84. struct event listen_ev;
  85. base = event_base_new();
  86. event_set(&listen_ev, sock, EV_READ|EV_PERSIST, on_accept, NULL);
  87. event_base_set(base, &listen_ev);
  88. event_add(&listen_ev, NULL);
  89. event_base_dispatch(base);
  90.  
  91. ;

step3:

编译:

  1. gcc -o basichttpfile2222 basichttpfile2222.c -levent

step4:

运行

  1. ./basichttpfile2222

step5:

测试

c端:

  1. [root@localhost libevent-
  2. Trying 127.0.0.1...
  3. Connected to 127.0.0.1.
  4. Escape character is '^]'.
  5. hghgh
  6. hghgh
  7. gjjgjgj
  8. gjjgjgj
  9. jhjhjhj
  10. jhjhjhj
  11. hhkhkhk
  12. hhkhkhk

S端:

  1. [root@localhost ~]# ./basichttpfile2222
  2. receive data:hghgh
  3. , size:
  4. receive data:gjjgjgj
  5. , size:
  6. receive data:jhjhjhj
  7. , size:
  8. receive data:hhkhkhk
  9. , size:

参考:

http://www.monkey.org/~provos/libevent/doxygen-2.0.1/

http://www.ibm.com/developerworks/aix/library/au-libev/

http://www.cnblogs.com/Seapeak/archive/2010/04/08/1707807.html

http://www.111cn.net/sys/Windows/59107.htm

http://baotiao.github.io/2012/01/libevent-demo/

https://github.com/nitrogenlogic/cliserver

http://www.xuebuyuan.com/1470515.html

http://www.felix021.com/blog/read.php?2068

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

linux环境下libevent的使用的更多相关文章

  1. [原]对Linux环境下任务调度一点认识

    我一直以来有一个误解,那就是在终端运行某个程序时,按下Ctrl + D时我误以为就是杀死了这个进程,今天才知道原来不是.比如我利用libevent在Linux环境下写了一个网络监听程序,当启动程序之后 ...

  2. Memcached在Linux环境下的使用详解

    一.引言             写有关NoSQL数据库有关的文章已经有一段时间了,可以高兴的说,Redis暂时就算写完了,从安装到数据类型,在到集群,几乎都写到了.如果以后有了心得,再补充吧.然后就 ...

  3. linux 环境下运行STS时 出现must be available in order to run STS

    linux 环境下运行ECLIPSE时 出现 “ A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be avai ...

  4. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  5. linux环境下学习使用pro*c/c++工具

    1.proc是oracle用来预编译嵌入SQL语句的c程序. 2.如何使用proc工具 在Linux环境下,首先确保gcc编译器正常使用,安装oracle数据库或者客户端,一般就会默认安装pro*c/ ...

  6. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  7. java 在linux环境下写入 syslog 问题研究

    1.Syslog 在Unix类操作系统上,syslog广泛应用于系统日志.syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器.接收syslog的服务器可以对多个设 ...

  8. 【环境配置】Linux环境下下载、配置java环境、安装eclipse、建立eclipse快捷方式详解

    一.首先是下载Java JDK 到目前为止的最新版本为(jdk1.8.0_60),有两种方式进行下载: 1.使用shell来进行下载,可使用如下命令直接进行下载: wget --no-check-ce ...

  9. Linux环境下安装Tigase XMPP Server

    Tigase是一种XMPP服务器,可以作为采用XMPP协议的各种IM(Instant Messeging)工具(如Pandion.Spark等)的服务器. 在Linux环境下安装Tigase的步骤如下 ...

随机推荐

  1. 7.4---加法替代运算(CC150)

    注意:1,除法那里b+=b是错的.b一直在改变.   2,仔细一点. import java.util.*; public class AddSubstitution { public int cal ...

  2. minigui交叉编译整理

    简介 MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 ...

  3. 术&道

    技术分为术和道两种. 具体做事的方法为术:做事的原理和原则是道. 追求术的人一辈子工作很辛苦,只有掌握了道的本质和精髓才能永远游刃有余. 在纷繁的选择面前, 不知到哪些是对的没关系, 知道哪些是不好的 ...

  4. php 使用redis锁限制并发访问类

    1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功. 例如换领优惠券,如果用户同一时间并发提交换领码,在没有加锁限制 ...

  5. InstallUtil在windows服务中的使用(转)+ 服务安装的注意事项

    1.  新建一个Windows Service的方法: 1. 打开Visual Studio 2008新建一个project Solution: 2. 选择Windows->windows Se ...

  6. pycharm 中 pep8 检查开启.

    pycharm pep8检查的开启,默认是暗黄色,我这里为了醒目给改成了黄色.

  7. Wijmo 5 与Breeze 的组合,及与METRONIC 的集成

    1.Wijmo 5  是支持ANGULARJS 的HTML5 控件   http://wijmo.gcpowertools.com.cn/ 官方试用版  C1Wijmo-Eval_5.20151.42 ...

  8. C#之Textbox实现自动提示容、自动补齐内容

    今发现一个博文挺有意思,实现的功能很有意思但方法却很简单,特此转过来,以备以后查阅. 先上原博文地址:http://blog.csdn.net/testcs_dn/article/details/45 ...

  9. POJ 1190(深搜)

    http://poj.org/problem?id=1190 又有好久没做搜索的题了,没想到做一个卡了我那么久,想哭啊. 一个中文题,思路呢也就是搜索呗,一层一层往上面搜,不过这里有两个比较重要的地方 ...

  10. effective OC2.0 52阅读笔记(一 熟悉Objective-C)

    第一章:熟悉Objective-C 1 了解objective-c语言的起源 总结:OC为C语言添加了面向对象的特性,是其超集.采用动态绑定的消息结构而非函数调用,也就是说,要在运行时才检查对象类型及 ...