涉及到的類圖如下:
在使用時,需要從ACE_Event_Handler 中派生成兩個類,可以分別 爲 class clientAcceptor : public ACE_Event_Handler
,class clientService : public ACE_Event_Handler,clientAcceptor 用來接受客戶端的連接,clientService 用於表示客戶端,負責處理客戶端的請求,並且發送服務器的響應給客戶端。
在派生 clientAcceptor 和 clientService ,需要重寫以下幾個函數。
#include "ace/event_handler.h" //頭文件定義了ACE_Event_Handler
#include "ace/SOCK_Acceptor.h" //頭文件定義了 ACE_SOCK_Acceptor
#include "ace/Reactor.h"
class clientAcceptor : public ACE_Event_Handler
{
public:
clientAcceptor(void);
clientAcceptor(ACE_Reactor * r);
~clientAcceptor(void);
int open(const ACE_INET_Addr & listen_addr);
int handle_input(ACE_HANDLE
h); // virtual function,need overWritten;
int handle_close(ACE_HANDLE h,ACE_Reactor_Mask m); // virtual function,need overWritten;
virtual ACE_HANDLE get_handle(void) const // virtual function,need overWritten; //必須寫成這個格式
{
return this->acceptor.get_handle();
}
protected:
ACE_SOCK_Acceptor acceptor; //一定要有,acceptor ,用於接受客戶端的連接;
};
#include "ace/Message_Block.h"
#include "ace/Message_Queue.h"
#include "ace/SOCK_Stream.h" //頭文件定義了 ACE_SOCK_Stream
#include "ace/Reactor.h"
#include "ace/Synch.h"
#define CLIENTSERVICE_H
{
public:
clientService(void);
clientService(ACE_Reactor * r);
ACE_SOCK_Stream &peer() { return this->sock_; }
// Get this handler's I/O handle.
virtual ACE_HANDLE get_handle (void) const //必須寫成這個格式
{ return this->sock_.get_handle (); }
int handle_output(ACE_HANDLE h);
int handle_close(ACE_HANDLE h);
private: