ACE Socket Wrapper Facade

原创 2007年09月21日 13:36:00

如果你用C++以bind、listen、accept做了很长时间的网络应用开发,看到ACE的对socket的封装,你一定被它深深吸引,除非你是一个严格流程化的人,从来没有在bing、listen、accept的过程中碰到过任何苦恼。

接触ACE很长一段时间后也没有用心的去思考它,直到细致的看了一遍ACE的这个facade,我觉得我有必要研究一下ACE这个老新朋友了。

1.ACE_INET_Addr

我得承认,熟悉了ACE这套东西,我甚至都不愿意去想SOCKADDR那套东西,强制类型转换和太多的细节让我止步。从功能上来说,ACE_INET_Addr替代了SOCKADDR。

ACE_Addr是ACE里各种地址的基类,子类有ACE_INET_Addr和ACE_FILE_Addr以及其他几个地址类。具体可参看ACE在线文档。

2.ACE_SOCK

c里边的sock可以接受数据,也可以监听,还可以是连接,在统一程序中不同的sock只得以变量名区别,任何一次失误都会造成问题,而编译器不能帮你任何事情。ACE依照功能对sock进行了封装,这样编译器可以对误用的sock在编译阶段给于检查。

ACE_SOCK继承于ACE_IPC_SAP,根据功能,ACE_SOCK_Acceptor、ACE_SOCK_IO继承于ACE_SOCK,而ACE_SOCK_IO又有ACE_SOCK_Stream的继承。而ACE_SOCK_Connector和其他几个类的关系比较小。

一切都和以前网络编程一样,只是使用这些少了很多烦琐的事情。一个简单的使用ACE的服务可能是这样的:

    ACE::init();
    ACE_INET_Addr    addr(
2350);
    ACE_SOCK_Acceptor    sock;
    ACE_SOCK_Stream        msg;
    sock.open(addr);
    
while (true)
    
...{
        sock.accept(msg);
        
static    const    char    kmsg[]    = "you were kickout";
        msg.send(kmsg,
sizeof(kmsg));
        msg.close();
    }

    ACE::fini();

 请注意这里的init和finit,对于ACE新手而言,看了一大堆东西写一个可以成功的应用程序可能对信心有极大的提升作用,可是很少有人告诉你这对函数,如果没有它们,这成了对信心的一次巨大打击,你的程序无法正确运行,而你未得到任何错误提示。

init和finit宛如以前我们使用的wsastartup和wsacleanup一样,你不需要对init和finit了解太多,记得引入它们帮你初始化就可以了。对于新手而言,我敢保证,这是你的第一个ace程序无法正确运行的极大杀手。

HR-XML(可扩展人力资源标准)简介

HR-XML(可扩展人力资源标准)简介Flyspace (flyspace@x263.net)      2003年12月12日  标准出处:http://www.hr-xml.org标准简介:什么是...
  • FlySpace
  • FlySpace
  • 2003-12-13 02:25:00
  • 4552

ACE笔记:(2)包装外观(Wrapper Facade)

包装外观(Wrapper Facade):用于在类中封装函数的结构性模型
  • luhaitao_2008
  • luhaitao_2008
  • 2016-09-10 10:11:48
  • 177

ACE Socket Wrapper Facade

如果你用C++以bind、listen、accept做了很长时间的网络应用开发,看到ACE的对socket的封装,你一定被它深深吸引,除非你是一个严格流程化的人,从来没有在bing、listen、ac...
  • win2ks
  • win2ks
  • 2007-09-21 13:36:00
  • 1751

设计模式C++实现:包装器外观模式(Wrapper Facade)

包装器外观模式(Wrapper Facade)把现有的非面向对象的API所提供的函数和数据,封装在更加简洁的、健壮的、可移植的、可维护的和内聚的面向对象的类接口中。 一般通过两种方式实现跨平台: ...
  • renyican
  • renyican
  • 2015-12-28 11:43:18
  • 1083

包装外观(Wrapper Facade):用于在类中封装函数的结构型模式

正在处理中,请稍后…… cite.fav_csdnstylebykimi { font-style: normal; margin: 0 0 0...
  • wangchuanjin
  • wangchuanjin
  • 2008-07-01 08:52:00
  • 1700

ACE内存映射技术

 内存映射文件多个操作系统平台都提供了内存映射文件,这是一个简单的将数据结构保存到文件中的机制。同时由于32位操作系统的进程虚拟内存最大只能4GB,用内存映射文件的方式就可以突破这个限制,可以用来打开...
  • sheismylife
  • sheismylife
  • 2008-08-22 09:56:00
  • 5071

开源C++库:ACE及其安装使用

什么是ACE?     ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实...
  • zhu2695
  • zhu2695
  • 2016-05-02 11:49:25
  • 4005

ACE框架[推荐||精品]

ACE是高度可移植的开放源码主机基础设施中间件工具包,并已得到了广泛的使用。你可以从http://ace.ece.uci.edu/或http://www.riverace.com/自由获取其源代码。核...
  • wallwind
  • wallwind
  • 2011-07-01 14:16:00
  • 4240

ACE入门---很好的文章

ACE入门   转自:http://www.cnblogs.com/dubingsky/archive/2009/07/22/1528292.html ACE编译 1. 设置环境变量 在...
  • FoxBryant
  • FoxBryant
  • 2012-06-03 22:50:53
  • 7193

ACE研读笔记之二-Socket Wrapper Facades

C++主要是通过socket APIs 进行网络编程的, socket相关的API接口函数可谓洋洋大观, 多且繁杂, 稍不注意,就有可能误用用C++类对它们进行适当的封装是不错的主意, 在ACE中对此...
  • fanyamin
  • fanyamin
  • 2007-11-30 16:02:00
  • 2742
收藏助手
不良信息举报
您举报文章:ACE Socket Wrapper Facade
举报原因:
原因补充:

(最多只允许输入30个字)