ACE 安装指南

  The ADAPTIVE Communication Environment (ACE) 是一套免费的、开源的面向对象框架,它为大规模并发通信软件实现了许多核心的设计模式。 ACE 提供了一套丰富的、可重用的 C++ 封装类和框架组件,并且可以跨平台实现大多数常见的通信软件的功能。本文将通过几个非常简单,并且可以说是粗糙的小例子,为大家讲述 ACE 的安装及配置过程。通过这些简单的小例子,带领大家以最快的速度进入 ACE 的世界。我们第一步的目的就是不求完美,但求入门。
   首先我要先介绍一下本文所使用的环境,以后本文所提到的所有细节都要和这个环境相匹配,如果大家在安装配置时遇到问题,也可以用 QQ(21807822) Blog(http://dukejoe.yeah.net) 和我联系。我使用的是 AIX 5.3 Windows XP Home ACE 5.5 Visual Studio.NET 2003 如果环境不完全匹配,则安装过程会有少许的不同。
   下载 ACE 的页面是 Obtaining ACE, TAO, and CIAO ,可能有的朋友还不太熟悉英文,那大家可以直接点击下面的链接下载 ACE-5.5.zip(windows 平台 ) ACE-5.5.tar.gz(unix 平台 ) 。如果时间太长,可能链接太长,最好还是学习一些简单的英文,直接从 ACE 的下载页面找当前版本下载。本文所写的时间 ACE 的最新 Release 5.5
   我们先以 Windows 平台为例说明。用 WinZip 解压 ACE-5.5.zip ,硬盘最好保留 2G 以上的空间。我保留的是 8 G (毕竟还要干别的嘛),解压后的目录类似
d:/ace < 目录 >
-- ACE_wrappers <
目录 >
  -- ace <
目录 >
  -- include <
目录 >
  -- lib <
目录 >
   进入 D:/ACE/ACE_wrappers/ace 目录,新建一个 config.h 文件。加入一句话 #include "config-win32.h" ,现在使用 Visual Studio.NET 2003 打开 D:/ACE/ACE_wrappers 下的 ace.sln ,打开解决方案后,可以像你做其它开发一样,选择重新生成解决方案,接下来我们就不必再做任何操作。经过漫长的等待最后我们会在 lib 目录下生成 ace 所需要使用的 lib,dll 等文件。至此在 Windows Build ACE 的过程就基本结束了。
   第二步我们把 D:/ACE/ACE_wrappers/lib 目录加到 path 里,这样使用 ace 开发的程序就可以运行了。
   下一步我们要配置 VC 。打开 Visual Studio .NET 2003 工具 --> 选项 --> 项目 --> VC++ 目录,在 包含目录 中添加 D:/ACE/ACE_wrappers ,在 库文件 中添加 D:/ACE/ACE_wrappers/lib ,在 源文件 中添加 D:/ACE/ACE_wrappers/ace 。这样我们就完成了 VC 的配置。在程序中要使用头文件时,就会在 D:/ACE/ACE_wrappers/ace 目录下查找,而生成的 dll,lib 文件,如 ACEd.lib ,可以在 D:/ACE/ACE_wrappers/lib 中找到(如果找不到,说明你没有编译 ) 。下面我们来看一个例子,服务端和客户端都是在 aix windows 上测试通过,都可以运行在这两套系统上。首先启动服务端,打开侦听,客户端连接后随意发点消息过去,服务端也同时向客户端发送服务端所在主机的时间。这两个小程序非常简单,也还有很多的不足,但我们通过这个小程序是希望读者能对 ACE 的初步使用有一个感性的认识,并可以根据源代码中提到的一些类做为线索,展开 ACE 的学习。注意如果程序是在 Windows 下使用,需要在工程属性里的 链接 中加入 ACEd.lib 库,以便链接到 ACE 库。 如果是在 aix 上使用,可以生成一个 setenv.sh ,然后加入
ACE_ROOT=/rpt/gaohw/ACE_wrappers;export ACE_ROOT
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${ACE_ROOT}/build/ace/.libs/;export LD_LIBRARY_PATH
ACE_ROOT 的目录,你应该根据自已的系统进行修改。 aix 下使用的 makefile 文件内容如下:
all: test1
test1:test1.o
xlC_r -o test1 test1.o -L${ACE_ROOT}/build/ace/.libs/ -lACE
test1.o:test1.cpp
xlC_r -c -o test1.o -I${ACE_ROOT} test1.cpp
clean:
rm -f test1 *.o
 
/******************************************************************************
*
*
一个简单的 ACE 客户端例程
*
功能:连接指定的 IP ,发送任意的一条消息,来触发服务端,然后接收数据并显示
*
作者:高宏伟 (DukeJoe)
*
时间: 2007-07-18 14:19
* Blog
http://dukejoe.yeah.net
* QQ
21807822
*
开发平台:支持 AIX 5.3 Windows XP Home Edition
*****************************************************************************/
#include "ace/INET_Addr.h"
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Stream.h"
#include "ace/Log_Msg.h"
// FUZZ: disable check_for_streams_include
#include "ace/streams.h"
#if defined (ACE_WIN32) && (!defined (ACE_HAS_STANDARD_CPP_LIBRARY) || /
(ACE_HAS_STANDARD_CPP_LIBRARY == 0) || /
defined (ACE_USES_OLD_IOSTREAMS))
# include <stdio.h>
#else
# include <string>
#endif
int main(int argc, char* argv[])
{
ACE_INET_Addr iaServer;
u_short nPort = 5001 ;
const char * pServerHost = "10.110.16.45" ;
int iResult ;
ACE_SOCK_Connector scConnector;
ACE_SOCK_Stream ssStream ;
char szBuffer[1024] ;
char* pText = "
高宏伟 QQ:21807822" ;
size_t nLength = 0 ;
iResult = iaServer.set(nPort, pServerHost);
if (iResult == -1)
ACE_ERROR_RETURN ((LM_ERROR, "lookup %s, %p/n", pServerHost, nPort), 1);
if ( scConnector.connect(ssStream, iaServer) < 0 )
ACE_ERROR_RETURN ((LM_ERROR, "%p/n", "connect()"), 1);
strcpy(szBuffer, pText) ;
ssStream.send_n(szBuffer, strlen(pText)) ;
memset(szBuffer, 0, sizeof(szBuffer)) ;
iResult = ssStream.recv_n(szBuffer, 1024) ;
nLength = strlen(szBuffer) ;
ACE::write_n(ACE_STDOUT, "Recv --> " , 9) ;
ACE::write_n(ACE_STDOUT, szBuffer, nLength) ;
ACE::write_n(ACE_STDOUT, "/n", 1) ;
return 0 ;
}
 
