当前位置:首页 » 编程软件 » ace网络编程

ace网络编程

发布时间: 2024-01-06 23:02:28

① 怎么学习C++设计模式举例说明

说起C++ 的系统和网络编程开源库,恐怕没有人敢否认ACE的王者地位。其实ACE不光是一个实用的程序库和框架集,它更是一个设计模式的典范应用。ACE在线索引文档:http://www.dre.vanderbilt.e/Doxygen/Stable/ace/index.html

ACE具有极其明显的分层体系结构,一般划分为三个层次:

1. 操作系统适配层

2. C++包装层

3. 构架和模式层

前面的两层都是对各个平台的底层OS API进行包装,最后化身成通用的C++类或者函数。举个简单的例子,比如ACE_OS::sleep(1)在任何平台下都是休眠一秒,这样就很方便写出跨平台的代码了。更好玩的是第三层,ACE把设计模式玩到了极致,设计出了许多实用的组件。比如任务和主动对象(Active Object),反应堆(Reactor),接受器(Acceptor)和连接器(Connector)。下面简单讲一下这三类模式的应用。

1. 任务和主动对象(Active Object)

那么到底什么是主动对象呢?传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的。也就是,调用线程(calling threads)被“借出”,以执行被动对象的方法。

而主动对象却不一样。这些对象持有它们自己的线程(甚或多个线程),并将这个线程用于执行对它们的任何方法的调用。因而,如果你想象一个传统对象,在里面封装了一个线程(或多个线程),你就得到了一个主动对象。

ACE中的主动对象的实现核心是ACE_Task。要实现一个主动对象,只需继承自ACE_TASK。ACE_Task有几个虚函数比较重要。open(), close()分别是对应服务初始化和关闭。可以在open()调用activate()来创建线程执行任务。而ACE_TASK中的所有主动线程的执行入口是虚函数svc()。只需在svc()中加入你的主动对象需要执行的任务代码即可。

2. 反应堆(ACE_Reactor)

在设计模式教科书中这么描述反应堆模式:反应堆本质上提供一组更高级的编程抽象,简化了事件驱动的分布式应用的设计和实现。除此而外,反应堆还将若干不同种类的事件的多路分离集成到易于使用的API中。特别地,反应堆对基于定时器的事件、信号事件、基于I/O端口监控的事件和用户定义的通知进行统一地处理。

描述地比较抽象,简单来讲就是:

a.创建事件处理器,以处理感兴趣的事件。比如handle_input()函数处理可能收到的输入。

int CMyACETask::handle_input (ACE_HANDLE fd);

b.把事件处理器指针和感兴趣的事件登记到反应堆,具体来说就是

m_reactor->register_handler(this, ACE_Event_Handler::READ_MASK | ACE_Event_Handler::WRITE_MASK );

c.在用户已登记的某个事件发生时,反应堆发出对处理器中相应方法的回调。

3. 接受器(Acceptor)和连接器(Connector)

ACE_Acceptor工厂允许应用开发者改变“助手”对象,以用于:

被动连接建立

连接建立后的处理

同样地,ACE_Connector工厂允许应用开发者改变“助手”对象,以用于:

主动连接建立

连接建立后的处理

接受器和连接器的具体代码比较简单,请见索引文档

② 如何用标准C++写个聊天室程序

因为设计到消息的传送,必须使用socket编程
我目前知道两种方法 分别是winsock和ace_sock 就是windows的和ACE框架下
如果想实现聊天室不用MFC的话就需要自己手动生成界面 很难实现
下面分别给出windows和ace的关键代码 可以参考一下
//-----------------------------------
// ACE 部分
//----------------------------------
ACE::init();

ACE_INET_Addr DestAddr(8090, "192.168.208.24");

ACE_SOCK_Connector connector;
ACE_SOCK_Stream peer ;

if(-1 == connector.connect(peer,DestAddr))
{
MessageBox("连接失败!");
}

ssize_t SendSize = peer.send_n("hello world\n",11);
peer.close();

ACE::fini();
}

//-----------------------------------
// Winsock 部分
//----------------------------------

WSADATA wsaData ;
int SrcAddr;
int err = WSAStartup(MAKEWORD(2,1),&wsaData);
if (err != 0) return;

struct sockaddr_in DestAddr;
memset(&DestAddr , 0 , sizeof(DestAddr));

