⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 基于完成端口的TCP网络通信框架实现 工程iocp中包含了框架实现的所有代码
💻 CPP
字号:
//
// 简单的回应服务器
// 能够区分消息边界
//
#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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -