VC6.0下安装配置ACE与初学ACE的心得

问题:

          最近一直在忙软工老师布置的最后一次作业:作业的内容是在ACE框架下的FTP下载程序。从开始从清楚ACE到底是怎么回事?到配置ACE,还有编写简单的ACE网络通信程序,总算学到了点东西。就总结一下。

解答:

    1:什么是ACE

        ACE全名为:"Adaptive Communication Environment",是一个美国人用C++编写的,可移植的面向对象主机基础设施中间件,我的理解是:ACE是一种封装的Socket通信包,里面包含了诸多的设计模式和框架,同时是跨平台的,屏蔽的很多的细节。从层次上应该是比较高级的网络编程模式,就是老师所说的“组装轮子”而不是“造轮子”.

   2:如何在VC6.0中构建和配置ACE

      (1)将ACE-5.5.zip解压到所需的安装目录,此处以E:/为例,解压后形成ACE_wrappers文件夹,因此ACE将会存在于ACE_wrappers/ace目录中。

       ACE_wrappers的子目录中大致包含7个目录:分别为:

    o   ace 包含ACE工具包的源码

    o  bin含有许多有用的实用程序

    o  apps 包含许多基于ACE的应用程序,比如Gateway消息路由

    o  docs 含有与ACE的各个方面的有关信息,比如它的编码指导方针

    o  examples 包含很多例子,演示怎么使用ACE类和框架

    o  tests含有ACE的回归测试套件

(2)在系统中新建ACE_ROOT环境变量,值设为 E:/ACE_wrappers。具体设置为:

        我的电脑->属性->高级->环境变量->新建

(3) 在E:/ACE_wrappers/ace目录中创建一个头文件,命名为config.h,其内容为:
    #include "ace/config-win32.h"(必选项)
    #define ACE_HAS_STANDARD_CPP_LIBRARY 1 (MSVC自带的标准C++头文件)

    #define ACE_HAS_MFC 1(与MFC一起使用)

 (4) 在VC++中加载ACE的工程文件(ACE_ROOT /ace/ace.dsw),在release和debug两种编译方式下进行编译,得到相应的库文件(ACE.dll、ACE.lib 和 ACEd.dll、ACEd.lib),其中ACE.dll 、ACE.lib是由release版生成的,ACEd.dll、ACEd.lib是由debug版生成的。具体操作方法:运行VC++,选择Build ->Batch Build…,将ACE-Win32 Debug和ACE-Win32 Release全部选中,Rebuild All即可.

 (5)配置ACE环境。 打开VC++6.0,选择Tools->Options->Directories 加入以下内容:
                    1) Executable File:E:/ACE_wrappers/bin
                    2) Include File:E:/ACE_wrappers
                    3) Library Files:E:/ACE_wrappers/lib
                    4) Source Files:E:/ACE_wrappers
在编写程序时要在Project->Settings菜单中进行如下设置:
C/C++选项卡:
Code Generation:选择多线程版运行时库(Multithreaded DLL)。
Preprocessor:在“Additional include directories”域中加入$ACE_ROOT。  
Link选项卡:
Input:在“Object/library modules”域中包含适当的ACE库文件,

      这个地方也可以换成一条预编译指令即:#pragma comment(lib, "ace.lib") //这个是Release版本的请注意。

在“Additional library path”域中包含ACE库链接文件的路径。这通常是ACE_ROOT/ace。

(6). 在系统环境的变量 path中加入E:/ACE_wrappers/bin,否则在运行程序的时候碰到寻找ace.dll或者aced.dll的问题。
(7.) 在windows下release时有可能报错,错误如下:
    error C2039: 'TryEnterCriticalSection' : is not a member of '`global
    error C2065: 'TryEnterCriticalSection' : undeclared identifier
解决办法:
工程 Project-->setting-->C/C++   写入:_WIN32_WINNT=0x0500

    也可以在stdafx.h中写入:

        #ifndef _WIN32_WINNT
        # define _WIN32_WINNT 0x500
        #endif

3:初学ACE的一些心得:

     初次学习ACE,可以说基本上不知道怎么回事。基本上参照一起写的Socket通信的简单例子,然后对比ACE里面封装的类,来一一比较,发现ACE封装的确实非常的完善,和简洁。

     因为我用的是非常简单的TCP/IP的Socket通信,所以写的非常的浅显:进行TCP/IP编程,ACE的Socket包装类族:

       o ACE_SOCK_Connector 连接器,主动连接器,用于客户端

       o ACE_SOCK_Acceptor  :接受器,被动建立连接,用户服务器
       o ACE_SOCK_Stream:       用于传输数据
       o ACE_INET_Addr :定义对端点进行寻址的手段,其实就是Sock_Addr,地址族

   然后我用ACE进行了一个简单的客户机和服务器的模拟,尝试了一下ACE编程。

  4:展望:

   感觉ACE的框架的使用我还没有用过,以后应该多尝试,尤其是Reactor框架,这个应该是比较简单和易用的,还有一些线程的同步和互斥。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值