DestAddr.sin_family = AF_INET;
DestAddr.sin_addr.s_addr = inet_addr("192.168.208.24");
DestAddr.sin_port = htons(8090);

SrcAddr = socket(AF_INET,SOCK_STREAM ,0);

int succ ;
if(connect(SrcAddr,(struct sockaddr *)&DestAddr,sizeof(DestAddr)) == 0)
{
succ = send(SrcAddr,"hello world",11,0);
}

shutdown(SrcAddr,2);
closesocket(SrcAddr);
WSACleanup();
}

我说的不够明白么 可以但是就用你现在学的东西不行 谭浩强的书太基础了

③ 网络编程用 c还是c++

网络的底层API都是C语言的,不管是Linux还是Windows都是这样。用C++是为了封装代码,达到复用和扩展的目的。简单的项目用C足够了,C++适合开发复杂的大型项目。据说ACE的结构很复杂,不太适合学习,我反正是没有接触过,只用过 Berkeley Socket

④ 画模型的ACE是什么的缩写是什么软件

Adaptive Communication Environment
C++ 网络编程库套件
Adaptive Communication Environment(自适配通信环境),简称ACE。为一个以C++的Template技术所做成的开放源代码的可跨平台的网络应用程序的程序库套件。它提供了socket/threading/memory management等多种系统调用的面对对象的wrapper,使C++通信软件开发更加简单。

⑤ ACE是指什么

哦,是被褥的牌子呀

⑥ 如何编译,配置ACE

ACE是个很有用的开放源代码的C++网络编程开发包,利用它比直接用API更有利于代码的健壮性,可移植性,并相对简单。
估计大家刚接触ACE时,都有一定难度,说不定就半途放弃了,这是我学ACE两天中的总结,基本上不成文,但我想研究到ACE的你一定会明白下文的意思。

一、ACE官方主页: http://www.cs.wustl.e/~schmidt/ACE.html
下载地址: http://deuce.doc.wustl.e/Download.html

Building and Installing ACE:http://www.dre.vanderbilt.e/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html
我下载的是Latest Beta Kit中的ACE.zip(Latest Release中的压缩包好像有问题,我有WinRAR3.30解压缩报错)

二、解压缩后放在D盘
D:\ACE_wrappers
三、在D:\ACE_wrappers\ace目录下新建文件config.h加入一行
#include "ace/config-win32.h"

四、编译:用VC6.0打开D:\ACE_wrappers\ace\ace.dsw
左侧显示 ACE DLL classes
ACE LIB classes
或1、从菜单上选择“编译”,“放置可远行配置”,选择你需要的工程配置
“编译”,“重建全部”(或任一,如ACE DLL - Win32 MFC Debug)
此过程可能持续半小时至一个小时不等
或2、从菜单上选择“编译”,“批构建”,选择你需要的工程配置
此过程可能持续二至四个钟头

产生的.lib文件位于D:\ACE_wrappers\ace\下,
产生的.dll文件位于D:\ACE_wrappers\bin\下

同样打开ace_static.dsw
编译
ACEs.lib
ACEsd.lib
ACE_RMCasts.lib
ACE_RMCastsd.lib
TMCasts.lib
TMCastsd.lib
ACE生成的dll和lib文件的命名规则:(d = debug,s = static)

debug - aced.lib、debug+static - acesd.lib、release - ace.lib、 release+static - aces.lib

五、样例程序的编译
用VC打开D:\ACE_wrappers\tests\tests.dsw
“编译”,“批构建”

六、自写程序的工程配置

中篇:ACE程序员教程.pdf中的样例程序:
网址:http://www.cs.wustl.e/~schmidt/ACE_wrappers/docs/tutorials/guide-tutorials.html

将网页上的原代码复制到一新建文件,并命名为server.cpp
用VC打开,编译,重建全部,弹出对话框,“This build command require ...“,点”是“

会出现以下错误

如果有“Cannot open include file: 'ace/SOCK_Acceptor.h': No such file or directory”
工程-设置-C/C++: Preprocessor,附加包含路径:D:/ACE_wrappers

如果有“ You must link against multi-threaded libraries when using ACE (check your project settings)”
工程-设置-C/C++: Code Generation - Use run-time library : Debug Multithreaded Dll

