ACE自适配通信环境中文技术文档(中篇:ACE程序员教程)Reactor实例

本文详细解析了ACE学习教程第六章中的实例,包括客户端服务器通信的实现过程,涉及头文件引用、事件处理器类定义及使用,以及如何处理接收到的数据。通过实例深入理解ACE框架下构建网络应用程序的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是标题所提的ACE学习教程第六章里面的一个实例

#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(); 
}

转帖:http://raojl.iteye.com/blog/337952
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值