一,下载,解压,安装
1. 从官方网站下载页面下载 ACE。(http://download.dre.vanderbilt.edu/)
我下的是 ACE+TAO+CIAO.zip 最新版的 ACE+TAO+CIAO-5.7.7.zip, 113M.
2. 解压ACE+TAO+CIAO-5.7.7.zip, 解压后有 600+ M. 比如说解压到路径 D:/ACE, 就会有文件夹 D:/ACE/ACE_wrappers
3. 创建系统环境变量 ACE_ROOT, 值为 D:/ACE/ACE_wrappers。
4. 在路经 $(ACE_ROOT)/ace 下创建文件 config.h, 并且插入一行代码:
#include "ace/config-win32.h"
5. 打开 $(ACE_ROOT)/ACE_wrappers_vc9.sln, 编译得到 $(ACE_ROOT)/lib/ACEd.dll 和 $(ACE_ROOT)/lib/ACEd.lib。
二:运行 sample 程序
从网上找了个简单的 Sample.
1. 系统环境变量 Path 里添加ACEd.dll 的路径 $(ACE_ROOT)/lib
2. 建两个 win32 空工程,ace_sample1_client 和 ace_sample1_server。
3. 两个工程的 subsystem 设定成 console.
4. ace_sample1_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 wmain( int argc, char* argv[] ) { ACE::init();//初始化ACE库,在windows下一定要 std::string str = "hello world"; //设置服务器地址 //第一个参数是端口,第二个是ip地址,也可以是域名。 //可以先定义一个地址对象,再用ACE_INET_Addr的set函数来设定。 //地址的配置很多,具体的参照文档 ACE_INET_Addr peer_addr( 5050, "172.18.7.19" ); 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; }
5. ace_sample1_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, "172.18.7.19" ); ACE_SOCK_Stream peer_stream; //创建被动连接角色对象 ACE_SOCK_Acceptor peer_acceptor; //开启被动连接对象,将对象绑定到一个地址上 peer_acceptor.open( peer_addr ); while(true) { //等待连接 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; }
6. 在两个工程的 Additional Include Directories 里添加 $(ACE_ROOT).
7. 在两个工程的 Additional Dependencies 里添加 D:/ACE/ACE_wrappers/lib/ACEd.lib
8. 编译两个工程。
9. 先运行 ace_sample1_server.exe, 再运行 ace_sample1_client.exe.
参考:
。。。