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

这是标题所提的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dotnet_reactor是一个用于对.NET应用程序进行保护和加密的工具,可以防止未经授权的访问和逆向工程。以下是dotnet_reactor下载的步骤: 1. 首先,在您的浏览器中,打开dotnet_reactor的官方网站。 2. 导航到网站的下载页面,通常可以在主页上找到一个类似于“下载”或“产品”页面的链接。 3. 在下载页面上,您可能会看到不同版本的dotnet_reactor可供选择。选择与您正在开发的.NET框架版本兼容的正确版本。 4. 单击相应的下载按钮或链接。这将触发文件的下载,并将其保存到您的计算机上。 5. 下载完成后,找到并双击下载的文件。这将启动dotnet_reactor安装程序。 6. 根据安装程序的指示,选择适当的选项并完成安装过程。可能需要接受许可协议,并选择安装目录。 7. 安装完成后,您可以在开始菜单、桌面或指定的安装目录中找到dotnet_reactor的可执行文件。 8. 运行dotnet_reactor,它将打开一个用户界面,允许您选择要保护和加密的.NET应用程序,并配置其他选项。 9. 根据您的需求和dotnet_reactor的功能,进行必要的设置和配置。您可以选择加密、混淆代码,添加许可证功能等等。 10. 确认配置后,点击“保护”按钮或类似的按钮。dotnet_reactor将开始对选择的应用程序进行保护和加密。 11. 保护过程完成后,您将获得一个加密后的应用程序,该应用程序在运行时更难以破解和逆向工程。 请注意,下载dotnet_reactor之前,请确保您遵守软件许可证和相关法律的规定,并确保您有权使用和保护相关应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值