UNP很好,非常好,太好了。
说UNIX/Linux下的网络编程是无法避免Richard Stevens的UNP的。但是说实在的,UNP太厚实了,是滴,全面,细腻是很好滴,但是对于初学者们来说,往往更重要的是尽快对socket编程上手,我想基本上只有还算上过《计算机网络》这门课的,对网络基本原理,OSI模型,对TCP/IP基本概念还是有的吧,那么接下来就可以写socket,不一定要写的多好多优雅,考虑多全面,作为初学者,您不能要求自己太高,这并不是浮躁。对于学编程,尤其是定领域技术的编程,我一贯的主张就是要尽快统观全局,对全局的每个部分最关键的概念、编程接口和编程结构有简明但不失深入的了解,我窃称之为:第一阶段。然后我们就有基础和信心去啃大砖头,比如UNP,同时进行深入的实践和调试,这是第二阶段。第三阶段,就是直接上项目吧,也可以去调调开源的代码。
第一阶段,时间最好要控制在3~5天之内,当然像The Definitive Guide to Linux Network Programming(下面简称DGLNP)这样的英文书,还是电子版的,就发挥下传统美德,硬着头皮一周最不济10天看完吧。时间越短越不会遗忘,同时会觉得有阅读的成就感。
第二阶段,就可以搬起UNP来啃了,花多少时间看自己的悟性吧。反正我还在-ing。这时候Stevens那种一丝不苟、细腻推敲、深入浅出,不但可以弥补之前第一阶段留下的知识、经验的漏洞,还可以潜移默化培养我们思维的严谨细腻品质。。。
♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠
上面八卦了。DGLNP就是这样一本适合第一阶段的书,对于网络编程,关键有三:
A. 要理解网络组成原理与体系结构;
B. 要理解协议的特点及各种协议之间的关系/对比;
C. 有了前两个,就要开始熟悉API运用。
DGLNP基本上就是按三个面来写的。A算是最基本的了吧,比如俺们都搞CS的,不会connection-oriented和connectionless的概念都没有吧,不管有没有,作者告我们,Ethernet要懂吧,网络地址要懂吧,TCP/UDP/IP是啥,必须滴…对于B,这本书没特地的讲,而是揉合在C里面一起讲,这也靠谱,其实也简单,说白了就是TCP是面向连接的可靠报文服务,UDP不可靠,它们又都以IP datagram为基础。反映到编程接口(API)上,程序怎么表示这些概念,怎么描述这些不同呢?知道程序的表示法——而不是俺们银类的自然语法描述法——之后,就完全可以大刀长枪搞具体运用了,于是自然而然引入client-server模型了,再挖掘Unix/Linux系统特点——尤其,I/O.....
我喜欢简洁直接,喜欢扼要。尤其是初入门的时候。。当然,话还得说回来,UNIX/Linux 网络编程是“水很深”的东西,所以标题说了,就当是迷你版的UNP吧。任重而道远。程序猿的脚步是不会停的。。。。