no message

master
ATTIOT\zhengcy 2021-06-30 17:31:56 +08:00
parent dc0632ae59
commit e7d1f310b7
3 changed files with 75 additions and 11 deletions

View File

@ -1,5 +1,38 @@
#include <iostream> #include <iostream>
#include "tcp_server_libevent.h"
#include "winsock2.h"
#include <stdio.h>
int main(){ int main(){
std::cout<<"hello world\r\n"; WORD wdVersion = MAKEWORD(2, 2);//定义自己需要的网络库版本这里是2.2
WSADATA wdSockMsg;//这是一个结构体
int nRes = WSAStartup(wdVersion, &wdSockMsg);//打开一个套接字
if (0 != nRes)
{
switch (nRes)
{
case WSASYSNOTREADY:
printf("check your library");
break;
case WSAVERNOTSUPPORTED:
printf("need updated");
break;
case WSAEINPROGRESS:
printf("need reboot");
break;
case WSAEPROCLIM:
printf("sdfsdfsa");
break;
}
}
if (2 != HIBYTE(wdSockMsg.wVersion) || 2 != LOBYTE(wdSockMsg.wVersion))
{
printf("");
WSACleanup();
return 0;
}
std::cout<<"start server libevent\r\n";
test_tcp_server();
} }

View File

@ -12,19 +12,16 @@ void read_cb(struct bufferevent *bev, void *arg)
char* ip = (char*)arg; char* ip = (char*)arg;
bufferevent_read(bev, buf, sizeof(buf)); bufferevent_read(bev, buf, sizeof(buf));
cout << "client " << ip << " say:" << buf << endl; cout << "client " << ip << " say:" << buf << endl;
//写数据给客户端 //写数据给客户端
const char *p = "i am server, i received your msg!" ; const char *p = "i am server, i received your msg!" ;
bufferevent_write(bev, p, strlen(p)+1); bufferevent_write(bev,p,strlen(p) + 1);
} }
/************************************ /************************************
@ Brief: @ Brief:
@ Author: woniu201 @ Author: woniu201
@ Created: 2018/11/21 @ Created: 2018/11/21
@ Return: @ Return:
************************************/ ************************************/
void write_cb(struct bufferevent *bev, void *arg) void write_cb(struct bufferevent *bev, void *arg)
{ {
@ -61,16 +58,48 @@ void cb_listener(struct evconnlistener *listener, evutil_socket_t fd, struct soc
{ {
struct sockaddr_in* client = (sockaddr_in*)addr ; struct sockaddr_in* client = (sockaddr_in*)addr ;
cout << "connect new client: " << inet_ntoa(client->sin_addr) << "::"<< ntohs(client->sin_port)<< endl; cout << "connect new client: " << inet_ntoa(client->sin_addr) << "::"<< ntohs(client->sin_port)<< endl;
struct event_base *base = (struct event_base*)ptr; struct event_base *base = (struct event_base*)ptr;
//添加新事件 //添加新事件
struct bufferevent *bev; struct bufferevent *bev;
bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE); bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
//给bufferevent缓冲区设置回调 //给bufferevent缓冲区设置回调
bufferevent_setcb(bev, read_cb, write_cb, event_cb, inet_ntoa(client->sin_addr)); bufferevent_setcb(bev, read_cb, write_cb, event_cb, inet_ntoa(client->sin_addr));
//启动 bufferevent的 读缓冲区。默认是disable 的 //启动 bufferevent的 读缓冲区。默认是disable 的
bufferevent_enable(bev, EV_READ); bufferevent_enable(bev, EV_READ);
} }
int test_tcp_server()
{
#ifdef WIN32
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
(void)WSAStartup(wVersionRequested, &wsaData);
#endif
// init server
struct sockaddr_in serv;
memset(&serv, 0, sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_port = htons(8888);
serv.sin_addr.s_addr = htonl(INADDR_ANY);
// 创建 event_base
struct event_base * base;
base = event_base_new();
// 创建套接字
// 绑定
// 接收连接请求
struct evconnlistener* listener;
listener = evconnlistener_new_bind(base, cb_listener, base, LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE, 36, (struct sockaddr*)&serv, sizeof(serv));
if(NULL != listener){
// 启动循环监听
event_base_dispatch(base);
evconnlistener_free(listener);
event_base_free(base);
return 0;
}else{
return -1;
}
}

View File

@ -20,9 +20,11 @@ extern "C"{
#include "event2/thread.h" #include "event2/thread.h"
}; };
#include <iostream> #include <iostream>
// #include "PackageReceiver.h"
#include <mutex> #include <mutex>
#include <thread> #include <thread>
using namespace std; using namespace std;
int test_tcp_server();
#endif #endif