libevent time

来源:互联网 发布:有哪些网络公益的例子 编辑:程序博客网 时间:2024/06/05 18:09

http://blog.csdn.net/tujiaw/article/details/17619609


window socket编程:http://blog.csdn.net/shouhuqi/article/details/8038567


linux服务端,在有新连接进来的时候发送4字节的时间然后关闭连接。

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #include <iostream>  
  2. #include <arpa/inet.h>  
  3. #include <time.h>  
  4.   
  5. #include <event2/event.h>  
  6. #include <event2/bufferevent.h>  
  7. #include <event2/buffer.h>  
  8. #include <event2/listener.h>  
  9.   
  10. void listener_cb(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *addr, int socklen, void *val)  
  11. {  
  12.     time_t now = ::time(NULL);  
  13.     int32_t be32 = htonl(now);  
  14.     struct evbuffer *buf = evbuffer_new();  
  15.     evbuffer_add(buf, &be32, sizeof(be32));  
  16.     evbuffer_write(buf, fd);  
  17.     evbuffer_free(buf);  
  18.     evutil_closesocket(fd);  
  19. }  
  20.   
  21. int main()  
  22. {  
  23.     struct sockaddr_in sin;  
  24.     sin.sin_family = AF_INET;  
  25.     sin.sin_addr.s_addr = htonl(0);  
  26.     sin.sin_port = htons(5000);  
  27.   
  28.     struct event_base *base = event_base_new();  
  29.     struct evconnlistener *listener = evconnlistener_new_bind(base, listener_cb, NULL, LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE,  
  30.                                     -1, (struct sockaddr*)&sin, sizeof(sin));  
  31.   
  32.     std::cout << "start..." << std::endl;  
  33.     event_base_dispatch(base);  
  34.     return 0;  
  35. }  

windows客户端:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #include <iostream>  
  2. #include <assert.h>  
  3. #include <string.h>  
  4. #include <stdint.h>  
  5. #include <time.h>  
  6.   
  7. #include "event2/event.h"  
  8. #include "event2/bufferevent.h"  
  9. #include "event2/buffer.h"  
  10. #include "event2/listener.h"  
  11.   
  12. #include "windowsSocket.h"  
  13.   
  14. const char* CONNECT_IP = "192.168.239.147";  
  15. const unsigned short CONNECT_PORT = 5000;  
  16.   
  17. void read_cb(struct bufferevent *bufferEvent, void *)  
  18. {  
  19.     std::cout << "read_cb is comming..." << std::endl;  
  20.     struct evbuffer *input = bufferevent_get_input(bufferEvent);  
  21.     int32_t be32;  
  22.     evbuffer_remove(input, &be32, sizeof(be32));  
  23.     time_t val = ntohl(be32);  
  24.     struct tm t;  
  25.     ::localtime_s(&t, &val);  
  26.     char buf[128] = {0};  
  27.     asctime_s(buf, &t);  
  28.     std::cout << buf << std::endl;  
  29. }  
  30.   
  31. int _tmain(int argc, _TCHAR* argv[])  
  32. {  
  33.     WindowsSocket::Startup(2, 2);  
  34.     struct sockaddr_in sin;  
  35.     sin.sin_family = AF_INET;  
  36.     sin.sin_addr.s_addr = inet_addr(CONNECT_IP);  
  37.     sin.sin_port = htons(CONNECT_PORT);  
  38.     struct event_base *base = event_base_new();  
  39.     struct bufferevent *be = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);  
  40.     if (!be) {  
  41.         std::cout << "bufferevent_socket_new error!" << std::endl;  
  42.         return -1;  
  43.     }  
  44.   
  45.     if (-1 == bufferevent_socket_connect(be, (struct sockaddr*)&sin, sizeof(sin))) {  
  46.         std::cout << "bufferevent_socket_connect error!" << std::endl;  
  47.         return -1;  
  48.     }  
  49.   
  50.     bufferevent_setcb(be, read_cb, NULL, NULL, base);  
  51.     bufferevent_enable(be, EV_READ);  
  52.     event_base_dispatch(base);  
  53.       
  54.     WindowsSocket::Cleanup();  
  55.     system("pause");  
  56.     return 0;  
  57. }  



[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. // windowsSocket.h  
  2. #pragma once  
  3.   
  4. class WindowsSocket  
  5. {  
  6. public:  
  7.     static void Startup(unsigned char loVer, unsigned char hiVer);  
  8.     static void Cleanup();  
  9.   
  10. private:  
  11.     static bool s_isStarted;  
  12. };  
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. // windowsSocket.cpp  
  2. #include "windowsSocket.h"  
  3. #include <Windows.h>  
  4.   
  5. bool WindowsSocket::s_isStarted = false;  
  6.   
  7. void WindowsSocket::Startup(unsigned char loVer, unsigned char hiVer)  
  8. {  
  9.     if (s_isStarted) {  
  10.         OutputDebugString(_T("WindowsSocket already initialized."));  
  11.         return;  
  12.     }  
  13.   
  14.     WSAData wsaData;  
  15.     if (WSAStartup(MAKEWORD(loVer, hiVer), &wsaData)) {  
  16.         OutputDebugString(_T("Failed to initialize WindowsSocket."));  
  17.     } else {  
  18.         s_isStarted = true;  
  19.     }  
  20. }  
  21.   
  22. void WindowsSocket::Cleanup()  
  23. {  
  24.     if (s_isStarted) {  
  25.         s_isStarted = false;  
  26.         WSACleanup();  
  27.     }  
  28. }  
0 0
原创粉丝点击