#include "ace/Reactor.h"
#include "ace/SOCK_Acceptor.h"
#define PORT_NO 19998
typedef ACE_SOCK_Acceptor Acceptor;
//forward declaration
class My_Accept_Handler;
//数据处理器
class My_Input_Handler: public ACE_Event_Handler
{
public:
//构造方法
My_Input_Handler()
{
ACE_DEBUG((LM_DEBUG,"Constructor\n"));
}
//回调任何从句柄来的数据
int handle_input(ACE_HANDLE)
{
//获得数据
peer_i().recv_n(data,12);
ACE_DEBUG((LM_DEBUG,"%s\n",data));
//事件处理区
return 0;
}
//必须有的,传给handle_input的句柄
ACE_HANDLE get_handle(void)
{
return this->peer_i().get_handle();
}
ACE_SOCK_Stream &peer_i()
{
return this->peer_;
}
private:
ACE_SOCK_Stream peer_; //事件处理I/O入口,缓冲区
char data [12];
};
//接受处理器
class My_Accept_Handler: public ACE_Event_Handler
{
public:
//构造
My_Accept_Handler(ACE_Addr &addr)
{
this->open(addr);
}
//开始监听
//接受来自客户端的请求
int open(ACE_Addr &addr)
{
peer_acceptor.open(addr);
return 0;
}
//重载I/O处理区,client来处理
int handle_input(ACE_HANDLE handle)
{
//已经来了一个client,创建数据处理器实例去处理
My_Input_Handler *eh= new My_Input_Handler();
//Accept the connection "into" the Event Handler
if (this->peer_acceptor.accept (eh->peer_i(), // 流对象
0, // 远程地址
0, // timeout
1) ==-1) //restart if interrupted
ACE_DEBUG((LM_ERROR,"Error in connection\n"));
ACE_DEBUG((LM_DEBUG,"Connection established\n"));
// 把该处理器绑定到单体反应器 中
ACE_Reactor::instance()->register_handler(eh,ACE_Event_Handler::READ_MASK);
//如果你想处理更多的客户端就返回 -1,如果想永久多个客户端,返回 0
return 0;
}
//必须有的,传给handle_input的句柄
ACE_HANDLE get_handle(void) const
{
return this->peer_acceptor.get_handle();
}
private:
Acceptor peer_acceptor;
};
int main(int argc, char * argv[])
{
ACE_INET_Addr addr(PORT_NO);
My_Accept_Handler *eh=new My_Accept_Handler(addr);
ACE_Reactor::instance()->register_handler(eh, ACE_Event_Handler::ACCEPT_MASK);
while(1)
ACE_Reactor::instance()->handle_events();
}
#include "ace/SOCK_Acceptor.h"
#define PORT_NO 19998
typedef ACE_SOCK_Acceptor Acceptor;
//forward declaration
class My_Accept_Handler;
//数据处理器
class My_Input_Handler: public ACE_Event_Handler
{
public:
//构造方法
My_Input_Handler()
{
ACE_DEBUG((LM_DEBUG,"Constructor\n"));
}
//回调任何从句柄来的数据
int handle_input(ACE_HANDLE)
{
//获得数据
peer_i().recv_n(data,12);
ACE_DEBUG((LM_DEBUG,"%s\n",data));
//事件处理区
return 0;
}
//必须有的,传给handle_input的句柄
ACE_HANDLE get_handle(void)
{
return this->peer_i().get_handle();
}
ACE_SOCK_Stream &peer_i()
{
return this->peer_;
}
private:
ACE_SOCK_Stream peer_; //事件处理I/O入口,缓冲区
char data [12];
};
//接受处理器
class My_Accept_Handler: public ACE_Event_Handler
{
public:
//构造
My_Accept_Handler(ACE_Addr &addr)
{
this->open(addr);
}
//开始监听
//接受来自客户端的请求
int open(ACE_Addr &addr)
{
peer_acceptor.open(addr);
return 0;
}
//重载I/O处理区,client来处理
int handle_input(ACE_HANDLE handle)
{
//已经来了一个client,创建数据处理器实例去处理
My_Input_Handler *eh= new My_Input_Handler();
//Accept the connection "into" the Event Handler
if (this->peer_acceptor.accept (eh->peer_i(), // 流对象
0, // 远程地址
0, // timeout
1) ==-1) //restart if interrupted
ACE_DEBUG((LM_ERROR,"Error in connection\n"));
ACE_DEBUG((LM_DEBUG,"Connection established\n"));
// 把该处理器绑定到单体反应器 中
ACE_Reactor::instance()->register_handler(eh,ACE_Event_Handler::READ_MASK);
//如果你想处理更多的客户端就返回 -1,如果想永久多个客户端,返回 0
return 0;
}
//必须有的,传给handle_input的句柄
ACE_HANDLE get_handle(void) const
{
return this->peer_acceptor.get_handle();
}
private:
Acceptor peer_acceptor;
};
int main(int argc, char * argv[])
{
ACE_INET_Addr addr(PORT_NO);
My_Accept_Handler *eh=new My_Accept_Handler(addr);
ACE_Reactor::instance()->register_handler(eh, ACE_Event_Handler::ACCEPT_MASK);
while(1)
ACE_Reactor::instance()->handle_events();
}