/******************************************************************************
*
*
一个简单的 ACE 服务端例程
*
功能:当客户端发送任意消息过来之后,服务端向客户端发送当前主机的日期字符串
*
作者:高宏伟 (DukeJoe)
*
时间: 2007-07-18 14:53
* Blog
http://dukejoe.yeah.net
* QQ
21807822
*
开发平台:支持 AIX 5.3 Windows XP Home Edition
*****************************************************************************/#include <ace/OS_main.h>
#include <ace/ACE.h>
#include <ace/Log_Msg.h>
#include <ace/SOCK_Acceptor.h>
#include <ctime>
#include "ace/streams.h"
int DisplayTime(char* pTime) ;
int main(int argc, char *argv[])
{
ACE_INET_Addr addr(5001);
ACE_SOCK_Acceptor server;
ACE_SOCK_Stream stream;
char szBuffer[1024] ;
if(server.open(addr)==-1)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) %p/n"),
ACE_TEXT ("bind failed")));
return 1;
}
while(server.accept(stream)!=-1)
{
ACE_INET_Addr raddr;
stream.get_remote_addr(raddr);
ACE_DEBUG ((LM_DEBUG,ACE_TEXT ("(%P|%t) connect:%s %d/n"),raddr.get_host_addr(),raddr.get_port_number()));
memset(szBuffer, 0, sizeof(szBuffer)) ;
DisplayTime(szBuffer) ;
stream.send_n(szBuffer,sizeof(szBuffer));
stream.close();
}
server.close();
return 0;
}
int DisplayTime(char* pTime)
{
time_t nTime=0;
time( &nTime ) ;
tm *tm1 = localtime( &nTime ) ;
sprintf(pTime,"%04d-%02d-%02d %02d:%02d:%02d",tm1->tm_year+1900,tm1->tm_mon+1,tm1->tm_mday,tm1->tm_hour,tm1->tm_min,tm1->tm_sec);
ACE::write_n(ACE_STDOUT, " 当前时间 --> " , 13) ;
ACE::write_n(ACE_STDOUT, pTime, strlen(pTime)) ;
ACE::write_n(ACE_STDOUT, "/n", 1) ;

return 0 ;
}
Unix 上的安装配置我们是以 AIX 5.3 为例进行说明的。由于我使用的系统没有安装 openssl 库,所以我先下载了 openssl-0.9.8e.tar.gz 下载页面是 http://www.openssl.org 下载安装 openssl 比较简单 make 一下,再 make install 一下就可以了,在使用 ACE 之前,大家应该熟悉 unix 吧?(什么?不熟悉? ACE 是个比较高级的主题,如果是小学没读完就上高中了,那初中和小学的课你还要好好补一下哟)
aix 上安装,要先设置 ACE_ROOT ,方法在上面的 setenv.sh 里有语句。
第二步也和 windows 一样要生成 config.h 。我们使用的是 aix 5.3 ,所以我是要在 config.h 里包含 config-aix-5.x.h 文件即可
第三步进入 ${ACE_ROOT}/include/makeinclude 目录,创建一个名为 platform_macros.GNU 的文件,在其中包含如下一行
include $(ACE_ROOT)/include/makeinclude/platform_aix.GNU
,另外还有一个方法是用 ln -s platform_aix.GNU platform_macros.GNU
下一步,我们在 ${ACE_ROOT} 目录里新建一个目录 build 。然后 cd build 。在 build 目录里执行 ../configure ,等待一段时间之后,我们再 make 一下就可以生成 ACE
AIX 上的安装过程就到这里了,下一步,你可以用上面的 setenv.sh 来初始化环境变量,其实也就是指定 ACE_ROOT LD_LIBRARY_PATH 两个目录。
1 、设置 ACE_ROOT 变量。例如: ACE_ROOT=/rpt/gaohw/ACE_wrappers;export ACE_ROOT
2 、在 ${ACE_ROOT}/ace 目录里,新建 config.h ,加入 #include "config-aix-5.x.h" 语句。
或者不愿意生成文件就用 ln -s config-aix-5.x.h config.h
3 、在 ${ACE_ROOT}/include/makeinclude 目录,新建 platform_macros.GNU ,加入 include $(ACE_ROOT)/include/makeinclude/platform_aix.GNU
当然你也可以用 ln -s platform_aix.GNU platform_macros.GNU 来做到相同的效果
4 、在 ${ACE_ROOT} 里新建一个目录 build
5 、在 build 里敲 ../configure (注意,要有两个点)
6 configure 成功之后,再 make ,就大功告成。
7 、测试,按上文说法设置 LD_LIBRARY_PATH ,再用上面的源代码和 makefile 尝试编译,链接,运行吧。
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值