?? main.cpp
字號:
//
// 簡單的回應(yīng)服務(wù)器
// 能夠區(qū)分消息邊界
//
#include <conio.h>
#include <iostream>
#include <fstream>
#include "../iocp/config.h"
#include "../iocp/iocpapi.h"
using namespace std;
class EchoServer:public IOCPNetServer
{
public:
EchoServer(unsigned short port)
:IOCPNetServer(port)
{
}
protected:
virtual void iocp_open_handler(SOCKET s);
virtual void iocp_closed_handler(SOCKET s);
virtual void iocp_message_handler(SOCKET s,NetMessage *m);
virtual void iocp_illegal_handler(SOCKET s,int len);
};
#define kbcheck(a) \
if(kbhit()) \
{ \
int k=getch(); \
if(k==a) \
break; \
}else
static int socknum=0;
static int recvlen=0;
static void printdata(SOCKET s,char *buf,int len)
{
cout<<s<<" len="<<len<<"(";
for(int i=0;i<len;++i)
{
cout<<buf[i];
}
cout<<")\n";
}
void EchoServer::iocp_open_handler(SOCKET s)
{
++socknum;
cout<<"open socket "<<s<<" num="<<socknum<<"\n";
}
void EchoServer::iocp_closed_handler(SOCKET s)
{
--socknum;
cout<<"closed socket "<<s<<" num="<<socknum<<"\n";
}
void EchoServer::iocp_message_handler(SOCKET s,NetMessage *msg)
{
printdata(s,msg->data,msg->datalen);
NetMessage *nm=new NetMessage;
nm->datalen=msg->datalen;
memcpy(nm->data,msg->data,msg->datalen);
recvlen+=msg->datalen;
sendmessage(s,nm);
}
void EchoServer::iocp_illegal_handler(SOCKET s,int len)
{
ofstream f("illegal.txt",ios::app);
if(f)
{
f<<"socket "<<s<<" len="<<len<<"\n";
}
cout<<"warning !!! illegal message!";
}
void main()
{
EchoServer *net= new EchoServer(TEST_PORT);
net->start();
cout<<"ok\n";
int loop=0;
while(1)
{
net->runloop();
kbcheck(' ');
Sleep(100);
if(++loop%100==0)
cout<<"total recved "<<recvlen<<"\n";
}
delete net;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -