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