2004-05-28 9:00
ACE_C++NPV1-学习笔记 (1)
注:本文章谢绝转载
因为安装了M$的VS 2003(VC7.1.3091),看网上资料说和标准C++有98%的符合,因为现在在学习C++,并且想学习ACE,
所以就准备把原来在VC6下编译通过的ACE重新用VC7来编译,为以后学习准备好.
在WINDOWS安装ACE很简单,按照 ACE-INSTALL.html 中的说明做就一切OK,首先在 ACE_ROOT\ace 下建立一个
config.h文件,然后在其中加入一行 #include "ace/config-win32.h" 即可,另外因为我在学习C++嘛,当然希望让ACE使用
标准的C++库了,那就还需要在config.h的第一行()加入一个宏定义:#define ACE_HAS_STANDARD_CPP_LIBRARY 1表明我们要ACE
使用标准的C++头文件,另外还有的配置是是否使用MFC,当然我是不使用了,使用了还指望什么跨平台啊...:)
那么按我的需要,config.h文件中就只有如下两行
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
#include "ace/config-win32.h"
然后就可以打开 ACE_ROOT\ace 目录下的ace.dsw来进行编译工作了
哦,忘了说:ACE_ROOT就是你安装ACE的目录,比如说我是将ACE-5.4.zip解压缩到 d:\ace 目录下的,因为ACE-5.4.zip中本身就包含
路径 ACE_wrappers,所以最后 ACE_ROOT 就等于 d:\ace\ACE_wrappers 了,如果你是解压缩到D:盘的根目录下,那么
ACE_ROOT 就等于 d:\ACE_wrappers 了,以此类推...
还有一点在你进行ace.dsw的时候要注意,因为.DSW是VC6的工程文件,在VC7.1中打开会提示你是否进行到VC7.1工程文件的转换,选择
"全是"就是了,然后在编译前还有一点要注意:你要编译出
By default, all of the ACE projects use the DLL versions of the MSVC run-time libraries. You can still choose
use the static (LIB) versions of ACE libraries regardless of run-time libraries. The reason we chose to link
only the dynamic run-time library is that almost every NT box has these library installed and to save disk space.
If you prefer to link MFC as a static library into ACE, you can do this by defining ACE_USES_STATIC_MFC
in your config.h file. However, if you would like to link everything (including the MSVC run-time libraries)
statically, you'll need to modify the project files in ACE yourself.
如上提示的什么类型的结果?我是选择的动态连接库,还有就是是DEBUG版本还是RELEASE版本,我是建议DEBUG版本了,因为ACE自带的EXAMPLE,
APPS等都需要的是调试版本的ACE库,如果你生成了RELEASE的库,那你编译那些例子程序就要费些手脚了,嘿,嘿...
然后编译一路无话,最后提示没有任何错误,警告,这个ACE写得可真是厉害啊...另外我觉得VC7.1的编译速度好象有些慢,VC6下编译时刷刷刷的
编译信息提示得很快,而VC7.1却是一秒钟最多提示编译结束一,两个文件.
ACE库编译结束后的第一件事自然是编译ACE自带的EXAMPLE了,我等C++小菜鸟不根据例子如何学习? :P 里面的C++NPv1和C++NPv2当然是我们的重点了,
对C++想学习网络编程的可能都听说过这两本书,中文版的两本我都买了,英文版的也下载了 :) 感谢於春景和马维达两位老师的翻译工作,使我们能
更方便的学习ACE!
这里我说句题外话,我在网上看到对很多中译本的书评中好多评论者都在那里可以说是乱骂:这里翻译得如何不对,那里翻译的如何不好,
我们不如去看原版,不要受什么人什么的骗,他们翻译出来的是垃圾等等...看到这些我很不舒服,我不否认现在有很多中译本翻译的是不怎么样,
看了是令人有些头昏脑涨,但是也不是本本都这样,而我看到的每本中译本的书评中都有这些评论,实在是...
在侯捷老师的站点上有这样一篇文章http://www.jjhou.com/article01-6.htm (科技翻译面面观,从计算机领域谈起),这篇文章的内容
我觉得写的很实在,精辟,在这里就不重复了...
我的母语自然是中文了,而且我的英文水平也是一般,在计算机上看一屏一屏的英文还好,因为可以放大,对拿在手上厚厚一本,密密麻麻的
英文书实在是... :P 一般的英文文档计算机相关的可以勉强看完(当然大多数时候还需要金山词霸的拔刀相助:P),想了解的资料
有了中文版我自然想去买来参考,但是我不会要求中译本百分百完美,我只要求我能够大概看明白原来的英文文档表明的是什么意思就可以了,
具体到有什么句子段落觉得翻译得不好,怎么都看不太懂,能找到英文资料的我就自己去啃,不能的就看看能不能上网去问(大多数时候都是没有...:)
没有原版也问不到就放起,说不定以后从别的方面触类旁通,就豁然开朗了,个人觉得不要太钻牛角尖... :)
我不会因为这处或那处翻译的有什么不足,不对,就跳出来乱骂,说是垃圾... :) 抛开急功近利翻译书的那种不谈,起码翻译的老师都会将
原版书全部看完,然后逐行翻译成书,试问下那些乱骂的有几人是全本英文书都逐行看完,然后觉得人家翻译的不好的?我看大概都是看中文版本觉得
有那么几句不对,然后去翻了下原版就开始乱骂,这样是不是有些偏颇了,你看几行,人家老师是看全本,我想谁都知道翻译几行跟翻译全本的差别了!!!
我觉得只要是翻译的老师认真翻译了,翻译的"信,达,雅"(见上面提到的侯捷老师的文章)也有一定的水准,书中有些小暇瘛在所难免,所谓暇不掩渝嘛,
就个人的观点来看,我觉得任何工作,事物都大多都符合一句大俗话:金无足赤,人无完人,这话对应到中译本也... 嘿,嘿... 你实在不满,请有礼貌的
提出来,在那里乱骂算个什么!!!
好,上面说了那么多题外话,不过实在是忍不住... :) 让我们继续上面关于ACE例子编译,运行的话题, 下面都以C++NPv1目录下的文件为例子,
其他的例子也类似,首先是编译,应该是没有什么问题的,如果编译不通过,请检查VC7.1的配置,在"工具","选项"中有一个"PROJECT",然后右边有个
"显示以下内容的目录"的下拉框,点开后选择"包含文件",然后在其中加入新的一行 ACE_ROOT\include ,在我的机子中
因为ACE_ROOT等于D:\ace\ACE_wrappers\,所以我加入 D:\ace\ACE_wrappers\include, 对应到你的机子,请按实际情况加入...
然后因为编译后是链接嘛,这里顺便就说说,因为上面说了,ACE自带的例子程序使用的都是DEBUG库,那么在链接时你就需要指定aced.lib所在的目录了,
因为VC7.1在编译ACE库时,将ACED.LIB等文件放到ACE_ROOT下的LIB目录了,所以你要在上面"显示以下内容的目录"的下拉框中继续选择"库文件",
然后加入新的一行加入ACE_ROOT\lib,这样就一切OK了...
最后就是程序的运行了,你需要在系统的PATH变量中加入ACE_ROOT\bin和ACE_ROOT\lib 然后再开一个CMD窗口到例子程序的目录,就可以运行
例子程序了...
C++NPv1的例子程序是以一个网络日志服务器程序为例子,
首先我们说说客户端 LOGGING_CLIENT.EXE 它可以带两个参数, 第一个是端口号,比如说8901, 第二个是 IP, 缺省是 LOCALHOST,
然后是服务器程序 我就以Thread_Per_Connection_Logging_Server为例,它可以带一个参数, 第一个参数就是监听的端口号,比如说8901,这
就是客户端需要指定的第一个参数了
对C++NPv1的例子程序,还有一两句不得不说的话,运行时提示信息太差啦!!! 客户端的连接,消息送出和服务端的接受链接,接收消息没有任何
提示,害得我还以为程序运行不正常,在客户端LOGGING_CLIENT.CPP中加入一行
cout << "客户端输入并向服务器送出了:" << user_input << endl;
才确认程序运行正常.
其实例子的服务器程序还是有记录的,它会以你的机器名+".log"在服务器目录作为日志文件名将客户端送来的消息记录下来,
不过是二进制格式,不太好看懂... :)
好,今天就先写到这,说到这我还有一小点体会: 写文章好累啊,我这么一小点东西就花了我从9点到11点两个小时的时间,还没有修改,润色!!!
再想想如果是翻译书的话,要先看懂那密密麻麻的英文,然后象我写这篇文章一样翻译过来,然后还要修改,润色,这份工作不轻松啊,再想到那些发
评论乱骂垃圾的人... 哼...(这里我声明,我与上面提到的几位作者没有任何关系和联系过,这里的言词纯属个人感想... :)