本例中实现了Accept功能和输入事件处理功能。在与客户端连接建立成功之后,程序向Reactor注册输入回调事件处理函数。当客户端发送的数据到达时,此事件处理函数负责接收数据,并将其内容显示到输入设备。
由于ACE_Svc_Handle继承于ACE_Event_Handle,因此对事件处理只需要添加handle_input函数即可实现。 #include "stdafx.h" #include "ace/Reactor.h" #include "ace/Svc_Handler.h" #include "ace/SOCK_Acceptor.h" #include "ace/Synch.h" #include "ace/Acceptor.h" #define BUF_LEN 11 /* *用于处理客户端连接的处理器 *当客户端程序连接请求建立时,open方法将会被回调执行 *在open方法中注册handle_input事件处理,接收来自客户端的发送数据 */ class AcceptorHandler : public ACE_Svc_Handler<ACE_SOCK_STREAM,ACE_NULL_SYNCH> { public: int open(void*) { ACE_DEBUG((LM_DEBUG,ACE_TEXT("connection established/n"))); //注册输入处理回调函数 ACE_Reactor::instance()->register_handler(this, ACE_Event_Handler::READ_MASK); return 0; } //接收来自客户端发送的数据 int handle_input(ACE_HANDLE fd /* = ACE_INVALID_HANDLE */) { memset(m_szMsg,0,BUF_LEN); peer().recv_n(m_szMsg,BUF_LEN - 1); ACE_DEBUG((LM_DEBUG,ACE_TEXT("%s/n"),m_szMsg)); return 0; } private: char m_szMsg[BUF_LEN]; }; int ACE_TMAIN(int argc, ACE_TCHAR* argv[]) { ACE_INET_Addr iaLocal(27002); //创建一个ACE_Acceptor ACE_Acceptor<AcceptorHandler,ACE_SOCK_ACCEPTOR> aAcceptor(iaLocal,ACE_Reactor::instance()); while (1) { ACE_Reactor::instance()->handle_events(); } return 0; }