📄 main.cpp
字号:
#include <string>
#include <iostream>
#include <fstream>
#include <conio.h>
#include "iocp.h"
#include "config.h"
using namespace std;
#define DEBUG_MsgIOCPServer
//#define DEBUG_NetIOCPServer
#ifdef DEBUG_MsgIOCPServer
class MsgIOCPTestServer:public MsgIOCPServer
{
public:
explicit MsgIOCPTestServer(unsigned short port)
:MsgIOCPServer(port)
{
}
protected:
virtual void msg_open_handler(SOCKET s);
virtual void msg_closed_handler(SOCKET s);
virtual void msg_message_handler(SOCKET s,NetMessage *msg);
virtual void msg_illegal_handler(SOCKET s,int msglen);
};
static int socknum=0;
void MsgIOCPTestServer::msg_open_handler(SOCKET s)
{
++socknum;
cout<<"new socket"<<s<<"number="<<socknum<<"\n";
}
void MsgIOCPTestServer::msg_closed_handler(SOCKET s)
{
--socknum;
cout<<"close socket"<<s<<"number="<<socknum<<"\n";
}
void MsgIOCPTestServer::msg_illegal_handler(SOCKET s,int msglen)
{
cout<<"ill message!!!!!!!!!!!!!!!!";
}
void MsgIOCPTestServer::msg_message_handler(SOCKET s,NetMessage *msg)
{
NetMessage *newmsg=new NetMessage;
cout<<"recv"<<s<<"len="<<msg->datalen<<"(";
for(int i=0;i<msg->datalen;++i)
{
cout<<msg->data[i];
}
cout<<")\n";
memcpy(newmsg->data,msg->data,msg->datalen);
newmsg->datalen=msg->datalen;
ofstream f("iocp_recv.txt",ios::binary|ios::app);//f("../testmsg/debug/iocp_recv.txt",ios::binary|ios::app);
if(f)
{
f.write(msg->data,msg->datalen);
f.write("\n",1);
f.close();
}
else
{
assert(0);
}
sendmessage(s,newmsg);
}
void main()
{
MsgIOCPTestServer *server=new MsgIOCPTestServer(TEST_PORT);
server->start();
bool running=true;
while(running)
{
server->runloop();
if(kbhit())
{
int k=getch();
if(k==' ')
break;
}
Sleep(100);
}
delete server;
}
#endif
#ifdef DEBUG_NetIOCPServer
class NetIOCPTestServer:public NetIOCPServer
{
public:
NetIOCPTestServer(unsigned short port)
:NetIOCPServer(port)
{
}
protected:
void net_open_handler(SOCKET s);
void net_closed_handler(SOCKET s);
void net_data_handler(PerIoData *data);
};
static map<SOCKET,void *> sets;
static int socknum=0;
void NetIOCPTestServer::net_open_handler(SOCKET s)
{
typedef map<SOCKET,void *>::iterator MapIter;
pair<MapIter,bool> ret;
ret=sets.insert(make_pair(s,(void *)NULL));
if(ret.second)
{
cout<<"new socket "<<s<<"\n";
}
else
{
assert(0);
cout<<"new socket "<<s<<" already created!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
}
++socknum;
cout<<"socknum="<<socknum<<"\n";
}
void NetIOCPTestServer::net_closed_handler(SOCKET s)
{
map<SOCKET,void *>::iterator iter;
iter=sets.find(s);
if(sets.end()!=iter)
{
sets.erase(iter->first);
cout<<"close socket "<<s<<"\n";
}
else
{
assert(0);
cout<<"close socket "<<s<<" already closed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
}
--socknum;
cout<<"socknum="<<socknum<<"\n";
}
static int recvlen=0;
void NetIOCPTestServer::net_data_handler(PerIoData *data)
{
//cout<<"recved socket "<<data->sock<<"len="<<data->len;
//for(int i=0;i<data->len;++i)
//{
// cout<<data->data[i];
//}
//cout<<"\n";
ofstream f("../testnet/debug/iocp_recv.txt",ios::binary|ios::app);
if(f)
{
f.write(data->data,data->len);
f.write("\n",1);
f.close();
}
else
{
assert(0);
}
PerIoData *iodata=new PerIoData;
iodata->len=data->len;
memcpy(iodata->data,data->data,data->len);
recvlen+=iodata->len;
senddata(data->sock,iodata);
cout<<"recvlen="<<recvlen<<"\n";
}
void main()
{
NetIOCPTestServer *server=new NetIOCPTestServer(TEST_PORT);
server->start();
bool running=true;
while(running)
{
server->runloop();
if(kbhit())
{
int k=getch();
if(k==' ')
break;
}
//Sleep(100);
}
delete server;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -