本书全面介绍了使用Python语言进行网络编程的基础知识,主要内容包括网络基础知识、高级网络操作、Web Services、解析HTML和XHTML、XML、E-mail服务、FTP、使用Python操作数据库、SSL、几种服务器端框架(包括Socket服务器、SimpleXMLRPCServer、CGI和mod_python),以及多任务处理(包括Forking、线程和异步通信)等。本书实用性强,共提供了大约175个实例,6600行以上的代码,是帮助读者全面而快速地学习Python语言、编写网络程序的最佳实践。\r\n 本书可以作为各层次Python、Web和网络程序的开发人员的参考书,在实际工作中使用书中的技术,效果更佳。
关于作者\r\n关于技术审校\r\n致谢\r\n简介\r\n第1部分 底层网络\r\n 第1章 客户/服务器网络介绍\r\n 第2章 网络客户端\r\n 第3章 网络服务器\r\n 第4章 域名系统\r\n 第5章 域名系统\r\n第2部分 Web Service\r\n 第6章 Web客户端访问\r\n 第7章 解析HTML和XHTML\r\n 第8章 XML和XML-RPC\r\n第3部分 E-mail服务\r\n 第9章 E-mail的编写和编码\r\n 第10章 简单邮件传输协议(SMTP)\r\n 第11章 POP\r\n 第12章 IMAP\r\n第4部分 多用途的客户端协议\r\n 第13章 FTP \r\n 第14章 数据库客户端\r\n 第15章 SSL \r\n第5部分 服务器端框架\r\n 第16章 SocketSever\r\n 第17章 SimpleXMLRPCServer\r\n 第18章 CGI \r\n 第19章 Mod_python\r\n第6部分 多任务处理\r\n 第20章 forking\r\n 第21章 线程\r\n 第22章 异步通信\r\n索引
John Goerzen从1996年开始就是Debian GNU/Linux操作系统开发组的成员,最近15年他一直都在从事软件开发方面的工作。他对操作系统、程序语言和网络都很感兴趣,并且在工作中也开发并用到以上这些方面的各种软件。目前,他在一个中等规模的制造公司中担当程序员和Unix管理员,并且已经使用Python开发了很多用于公司数据系统的接口。
作为Debian工作组成员,John为系统维护了很多不同的程序。从1998年开始,他就致力于启动或向新的体系结构扩展Debian,并在Alpha、PowerPC、AMD64和NetBSD i386上取得了很大的成就。
2003年,John被选进了Software in the Public Interest(SPI)的董事会。这个公司负责管理Debian在法律和财务上的事务。同年晚些时候,他被任命为SPI的副会长。
除作为Debian工作组成员之外,John还用了大量的时间写软件。在他众所周知的作品中,有两个是用Python写的网络激活程序。OfflineIMAP是一个双向的邮件同步程序,而PyGoDherd是一个多协议的Web和Gopher服务器。这两个软件都用Python独有的特性来支持模块体系结构,并且提供了很好的灵活性。
John还写了很多书,包括那本800页的《Linux Programming Bible》。他还经常为杂志撰写文章,同时还是很多书的技术编辑。他还建立了Air Capital Linux用户组,并经常在组里演讲。
25年前,世界和现在是完全不同的。很少人能有机会和大洋彼岸的人谈话。寄一封信需要好几周的时间。收听外国的短波新闻广播除了需要专门的技术和耐心外,还要非常好的气候条件。
而今天,收到来自韩国的Email,查看加利福尼亚的天气,以及阅读德国当天的头条新闻对我们来说都是很平常的事情,而且都可以在五分钟之内完成。压缩文件并在互联网上传输使得我们可以做很多事情,从管理投资账户到观看远房亲戚的照片。
尽管Internet已经有25年的历史了,但是它还是处在幼年阶段。作为一种新技术,它还在逐渐成长。
我写这本书的原因是因为Internet是那么的让人兴奋。在过去的几年中,我们看到了整个行业的增长,而这些是以前没有的。同时互联网也是产生大量发明家的地方。
而且这也是我希望您从本书获得的。我希望这本书能成为您的实验手册――即您为了使Internet更美好而进行发明创造的指南。
本书的结构
本书共分五个部分。第一部分介绍了Internet是如何工作的。您将学习Internet通讯的基础。通过例子您还将学习到编写您自己的程序要用到的一些基本工具。
第二部分主要讲基于Web的服务方面的知识。第三部分主要讲和Email服务有关的知识。在Web或Email通讯中使用了很多新的技术。在这两部分内容中,介绍了如何使用这些新技术来编写程序。
第四部分介绍了其它一些技术,例如:数据库和文件传输。它们经常运行在网络程序的后台。您的用户也许永远都不知道您使用了这些技术,但是它们的确是您工具箱中重要的工具。
第五部分介绍了如何编写服务器程序,这些应用程序可以回应请求并给出信息。您也许永远不用写一个服务器程序,但是如果您正为一个新的协议打草稿的话,您将需要这些技术。
最后,第六部分向您展示了如何同时做多件事情。有些网络程序员也许永远都不会用到这些技术。但是对于一些服务器的设计者来说,没有这些技术是万万不行的。
假定
对于本书的读者,我假定您已经具有一定的Python知识。如果您没有,我建议您学习Apress出版的,由Magnus Lie Hetland编著的《Practical Python》。
我还假定您的机器上安装了Python 2.3或更高的版本,并且具有网络编程的部分。如果您的机器上没有安装Python,请检查您的操作系统以及它的安装包,因为有的操作系统本身就带有Python。否则您可以从www.python.org下载Python的源文件和安装程序。
最后,我还假定您的机器是和互联网相连的(尽管这个连接或许不是您自己配置的)。此外,阅读本书,您不需具备任何互联网协议的知识。
例子
本书包含很多例子。您可以从Apress的站点www.apress.com下载。我建议您试着运行所有的例子。其中有些例子完全可以作为您自己程序的起点。而绝大多数的例子都是完整的,可以直接运行的程序。您可以自己查看运行的结果。
我还会经常向您演示一些程序的交互运行结果。当看到这样例子的时候,黑体字表示需要通过键盘输入的内容。当看到计算机命令的时候,“$”表示操作系统的命令提示符。
网络程序对操作系统的网络支持情况是非常依赖的。操作系统提供了和其它计算机通信的所有基础。这里有一些针对不同操作系统的注释。
技巧:如果您在运行例子的时候遇到任何问题,请翻阅本章中的这些注释。有些例子并不是能在所有的操作系统上运行的。
Linux、FreeBSD、Mac OS X、Solaris和其它 UNIX操作系统
所有的例子都假设您已经在系统路径上安装了Python解释器,并且是以Python命名的。还假设您的/usr/bin/env程序是有效的。每一个可运行的Python程序的第一行都是以#!开始的,这可以告诉操作系统去哪里找Python解释器来运行您的程序。如果所有的例子都不能运行,那就是说明Python没有安装或者系统找不到它。可以试着把#!后面的代码换成您机器上Python解释器的绝对路径。
同时,所有要运行的程序必须具有可执行的权限。如果当您运行某个程序的时候,系统提示有关权限的问题,请运行诸如 chmod 0755 scriptname.py 的命令来使该文件具有可执行的权限。
如果是其它任何错误,您则可以手动运行Python解释器。即运行 python scriptname.py 来调用这个程序,而不是运行 ./scriptname.py 。
在本书中,如果我提到Linux/UNIX平台,我的意思就是任何类似UNIX的操作系统,也包括Mac OS X。任何早于OS X的Mac操作系统,都不在本书的讨论范围之内。
Windows操作系统
Windows操作系统并不支持Linux/UNIX平台中的,用于程序第一行的的#!方法。所以在Windows操作系统中不能用 ./scriptname.py 这种方式来执行程序。只要您看到类似 ./scriptname.py这样的指令,请用 python scriptname.py 来替换。
还有一些Linux/UNIX平台特有功能是Windows操作系统不具备的(或者说,有些情况下Python不能提供象在Linux/UNIX平台上提供的功能)。明显的例子是第3章中介绍的inetd类型的服务器(inetd-style server),第20章中介绍的forking,还有第22章中介绍的部分关于异步通信(asynchronous communication)的内容。然而在这些案例中,我们介绍的技术仅仅是多种解决方法的一种。您完全可以通过另外一种不同的方法来解决同样的问题。在这些章节的注释中,您将看到这些替换的方法。
Python有很多不同的Windows版本。标准的版本来自www.python.org的。但是它也并不是能完成所有的任务,而且有的版本还有一些和网络编程有关的错误(Bug)存在。另外一个常用的版本是ActivePython,可以从www.activestate.com得到。无论使用那种版本,如果遇到一些意料之外的问题,您可以试着换用其它的版本。
有些具有Linux/UNIX背景的读者可能想试一下Cygwin。可以从www.cygwin.com 得到。它为Windows操作系统提供了一个类似Linux的环境,而这种情况下,需要从www.python.org 下载Python源文件,经过编译后才能使用。
其它有用的资源
您也许会遇到一些特殊方面的问题,这里有一些网络上的资源或许能帮上忙:
正式的Internet协议标准,也叫RFC(Request for Comments)文档,您可以在www.rfc-editor.org 和 www.faqs.org 上找到。
对于Python方面的文档,在www.python.org/doc 上的《Python模块参考》(Python module reference)是非常有用的。
而当您遇到问题的时候,comp.lang.python新闻组是一个很好的提出问题和寻找答案的地方。详细情况,请访问www.faqs.org/faqs/python-faq/python-newsgroup-faq/ 。该网页上还介绍了如果没有新闻组软件(Usenet news access),如何用Email来参与讨论。
您的操作系统开发文档也会提供一些底层的网络操作和网络配置的信息。
反馈
我很乐意收到您的来信。欢迎提出您对本书的意见和建议。我的Email是 jgoerzen+pynet@complete.org。尽管我会阅读所有的Email,但是请原谅我没有时间一一回复,所以请千万不要因为没有收到我的回信而生气。
无封面