如果有“error C2065: 'ACE_ERROR' : undeclared identifier”
error C2065: 'ACE_DEBUG' : undeclared identifier
#include "ace/Log_Msg.h"
error C4716: 'ace_main_i' : must return a value
在main中加入
return 0;

“error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl”
工程-设置-Link-Input: 对象/库模块:添加aced.lib 附加库路径:D:\ACE_wrappers\ace

编译client中遇到的问题
1、error C2039: 'sprintf' : is not a member of 'ACE_OS'

#include "ace/OS_NS_stdio.h"

2、error C2039: 'strlen' : is not a member of 'ACE_OS'

#include "ace/OS_NS_string.h"
3、error C2059: syntax error : '?'
错误在这一句: ACE_DEBUG((LM_DEBUG,?Usage egX <hostname> <port_number>\n?));
将?改为"

4、无法找到动态链接库aced.dll于指定的路径
为系统变量PATH加上D:\ACE_wrappers\bin

静态包含:
工程-设置-C/C++-预处理程序定义中加入 ,ACE_AS_STATIC_LIBS

例1server编译后生成
server.exe 16K serverd.exe 97K servers.exe 124K serversd.exe 669K
(servers.exe较适合发布)

例2 client编译后生成
client.exe 16K clientd.exe 97K clients.exe 124K clientsd.exe 669K
(clients.exe较适合发布)

测试 clients 127.0.0.1 1919
servers 1919

下面是马维达老师写的:(转自huihoo)

发表于: 3/31/2003 - 04:24
翻译的一点小东西,希望能对大家有帮助。
其实也不敢称为是翻译的,水平太烂了,大家将就着看吧 :)

使用Microsoft Visual C++ 在win32平台上生成和安装ACE:

注意:关于MSVC5.0和Service Pack 3的使用有一些问题,过去一些用户在sp2中使用良好的代码在sp3种却会引发一些问题。感谢Bill 的细心查找,这一神秘的问题被解决了。答案?(哦,这儿有一个好答案。。。)这可能是因为有多个版本的sp3较早版本的sp3有一些bug,而后来的版本修正了这些错误,从微软网站上下载的1998年6月16日版本的sp3是一个良好的版本。如果X03-50158是那些拥有sp3的光盘序列号的一部分,那么这些版本也是良好的。但是不管任何版本的sp3,其STL的实现都有错误,详细情况请浏览http://www.dinkumware.com/vc_fixes.html。感谢Ben Eng对这些错误的修正。
现在的SP4(希望只有一个版本)已经修正了STL中的死锁问题。
我们现在将不再积极的支持MSVC 4.X以及以前的版本,ACE可和这些编译器一起工作但是可能会丢失一些好处。
1. 将ACE分发包界压缩到一个目录中,这将在那个目录中生成一个包含ACE的目录ACE_wrappers。接下来的步骤中假设ACE分发包被解压缩到ACE_ROOT=C:\ACE_wrappers中,因此ACE将会存在于ACE_ROOT\ace目录中。
2. 在ACE_ROOT\ace目录中创建一个文件,命名为config.h,其内容为:
#include "ace/config-win32.h"
3. 在VC++中加载ACE的工程文件(ACE_ROOT\ace\ace.dsw)
4. 每个工程都会包含多个配置,这些配置是Debug/Release, MFC/Non-MFCh和Static/Dynamic库版本等选项的混合。确定你所需要的构造(例如,调试代码需要ACE的调试版本)。所有这些不同的配置可以为你提供一些便利,你可以或者采用不同的模式以构造不同配置的应用,或者通过改变ace\config.h来改变在NT上的不同配置。
注意:如果你使用动态连接,请保证ACE_ROOT\bin被添加到你的path环境变量中,否则你将在运行程序的时候碰到寻找ace.dll或者aced.dll的问题。
5. 如果你在Windows NT或者Windows 2k上构建ACE,你可以马上开始构造她而不需任何改变,如果你在Windows 9x/me上构建,那么你必须在
ACE_ROOT\ace\config.h.的#include块之前添加一行:
#define ACE_HAS_WINNT4 0
这将在ACE中移掉一些WinNT/Win2K中特有的代码。
6. 如果你希望使用MSVC自带的标准C++头文件(C++ Standard Draft 2种定义的iostream,cstdio…..),则应该在
ACE_ROOT\ace\config.h.的#include块之前添加一行:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
7. 如果需要和MFC一起使用,增加如下定义到你的config.h文件中,注意,如果你想使用spawn一个新的线程,则必须保证使用THR_USE_AFX标志来spawn线程。
#define ACE_HAS_MFC 1
缺省的,ACE工程使用MSVC运行时的动态DLL版本,你也可以选择使用ACE的不关心运行时库的静态(LIB)版本。我们选择仅与动态运行时库连接的原因在于基本上所有的NT机器上都会安装这些库,而我们则可以因此而减小代码的大小。如果你希望ACE与MFC的静态版本连接,则可以在config.h中定义ACE_USES_STATIC_MFC。然而,如果你希望静态的连接所有的库(包括MSVC运行时库),就需要自己修改工程文件了。
8. 如果要构建ACE的静态版本,则需要在config.h中定义ACE_AS_STATIC_LIBS,此宏在那些希望使用ACE的静态版本的应用工程中也必须定义。
作为一个可选项,你可以在
#include statement in ACE_ROOT\ace\config.h.之前添加一行:
#define ACE_NO_INLINE
来取消函数内联从而减小静态库(和你的运行码)的大小。
9. ACE DLL和LIB库的命名规则:
我们使用如下的规则明明使用MSVC的ACE的DLL和LIB文件。
"Library/DLL name" + (是静态库吗 ? "s" : "") + (包含调试信息 ? "d" : "") + {".dll"|".lib"}
在MSVC环境中使用ACE的更多信息可以在这里找到。

