程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> ACE中網絡通訊編程基本架構

ACE中網絡通訊編程基本架構

編輯:關於VC++

ACE_INET_Addr類,包裝了網絡地址

ACE_SOCK_Connector類,扮演主動連接角色,發起通訊連接。連接到遠端的服務。

ACE_SOCK_Acceptor類,扮演被動連接角色,等待連接。等待遠端客戶的請求。

ACE_SOCK_Stream類,扮演數據通訊角色,發送和接收數據。完成客戶與服務之間的通訊。

利用ACE庫來開發網絡通訊程序是很簡單的,一個基本程序只用到以上提到的幾個類,就可以完成一個基於客戶端、服務器端模型的網絡應用的開發。開發者無需了解Socket在不同平台上的實現,記憶眾多並相互關聯的Socket APIs。

以下以一個Hello World程序為演示。

客戶端程序。發送一個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";
//設置服務器地址
//第一個參數是端口,第二個是ip地址,也可以是域名。
//可以先定義一個地址對象,再用ACE_INET_Addr的set函數來設定。
//地址的配置很多,具體的參照文檔
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 );//發起一個連接
peer_stream.send( str.c_str(), str.length() );//發送數據到服務器
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;
//創建被動連接角色對象
ACE_SOCK_Acceptor peer_acceptor;
//開啟被動連接對象,將對象綁定到一個地址上
peer_acceptor.open( peer_addr );
//等待連接
peer_acceptor.accept( peer_stream );
//數據通訊
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庫才能運轉××××

利用ACE編程的基本框架。

客戶端

1 創建地址對象。(ACE_INET_Addr)

2 創建主動連接對象。(ACE_SOCK_Connector)

3 創建數據通訊對象。(ACE_SOCK_Stream)

4 設置服務器地址。(ACE_INET_Addr::set)

5 將數據通訊對象和地址作為參數傳給主動連接對象,發起主動連接(ACE_SOCK_Connector::connect)

6 利用通訊對象接收和發送數據。(ACE_SOCK_Stream::recv和ACE_SOCK_Stream::send)

服務器端

1 創建地址對象。(ACE_INET_Addr)

2 創建被動連接對象。(ACE_SOCK_Connector)

3 創建數據通訊對象。(ACE_SOCK_Stream)

4 設置服務器地址。(ACE_INET_Addr::set)

5 將地址作為參數傳給被動連接對象,啟動接收(ACE_SOCK_Acceptor::open)

6 將數據通訊對象傳給被動連接對象,啟動接收,接受連接(ACE_SOCK_Connector::accept)

7 利用通訊對象接收和發送數據。(ACE_SOCK_Stream::recv和ACE_SOCK_Stream::send)

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved