`
zhjb2000
  • 浏览: 58306 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

ACE通信框架的一些例子(包括MFC)

阅读更多

ACE折磨了几天以后整理出来的一些经验,和大家分享

一. ace的编译安装

环境:XPVC6.0+SP6ACE5.4

1. 解压缩ace源代码包,假设在D:\ACE_wrappers

2. 使用vc打开D:\ACE_wrappers\ace\ace.dsw

3. 工作区上有三个工程,在ACE工程的头文件中找到config.h

4. 双击打开这个文件,会有提示这个文件不存在是否创建,点是

5. config.h中写入#include "ace/config-win32.h"表示windos 32位操作系统

6. ACE工程上右键Settings... 选择c/c++ Caterory中选择 Code Generation 然后在 Use run-time library 中选择 Debug Multithreaded DLL

7. ACE工程上右键 build(selection only)

8. 编译后会在D:\ACE_wrappers\lib 目录中生成ACEd.lib ACEd.dll ACEd.exp ACEd.pdb等文件

9. D:\ACE_wrappers\ ACE-INSTALL.html有完整具体的安装指南

二. Ace的一些概念

网上找到描述,比较生动容易理解。

前摄器(Proactor异步的事件多路分离器、处理器,是核心处理类。启动后由3个线程组成(你不需要关心这三个线程,我只是让你知道一下有这回事存在)。

接受器(Acceptor-用于服务端,监听在一个端口上,接受用户的请求。

连接器(Connector-用于客户端,去连接远程的监听。当然,如果远程是ACE写的,就是Acceptor

异步模式-即非阻塞模式。网络的传输速度一般来讲为10Mbps100Mbps1000Mbps。拿千兆网来说,实际的传输速度为1000Mbps/8大概为128KB左右。我们的CPU一般为P4 3.0GHZ,如果是32位的处理器,一秒钟大概可以处理6G的字节,那么,128KB的网络速度是远远及不上处理器的速度的。网络发送数据是一位一位发送出去的,如果CPU等在这里,发送完成函数才结束,那么,处理器浪费了大量时间在网络传输上。

操作系统提供了异步的模式来传输网络数据,工作模式即:应用程序把要发送的数据交给操作系统,操作系统把数据放在系统缓冲区后就告诉应用程序OK了,我帮你发,应用程序该干嘛干嘛去。操作系统发送完成后,会给应用系统一个回执,告诉应用程序:刚才那个包发送完成了!

举个例子:你有几封邮件和包裹要发,最有效率的办法是什么?你把邮件和包裹及交给总台,总台MM说,好了,你帮你发,你忙去吧!然后你去工作了。过了一会,总台MM打电话告诉你:“刚才我叫快递公司的人来了,把你的包裹发出去了。邮局的人也来了,取走了邮件,放心好了”。同样,如果你知道今天会有包裹来,比如你在淘宝上购物了,你能成天等在总台?你应该告诉总台MM:“今天可能有我的一个快递,你帮我收一下,晚上请你肯德基!”。MM:“看在肯得基的面子上,帮你收了”。某个时间,MM打电话来了:“帅哥,你的包裹到了,我帮你签收了,快来拿吧。”

因为操作系统是很有效率的,所有,他在后台收发是很快的。应用程序也很简单。Proactor就是这种异步模式的。Proactor就是总台MMACE_Service_Handle就是总台代为收发邮件的公司流程。

三. 配置ace的工程

在使用到ace的工程中都要进行的一些设置

1. 选择Project->Settings...

2. 选择c/c++ Caterory中选择 Code Generation 然后在 Use run-time library 中选择 Debug Multithreaded DLL

3. Caterory中选择Preprocessor Preprocessor definitions 中添加ACE_AS_STATIC_LIBS 使用逗号与前面的内容隔开 在Additional include directories 中写入ACE的根目录D:\ACE_wrappers

4. 选择 Link Caterory中选择Input Additional library path 中加入D:\ACE_wrappers\lib Object/library modules 后追加aced.lib 用空格与前面的内容隔开

5. 设置完整以后重启vc

四. 基于Console的服务器端

服务器端的功能:在指定端口进行监听,在后台打印客户端发来的信息,然后向客户端返回“serer say hello”信息。

ACE_Service_Handle主要就是定义了一些回调函数。

当有客户端连接上来,连接建立成功后Proactor会调用这个方法。

1、virtual void open (ACE_HANDLE handle, ACE_Message_Block&message_block);

当用户要读的数据读好了后,调用这个方法

2 virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result);

当用户要写的数据在网卡上发送成功后,Proactor会回调这个方法

3virtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result);

4 virtual void handle_time_out (const ACE_Time_Value &tv, const void *act=0);

建立一个基于Console的服务器工程

下面是服务器的代码,不是很难,结合注释看,很容易看懂

五. 基于Console的客户端

客户端实现的功能是在连接上服务器的时候给服务器发送当前的系统的时间,接收到服务器信息的时候,把信息打印找后台输出屏幕上

建立一个基于Console的客户端工程

把下面的代码贴到工程里面

这里可以发现客户端和服务器端的代码基本上一样的,就是建立连接后一个函数负责发送数据,一个函数负责接收数据。作为客户端使用这样的方式去接受服务器随时发过来的数据,是不合理ACE_Proactor::instance()-> proactor_run_event_loop(); 这个语句使得这个程序进入一个死循环,从而无法做其他事情了。下面介绍客户端实现的另一种方式。

六. 基于FMC的客户端

建立一个基于对话框的FMC程序,在窗体上放置三个按钮,一个“连接”按钮,一个“发送”按钮,一个“退出”按钮。在放一个文本输入框,然后在文本输入框上右键选择ClassWizard->Member Variables 为文本输入框建立一个变量为m_send如下图

在工程中加入下面的文件

RecvTask.h

RecvTask.cpp

Client.h

Client.cpp

双击“连接”按钮,贴入连接服务器的代码

并在这个文件头部引入

#include "ace/Addr.cpp"

#include "Client.h"

双击“发送”按钮,写下发送的代码

双击“退出”按钮,写下退出的代码

首先运行前面的服务器程序,然后再运行FMC程序,先连接服务器,然后再发生数据。

下面是运行的效果

注:运行的时候把ACEd.dll拷贝的exe 所在的目录

(文章发布还真难用,调文章效果都调了好多次,调好以后,发布以后格式又乱了,那个郁闷啊)

分享到:
评论
1 楼 lvzhenzhang 2009-08-11  
我编译会出现这个问题
error C2061: syntax error : identifier 'nothrow'

我感觉是class RecvTask: public ACE_Task<ACE_MT_SYNCH>中ACE_MT_SYNCH的问题,有什么解决的法子吗?

相关推荐

    ace前端框架ace前端框架

    Ace框架的核心特性包括: 1. **语法高亮**:Ace提供了一流的语法高亮功能,能够识别并美化各种编程语言的代码结构,使得代码更易读,更美观。 2. **代码折叠**:用户可以方便地折叠代码块,隐藏不重要的部分,以...

    Ace Admin 前端框架

    在"ace-master"这个压缩包中,你将找到构建Ace Admin框架所需的所有资源,包括HTML模板、CSS样式表、JavaScript文件以及可能的图像和图标。这些文件通常按照一定的目录结构组织,便于开发者理解和使用。 1. **HTML...

    ACE后台框架

    ACE框架的核心特性包括: 1. **模块化设计**:ACE采用模块化结构,将不同的功能拆分为独立的模块,便于代码管理和维护。开发者可以根据需求选择必要的模块,降低系统的复杂度。 2. **高性能**:ACE框架对性能有...

    jace的全部原代码类似于C++的ACE自适配通信框架

    ACE作为一个全面的通信框架,包含了大量的网络编程组件,如并发管理、线程池、事件调度、信号处理等,而Jace则更专注于C++和Java之间的互操作性,它的重点在于桥接不同语言,而非提供完整的网络服务解决方案。...

    ACE_MFC.rar_ACE_ACE_MFC

    这个压缩包可能是为了方便开发者在使用Visual C++ 2005进行项目开发时,可以直接引入这些库文件,以便利用ACE的网络通信能力以及MFC的图形用户界面和应用程序框架。 描述中提到的“ACE默认生成的库是标准库版”,...

    非常好用的一个ace前端框架

    1. **源码文件**:这是Ace框架的核心部分,包括JavaScript文件、CSS样式文件以及可能的图片资源。这些文件用于在网页中引入Ace,实现前端功能。 2. **示例和教程**:为了帮助开发者更好地理解和使用Ace,压缩包可能...

    ace admin框架下载

    Ace Admin 框架的核心特性包括: 1. **响应式设计**:Ace Admin 支持多种设备,包括桌面、平板和手机,能够自动适应屏幕大小,提供一致的用户体验。 2. **丰富的组件库**:框架内包含了大量的UI组件,如导航菜单、...

    ace前台框架完整版下载

    开发者可以通过查阅这些例子来了解Ace框架的各种功能和用法。 7. `angular`:如果存在这个目录,可能表明Ace框架集成了AngularJS,一个流行的JavaScript MVC框架,使得开发单页应用更加便捷。 8. `assets`:通常...

    ace后台框架汉化版

    Ace框架的核心特点包括: 1. **响应式设计**:Ace框架支持多种设备和屏幕尺寸,可以自适应桌面、平板和手机等不同终端,提供一致的用户体验。 2. **模块化结构**:Ace采用模块化设计,允许开发者根据项目需求选择...

    ACE_ADMIN 框架学习手册

    - `ace.js`:ACE_ADMIN框架的主要JavaScript文件,它可能包含了框架的核心功能和API。 5. 在HTML结构中,可以找到使用了Bootstrap的响应式设计的组件,如`&lt;div class="navbar"&gt;`、`&lt;div class="sidebar"&gt;`、`...

    ace+Admin前端框架

    Ace+Admin前端框架是一款广泛应用在企业级Web应用中的开源UI框架,它结合了Ace和AdminLTE两个优秀的前端组件库,提供了丰富的界面元素、布局选项和交互设计,旨在为开发者提供一个高效、美观且易于定制的开发环境。...

    ACE网络框架-文档资料

    【ACE网络框架-文档资料.rar】压缩包中含有如下内容: ================================================== 【ACE源码】目录: ACE+TAO+CIAO-6.0.0.tar.bz2 ----------------------------------------------------...

    ACE网络通信架构中文版

    ACE是可以自由使用、开放源码的面向对象(OO)构架(Framework),提供了一组丰富的可复用C++包装外观(Wrapper Façade)和构架组件,可跨越多种平台完成通用的通信软件任务。本书详细描述了技术架构及编程实例,...

    ACE入门详细例子

    ACE(Adaptive Communication Environment)是一个跨平台的网络编程框架,由Dale O'Donnell创建,主要用于构建高性能、高可靠性的分布式系统。ACE提供了一套强大的C++库,支持多种网络协议,包括TCP/IP、UDP、HTTP等...

    电信设备-基于ACE的通信框架和方法、及功能模块间的通信方法.zip

    本资料"电信设备-基于ACE的通信框架和方法、及功能模块间的通信方法.zip"主要探讨了如何利用ACE来构建通信框架,并详细阐述了各个功能模块之间的通信机制。 首先,ACE框架提供了一套全面的网络编程接口,支持多种...

    ACE分布式框架安装指南

    ACE(Adaptive Communication Environment)是一个高性能的C++网络通信框架,广泛应用于各种系统开发中,尤其是在分布式系统领域有着不可替代的地位。本文将详细介绍如何安装ACE框架,并确保其能够在您的环境中正常...

    C++网络编程 卷2 基于ACE和框架的系统化复用

    ACE是一个跨平台的开源库,它为网络编程提供了一组强大的工具和组件,包括线程管理、事件调度、对象间通信等,极大地简化了复杂网络应用的开发。 ACE框架的核心在于其面向服务的架构,它将网络编程的各种功能封装成...

    C++网络编程ACE框架

    掌握ACE框架需要对网络编程的基本概念有深入理解,包括套接字编程、并发控制、网络协议等。通过阅读压缩包中的"Windows网络编程技术",可以学习到ACE在Windows平台上的具体用法和实践技巧。同时,官方文档、示例代码...

    ace.rar(前端框架)

    这个“ace.rar”压缩包很可能包含了Ace框架的核心库文件以及相关的示例、文档和资源。 Ace框架的主要特点包括: 1. **高性能**:Ace使用高效的DOM操作,能够在大量代码的编辑环境中保持流畅的用户体验。 2. **多...

    web前端框架 基于bootstrap的ACE前端框架

    **ACE前端框架详解** ACE(Ajax Control Toolkit Enhanced)是一个基于Bootstrap的高级前端框架,它为开发者提供了丰富的组件和工具,适用于.NET和Java平台。这个框架以其简洁易用和功能全面的特点,深受开发者的...

Global site tag (gtag.js) - Google Analytics