首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

ACE 網路通訊程式設計基礎架構詳解

     編輯:關於VC++

ACE 網路程式設計核心類別

ACE (Adaptive Communication Environment) 提供跨平台的網路程式設計抽象層,核心四大類別構建 Client-Server 模型:

類別角色說明
ACE_INET_Addr地址封裝封裝 IP 位址與埠號,支援 IPv4/IPv6、主機名解析
ACE_SOCK_Connector主動連接Client 端發起連線,對應 connect()
ACE_SOCK_Acceptor被動連接Server 端監聽埠、接受連線,對應 bind()/listen()/accept()
ACE_SOCK_Stream資料通訊連線建立後收發資料,封裝 send()/recv()

Hello World 範例完整代碼

Client 端

#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();  // Windows 必須初始化
    std::string str = "hello world";

    ACE_INET_Addr peer_addr(5050, "127.0.0.1");
    ACE_SOCK_Stream peer_stream;
    ACE_SOCK_Connector peer_connector;

    if (peer_connector.connect(peer_stream, peer_addr) == -1) {
        std::cerr << "Connection failed" << std::endl;
        ACE::fini();
        return -1;
    }

    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;
}

Server 端

#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;

    if (peer_acceptor.open(peer_addr) == -1) {
        std::cerr << "Acceptor open failed" << std::endl;
        ACE::fini();
        return -1;
    }

    if (peer_acceptor.accept(peer_stream) == -1) {
        std::cerr << "Accept failed" << std::endl;
        ACE::fini();
        return -1;
    }

    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;
}

開發流程總結

Client 端六步驟

  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::send()/recv() 收發資料

Server 端七步驟

  1. 建立地址物件 ACE_INET_Addr
  2. 建立被動連接物件 ACE_SOCK_Acceptor
  3. 建立資料通訊物件 ACE_SOCK_Stream
  4. 設定伺服器地址
  5. 呼叫 ACE_SOCK_Acceptor::open() 綁定並監聽
  6. 呼叫 ACE_SOCK_Acceptor::accept() 等待連線
  7. 使用 ACE_SOCK_Stream::send()/recv() 收發資料

優勢與注意事項

  • 跨平台:同一套代碼可在 Windows/Linux/Unix 編譯執行
  • 隱藏平台差異:無需記憶各平台 Socket API 細節
  • 生產環境建議:加入錯誤處理、超時機制、非同步 I/O (Proactor/Reactor)、優雅關閉邏輯
  • 編譯需連結 ACE 函式庫 (ace.lib)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved