1、test_server.cpp
#include <iostream>
#include <string.h>
#include <signal.h>
#include <event2/event.h>
#include <event2/listener.h>
#define PORT 5001
void listen_cb(struct evconnlistener* ev,
evutil_socket_t s,
struct sockaddr* addr,
int socketLen,
void* arg) {
std::cout << "listen_cb event_base_new success!" << std::endl;
}
int main()
{
#ifdef _WIN32
//windows初始化socket库
WSADATA wsa;
WSAStartup(MAKEWORD(2,2), &wsa);
#else
//发送数据给已关闭socket时,忽略管道信息.
//否则可能导致程序dump.
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
return -1;
}
#endif
//创建libevent上下文
event_base* base = event_base_new();
if (base) {
std::cout << "event_base_new success!" << std::endl;
}
sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
//监听端口
//socket创建, bind, listen
evconnlistener* ev = evconnlistener_new_bind(base, //libevent上下文
listen_cb, //接收到连接的回调函数
base, //回调函数获取的参数arg
LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, //地址重用, listen关闭同时关闭socket
10, //连接队列大小, 对应listen函数(缓冲队列中最多同时能存在10个连接)
(sockaddr*)&sin, //绑定的地址和端口
sizeof(sin)
);
//事件分发处理
if (base) {
event_base_dispatch(base);
}
if (ev) {
evconnlistener_free(ev);
}
if (base) {
event_base_free(base);
}
#ifdef _WIN32
//清理window的socket库
WSACleanup();
#endif
return 0;
}
2、CMakeLists.txt
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
project(test_server)
# sources
set(SOURCE_FILES
test_server.cpp
)
set(OUTPUT_DIR ${PROJECT_SOURCE_DIR}/bin/)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIR})
# c++11 required
set(CMAKE_CXX_STANDARD 11)
set(TARGET_NAME test_server)
add_executable(${TARGET_NAME} ${SOURCE_FILES} )
target_sources( ${TARGET_NAME}
PRIVATE ${SOURCE_FILES} )
# includes
target_include_directories(${TARGET_NAME} PRIVATE
/usr/local/include
)
target_link_libraries(${TARGET_NAME} -levent -ldl)
3、在linux下编译
(1)cmake .
(2)make
进入bin目录,执行:./test_server
然后打开另一个终端,执行: telnet 127.0.0.1 5001


这是一个使用C++和libevent库编写的TCP服务器示例,它监听5001端口。程序首先初始化libevent上下文,设置信号处理,然后创建监听器来处理新的连接请求。当有新连接时,会调用listen_cb回调函数。CMakeLists.txt文件用于配置项目的构建过程。在Linux环境下,通过cmake和make编译后,可以通过telnet工具测试服务器运行情况。
625

被折叠的 条评论
为什么被折叠?