-----------------------------------------------------------------------
一、安装TAO,需要先编译并安装ACE。

二、ACE的编译和安装步骤见http://www.cs.wustl.e/~schmidt/ACE_wrappers/ACE-INSTALL.html。TAO的编译和安装步骤见http://www.cs.wustl.e/~schmidt/ACE_wrappers/TAO/TAO-INSTALL.html。如果你英文程度还可以的话,最好直接阅读这两篇文档。说到底,中文文档只是“权宜之计”;汉语并不太适合进行逻辑性的表述。

但我还是把其中的一些段落编译如下(VC 6.0 + ACE-5.2.1 + TAO-1.2.1):

ACE的编译与安装

一般规则

ACE中的许多特性可以通过在$ACE_ROOT/ace/config.h中定义一些宏来进行修改。这些宏应该总是在包括针对你的平台的配置文件之前出现。

但是,如果你想要取消/重定义在针对特定平台的配置文件中定义的宏,#undef应该在配置文件之后出现。

如果你计划在多种平台上编译ACE,你也许需要考虑克隆源码树。

步骤:

1. 将ACE发布文件解压缩到某个目录中,在其中将会创建含有所有文件的ACE_wrappers目录。在下面的步骤中,ACE_wrappers目录将以ACE_ROOT为名来指称。

2. 在ACE_ROOT\ace目录中创建一个名为config.h的文件,在其中包含:

#include “ace/config-win32.h”

3. 现在加载ACE的项目文件(ACE_ROOT\ace\ace.dsw)。

4. 其中的每个项目都含有若干不同的配置(可混合Debug/Release、MFC/Non-MFC、Static/Dynamic library版本)。你可以从中选择你所需的配置,或是使用ace/config.h来进行调整。
注意:如果你使用动态链接库,在运行使用ACE的程序时,确定你在PATH中包括了ACE_ROOT\bin。

5. 如果你的系统平台是WinNT或2000,那么无需任何改动你就可以开始编译了。如果是Windows 9x/Me,你需要在ACE_ROOT\ace\config.h中的#include语句之前增加:

#define ACE_HAS_WINNT4 0

6. 如果你想要使用MSVC标准C++头(iostream、cstdio……),在ACE_ROOT\ace\config.h中的#include语句之前增加:

#define ACE_HAS_STANDARD_CPP_LIBRARY 1

7. 要与MFC一起使用ACE,再增加下面的定义:

#define ACE_HAS_MFC 1

注意如果你想要通过CWinThread派生新线程,一定要设置THR_USE_AFX。在缺省情况下,所有的ACE项目都使用DLL版本的MSVC运行时库。尽管如此,你仍然可以选择使用static(LIB)版本的ACE库。如果你想要将MFC作为静态库链接进ACE,你可以在config.h文件中定义ACE_USES_STATIC_MFC。但如果你想要静态链接所有的东西(包括MSVC运行时库),你就需要自己修改ACE的项目文件。

