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() |
#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;
}
#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;
}
ACE_INET_AddrACE_SOCK_ConnectorACE_SOCK_StreamACE_INET_Addr::set()ACE_SOCK_Connector::connect() 發起連線ACE_SOCK_Stream::send()/recv() 收發資料ACE_INET_AddrACE_SOCK_AcceptorACE_SOCK_StreamACE_SOCK_Acceptor::open() 綁定並監聽ACE_SOCK_Acceptor::accept() 等待連線ACE_SOCK_Stream::send()/recv() 收發資料ace.lib)