本来想买来看看的,结果翻阅 china-pub 的书评,让我倒了胃口。
http://www.china-pub.com/member/bookpinglun/viewpinglun.asp?id=130
我自己也写了篇 blog 提到这本书,
http://blog.codingnow.com/2006/12/wsaasyncselect_winsock.html
我感觉读这本书,可能还不如看 msdn :(
下面转载:
等级: 用户:chjfth 类型: 读者 最新讨论:2005-5-13 11:40:25
得1支
[2005-05-12]
这几天看了这本书第一版的英文电子版,只看了第3章和第8章等少量几章,就觉得非常不爽,觉得这是个蹩脚作者写出来的书。我对此书原文的评价是两星,现在又被一帮烂仔翻译成中文,两星都取消得了。
【总述】
在 google 上搜索 "Network Programming for Microsoft Windows" errata ,会发现你找不到这本书的勘误表,这从一个侧面反映出这本书很烂(虽然它出了第二版)。
Winsock 编程肯定要用到底层 Windows API 知识、TCP/IP 的先验知识以及一些历史性的 BSD socket 编程的知识,这些知识这本书是没有详细介绍的,但本书作者却吝于指导读者去何处寻找这些先验知识(只有非常少的几处提及)。
作者写例子代码的能力很烂,经常是先做一段长篇大论之后,然后再抛出一大段程序(不少还是临时拼凑的代码片断),让你自己把程序中的各条语句和前面的长篇大论联系起来。看看 W.Richard.Stevend 的 《Unix 网络编程》,人家给出的每一个程序例子几乎都是可完整的(可编译运行的),而且每行代码前面加上行号,一行一行给你分析,而你 Anthony Jones 呢?
【具体例子】
Winsock 函数要求使用的 Event 是用 WSACreateEvent 创建的,但这和 CreateEvent 来创建的事件句柄有没有什么差别呢?我希望在这本书中得到答案,但作者完全回避了。
第8章的 Socket I/O Models,本来是循序渐进的介绍 Winsock 四种 I/O 模型的重头戏,但你将发现这一整章中作者没列出一个完整的、可编译的例子。配书光盘上倒是用可编译的例子,但是写得很烂。看了其中的 EventSelect 例子后,才知道他书中列出的例子代码(片断)原来是这个 eventselect.cpp 中的“关键”语句拼凑出来的。
查看了那个 EventSelect 例子(CUI)后,发现这个程序是无法正常退出的,除非某个 API 意外地出现失败。我本来期望这个例子能够有用户按下 ESC 键后能够正常退出的功能,但我非常失望,他没有。一个真正有用的网络应用程序不仅仅是跟 socket 打交道,它还得响应,并且高效地处理其他的异步事件(比如用户的键盘输入),如何结合这两类操作往往是难点所在。
我还仔细看了第4章——named pipe。这章中的多线程管道服务器倒是可以按键后退出,但它只是简单的通过 main 线程 return 的方式退出,退出时野蛮地终结了所有的管道服务线程。幼稚!
第4章还有一个严重错误:MSDN 明确告知 ConnectNamedPipe 因为ERROR_PIPE_CONNECTED 而导致失败时,实际上是表示管道连接成功,但作者所有例子的 ConnectNamedPipe 都没有检查这个错误码,而是把它跟其他真正的失败同样对待。顺便提提,我去查了该书的第二版,这个错误并没有被修正!——或许,他只是把第一版的一整章内容抄过来罢了。
china-pub 上的一篇差评
|
原来如此,,,那我果断不去买了。。
迄今看过的老外写得最烂的书,翻译就更不用了说了,搞不明白微软出版社会出这么没水平的书砸自己牌子。
> 我来回应