基本信息
- 原书名:Effective TCP/IP Programming: 44 Tips to Improve Your Network Programs
- 原出版社: Addison-Wesley Professional
【插图】

编辑推荐
历久弥新的经典著作
揭示健壮网络程序的秘密
网络编程人员必备
内容简介
作译者
陈涓 1997年毕业于南京通信工程学院,获得通信与信息系统方向硕士学位。留校任教至今,从事网络应用方面的工作。
赵振平 1998年毕业于南京大学计算机科学系,获得操作系统和网络方向硕士学位。目前任职于南京信风软件有限公司(www.greatbit.com),从事网络安全和多媒体方面的工作。
目录
第1章 概述 1
1.1 几个约定 1
1.2 本书其余部分的内容介绍 2
1.3 客户端—服务器结构 4
1.4 对基本套接字API的回顾 5
1.5 小结 12
第2章 基本概念 13
2.1 技巧1:理解面向连接和无连接协议之间的区别 13
2.2 技巧2:理解子网和CIDR的概念 18
2.2.1 分类编址 18
2.2.2 子网划分 21
2.2.3 CIDR 26
2.2.4 子网划分和CIDR的状态 27
2.2.5 小结 27
2.3 技巧3:理解私有地址和NAT 28
2.4 技巧4:开发并使用应用程序“框架” 30
2.4.1 TCP服务器框架 31
2.4.2 TCP客户端框架 36
2.4.3 UDP服务器框架 38
译者序
TCP/IP是因特网的核心协议,它最流行的编程接口是套接字。应用程序通过套接字可以很容易地进行网络通信。然而,实际的程序在运行时,常会碰到各种各样的性能和连通性方面的问题。如果对网络协议的底层运作细节没有深入的了解,就会被这些问题所困扰,难以开发出高效和稳健的应用程序。
Jon C. Snader的这本书是深入学习TCP/IP网络编程的必备书籍。通过一个个独立的技巧,本书对网络编程中可能碰到的各种微妙问题一一进行了深入的分析和阐释,并提供了很多可以方便扩展的实例代码。有些复杂的问题还在多个技巧中反复提起,从多种角度帮助读者加深理解。本书还对解决联网问题的常用工具进行了精要的介绍,帮助读者利用工具提高分析和解决联网问题的能力。
如今的编程工作除了靠埋头苦干,还要充分利用网络带来的便利,学习和利用世界上其他编程人员的优秀成果,避免毫无意义的重复劳动,切不可闭门造车或重蹈覆辙。本书最后的阅读代码技巧中,对网络和操作系统方面的可以公开获得的优秀书籍和开源项目进行了梳理,旨在帮助读者找到适宜的学习目标,从而少走弯路,加快学习和成长的速度。
本书适用读者范围广泛,对有一定网络编程基础和经验丰富的工程师都具有很高的参考价值。我自身虽然具有多年网络编程教学和产品开发方面的实践经验,但在翻译本书的过程中也学习和完善了很多知识。
IT技术发展迅猛,许多书籍很快就会过时。而本书的英文原版虽然出版于2000年,但它是作者长期分析实践总结出的真知灼见,如今看来,它不但没有过时,还将会伴随TCP/IP体系的进一步发展,产生深远的影响。
陈涓
2011年1月
前言
因特网、无线通信以及联网技术总体上的爆炸性发展,使得编写联网应用程序的程序员和工程师的数量也在激增。TCP/IP编程看起来很容易,因而很有诱惑力。API(Application Programming Interface,应用编程接口)也很易懂,即使是超级新手也可以把客户端或服务器模板充实为能够工作的应用程序。
但是,在最初的生产率激增之后,新手们往往会陷入细节的泥沼之中,并发现自己的应用程序饱受性能及健壮性问题的困扰。网络编程过程中的黑暗角落和易误解的地方比比皆是。本书就像一盏明灯照亮了这些角落,并通过对TCP/IP编程中一些微妙问题的解释来帮助大家纠正了很多错误的理解。
看完本书之后,你会透彻地理解网络编程中的许多问题。书中讨论了很多看起来好像与一个网络程序员所需掌握的核心知识只有一些外围联系的内容。但我们会看到,理解了这些细节问题,就可以帮助我们更好地理解网络协议的内部运作机制是怎样与应用程序进行交互的。有了这种洞察力,原来看起来让人困惑的程序行为就会变得很好理解,怎么解决问题也就很明显了。
本书的组织方式有些与众不同,我们将一些常见问题组织成一系列的技巧,每个技巧讨论一个问题。在讨论特定问题的过程中,通常会对TCP/IP编程的某些方面进行深入的研究。完成对特定问题的讨论之后,我们不仅能够掌握这些常见问题的特点和解决方案,还会对TCP/IP协议是怎样工作的,以及它如何与我们编写的应用程序进行交互有相当全面的理解。
将内容以技巧的形式组织起来会显得不够连贯,为了便于理解,第1章提供了相应的内容介绍,对每章涵盖的技巧以及这些技巧之间的联系进行了说明。目录中列出了每一个技巧,可以从中看出正文的组织结构。每个技巧的标题都是祈使句,因此也可以把目录当作网络编程的规则来用。
从另一方面来看,将内容以技巧的形式组织起来,使本书更像一本实用而又方便查阅的手册。在日常工作中遇到问题时,可以很方便地去重温其中的技巧,加深对特定问题的理解。你会发现很多话题都会在多个技巧中提到,有时只是换个角度来讨论。这种重复有助于巩固概念,让你对它们达成更自然的理解。
读者对象
本书主要是面向有一定经验的初学者或中级网络程序员,但经验更丰富的读者会发现本书也是很有用的。我们假设读者熟悉联网知识,以及基本的套接字API,但第1章也对基本的套接字调用进行了复习,并用它们构建了初级的客户端和服务器。技巧4更详细地介绍了各种客户端和服务器模型。因此,哪怕只具有少量背景知识的读者也能理解本书,并从中获益。
由于所有的示例基本上都是用C语言编写的,因此要看懂本书的程序,至少需要有基本的C语言编程经验。技巧31展示了一些用Perl编写的例子,但并不需要读者掌握Perl的知识。类似地,还有几个小的shell程序示例,理解它们同样也不需要有shell编程的经验。
本书所有示例和内容都争取做到独立于平台。除了少数几个例子之外,其他示例都可以在任何UNIX或Win32系统中编译并运行。即使那些没有工作在UNIX或Windows系统下的程序员,要把这些例子移植到他们所使用的平台上去也应该不会有什么问题。
排版约定
在探讨技巧的过程中,我们会构建并运行很多小程序,设计这些小程序是为了从不同方面来说明问题。在显示交互式输入输出时,会使用下列约定:
输入的文本被设置为粗体的Courier;
系统输出的文本被设置为标准的Courier;
非实际输入或输出的注释内容,用楷体表示。
下面是技巧9中的一个例子。
bsd: $ tcprw localhost 9000
hello
received message 1 延迟5秒之后打印此消息
媒体评论
─—Uri Raz,TCP/IP专家、资深网络工程师
“本书可以跟Stevens的书互为补充。书中的内容可以用言简意赅来形容,作者在如此少的篇幅中讨论了那么多TCP/IP开发的知识点,真是令人惊叹不已。它特别适合偶尔做做相关开发,而不愿意啃大部头著作的程序员。”
─—亚马逊读者评论
“谢天谢地,本书帮我解决了在一个大型公司级网络编程项目中遇到的所有难题!它不仅教会了我使用各种网络编程工具,而且更重要的是让我以前那些模糊的认识都得到了澄清。好书,快看,马上学以致用吧!”
─—W. J. Vovil “Wayne”,程序员