??? ACE_INET_Addr類,包裝了網(wǎng)絡地址
??? ACE_SOCK_Connector類,扮演主動連接角色,發(fā)起通訊連接。連接到遠端的服務。
??? ACE_SOCK_Acceptor類,扮演被動連接角色,等待連接。等待遠端客戶的請求。
??? ACE_SOCK_Stream類,扮演數(shù)據(jù)通訊角色,發(fā)送和接收數(shù)據(jù)。完成客戶與服務之間的通訊。
???
??? 利用ACE庫來開發(fā)網(wǎng)絡通訊程序是很簡單的,一個基本程序只用到以上提到的幾個類,就
可以完成一個基于客戶端、服務器端模型的網(wǎng)絡應用的開發(fā)。開發(fā)者無需了解Socket在不同平
臺上的實現(xiàn),記憶眾多并相互關聯(lián)的Socket APIs。
??? 一下以一個Hello World程序為演示。
???
??? 客戶端程序。發(fā)送一個Hello World到遠端的服務器,并接收服務器返回的信息,將信息
打印在屏幕上。
#include <iostream>
#include <string>
#include <ace/ACE.h>
#include <ace/INET_Addr.h>
#include <ace/SOCK_Connector.h>
#include <ace/SOCK_Stream.h>
int main( int argc, char* argv[] )
{
?ACE::init();//初始化ACE庫,在windows下一定要
?std::string str = "hello world";
?//設置服務器地址
?//第一個參數(shù)是端口,第二個是ip地址,也可以是域名。
?//可以先定義一個地址對象,再用ACE_INET_Addr的set函數(shù)來設定。
?//地址的配置很多,具體的參照文檔
?ACE_INET_Addr peer_addr( 5050, "127.0.0.1" );
?ACE_SOCK_Stream peer_stream;//定義一個通訊隊形
?ACE_SOCK_Connector peer_connector;//定義一個主動連接對象
?peer_connector.connect( peer_stream, peer_addr );//發(fā)起一個連接
?peer_stream.send( str.c_str(), str.length() );//發(fā)送數(shù)據(jù)到服務器
?str.erase();
?str.resize( sizeof( "hello world" ) );
?peer_stream.recv( (void*)str.c_str(), str.length() );//接收來自服務器的信息
?std::cout << "from server message : " << str << std::endl;
??? ACE::fini();
?return 0;
}
??? 服務器端代碼。接收一個遠端的連接,將接收到的信息打印在屏幕上,并將接收到的信
息返回給客戶端。
#include <iostream>
#include <string>
#include <ace/ACE.h>
#include <ace/SOCK_Acceptor.h>
#include <ace/SOCK_Stream.h>
int main( int argc, char* argv[] )
{
?ACE::init();
?std::string str;
?str.resize( sizeof( "hello world" ) );
?//設置服務器地址
?ACE_INET_Addr peer_addr( 5050, "127.0.0.1" );
?ACE_SOCK_Stream peer_stream;
?
?//創(chuàng)建被動連接角色對象
?ACE_SOCK_Acceptor peer_acceptor;
?//開啟被動連接對象,將對象綁定到一個地址上
?peer_acceptor.open( peer_addr );
?//等待連接
?peer_acceptor.accept( peer_stream );
?//數(shù)據(jù)通訊
?peer_stream.recv( (void*)str.c_str(), str.length() );
?std::cout << "from client message : " << str << std::endl;
?peer_stream.send( str.c_str(), str.length() );
?ACE::fini();
?return 0;
}
××××以上代碼需要ACE庫才能運轉(zhuǎn)××××
???
??? 利用ACE編程的基本框架。
??? 客戶端
??? 1 創(chuàng)建地址對象。(ACE_INET_Addr)
??? 2 創(chuàng)建主動連接對象。(ACE_SOCK_Connector)
??? 3 創(chuàng)建數(shù)據(jù)通訊對象。(ACE_SOCK_Stream)
??? 4 設置服務器地址。(ACE_INET_Addr::set)
??? 5 將數(shù)據(jù)通訊對象和地址作為參數(shù)傳給主動連接對象,發(fā)起主動連接(ACE_SOCK_Connector::connect)
??? 6 利用通訊對象接收和發(fā)送數(shù)據(jù)。(ACE_SOCK_Stream::recv和ACE_SOCK_Stream::send)
???
??? 服務器端
??? 1 創(chuàng)建地址對象。(ACE_INET_Addr)
??? 2 創(chuàng)建被動連接對象。(ACE_SOCK_Connector)
??? 3 創(chuàng)建數(shù)據(jù)通訊對象。(ACE_SOCK_Stream)
??? 4 設置服務器地址。(ACE_INET_Addr::set)
??? 5 將地址作為參數(shù)傳給被動連接對象,啟動接收(ACE_SOCK_Acceptor::open)
??? 6 將數(shù)據(jù)通訊對象傳給被動連接對象,啟動接收,接受連接(ACE_SOCK_Connector::accept)
??? 7 利用通訊對象接收和發(fā)送數(shù)據(jù)。(ACE_SOCK_Stream::recv和ACE_SOCK_Stream::send)
posted on 2007-02-25 19:30
walkspeed 閱讀(12197)
評論(10) 編輯 收藏 引用 所屬分類:
ACE Farmeworks