8. ACE的静态版本是通过定义ACE_AS_STATIC_LIBS来编译的。在链接静态ACE库的应用项目中也应该使用这个宏。
你也可以在config.h文件中增加

#define ACE_NO_INLINE

来取消函数内联并减小静态库(和你的可执行程序)的大小。

9. ACE DLL和LIB的命名方案:

"Library/DLL名" + (是否为静态库 ? "s" : "") + (是否启用了Debugging ? "d" : "") + {".dll"|".lib"}

10. 配置完毕后编译即可。选择dll版本,编译生成的dll文件在ACE_ROOT\bin中,相应的lib文件在ACE_ROOT\ace中。

ACE测试

各测试程序在ACE_ROOT\tests中。在其中也有一个工作空间文件可用来编译所有的测试程序(tests.dsw)。
一旦你编译了所有测试程序(可使用批编译),你可以运行tests目录中的perl脚本run_test.pl或批处理文件run_tests.bat来进行所有测试。

TAO的编译与安装

确定VC的CL.EXE在你的访问路径上。设置ACE_ROOT或TAO_ROOT环境变量。例如:

set ACE_ROOT=C:\ACE_wrappers

TAO最好放置在ACE_wrappers(这也是缺省情况)。

1.确定ACE已经编译和安装。

2.确定ACE_wrappers\bin已在“Tools|Options”中的“Executable Directories”中列出。如果在MSVC下使用TAO_IDL编译器就需要进行此设置。

3.加载tao\TAO.dsw,并编译TAO库。

4.要编译Cubit测试,加载performance-tests\Cubit\TAO\IDL_Cubit\IDL_Cubit.dsw,并编译客户和服务器。

TAOACE.dsw

TAOACE.dsw是一个Visual C++ 5.0/6.0工作空间文件,它加载的项目包括ACE、TAO、TAO_IDL(编译器)、gperf、orb服务库,以及一些单独的可执行程序(比如Naming Service,等等)。它可以用于编译所有的用于编译/运行TAO应用的文件。

三、我选择编译的是dll版本(Release),并在ACE的config.h文件中定义了“#define ACE_HAS_STANDARD_CPP_LIBRARY 1”。编译后我所得到的ace.dll的大小是1.13MB,相应的ace.lib的大小是1.77MB;TAO.dll的大小是1.47MB,相应的TAO.lib的大小是2.74MB。所有文件约有 MB,包括源程序、编译生成的中间文件,等等,但有些例子及服务我没有编译。

祝学有所成!

马维达

-------------------------------------
将ACE与VC6集成在一起

一.打开 Tools>Options>Directories
加入以下内容:
Executable File:
C:\ACE_wrappers\bin

Include File:
C:\ACE_wrappers\
C:\ACE_wrappers\TAO
C:\ACE_wrappers\TAO\orbsvcs

Library Files:
C:\ACE_wrappers\ace
C:\ACE_wrappers\TAO\tao
C:\ACE_wrappers\TAO\orbsvcs\orbsvcs

Source Files:
C:\ACE_wrappers\ace
C:\ACE_wrappers\TAO\tao
C:\ACE_wrappers\TAO\orbsvcs\orbsvcs

二.加入 C:\ACE_wrappers\bin 到系统环境变量 path中

三.设置系统变量
ACE_ROOT=C:\ACE_wrappers
TAO_ROOT=C:\ACE_wrappers\TAO

热点内容
rsa解密算法c 发布:2024-11-16 22:41:43 浏览:26
python3log 发布:2024-11-16 22:41:34 浏览:656
手机如何热点密码是多少 发布:2024-11-16 22:41:31 浏览:348
android上传多个文件 发布:2024-11-16 22:36:24 浏览:312
苹果微信25区怎么改为安卓区 发布:2024-11-16 22:32:39 浏览:650
数控编程轻松 发布:2024-11-16 22:23:38 浏览:813
能缓存老友记的播放器 发布:2024-11-16 22:22:16 浏览:479
python写入文件字典 发布:2024-11-16 22:21:14 浏览:14
androidandbase 发布:2024-11-16 22:16:34 浏览:417
phpifecho 发布:2024-11-16 21:57:11 浏览:723