含有章节索引的中文 文章模板

::-- albertlee [2005-02-25 12:50:32]

1. Python网络编程

1 简介

现今的软件世界,“网络编程”是一个很有分量的词。我们看到市场上像雪崩一般充斥了各种面向网络的应用,像数据库服务器、游戏、Java Servlet/Applets、CGI脚本、各种不同的客户端程序以及各种所能想到的协议,这些例子将继续增加。现在市场上超过半数的应用都是面向网络的。在两台机器间(局域网或因特网)进行数据通信已经不再只是个兴趣,已经日益变得现实起来。SUN公司的座右铭:“网络就是计算机”说的没错。计算机已经不再被看作只是和操作者对话的分开的实体,而是被当成一个大系统的一部分-网络,通过数据与数以千万的其他机器相连。

这份文档讲述使用Python设计面向网络的应用程序的方法。因为它的原作者是一个Linux爱好者,文档中的例子都是在Linux下,所以对可能造成的不方便向Windows 或 MacOS读者致歉。(译者注:我会尽量在三个平台都测试这些例子,包括MacOS X,其实Apple电脑是Python最早的实现平台)。只要花一点力气就可以将这些例子程序移植到非Unix系统上。简述一下本文的结构:前四节处理原始网络程序的设计,socket层(译者注:我不喜欢“套接字”这个翻译,真是难听)。剩下几节论述各种协议,像 http,ftp,telnet,smtp。讲述http的部分将包含编写CGI脚本及cgi模块的使用的部分。

在继续探讨实际的主题,我们将分析Python提供的网络编程支持。在Python中通过socket模块实现了原始的网络支持,这个模块主要是由系统调用、4.3BSD进程通信中定义的常数及函数组成,使用面向对象风格实现。Python提供了一个简单的接口来正确的创建和使用socket,比C语言的实现要简易很多。主要是定义了 socket() 函数来返回一个 socket对象。socket有几个函数与C语言中的 sys/socket.h相对应,如bind(), connect(),listen 和 accept()。习惯了使用C语言编写socket程序的程序员会发现在Python下更加容易使用socket。Python消除了很多使用socket时令人“畏惧”的工作,如填充 sockaddr_in 或 hostent结构,简化了前面提到的各个函数的使用,参数的传递以及函数调用都更容易处理。也提供了一些面向网络的函数:gethostbyname(), getprotobyname(),以及转化函数 ntohl(), htons()可以方便从整数与网络格式间转换。socket模块提供了 SOMAXCONN, INADDR_*等常量,用与 getsockopt()或setsockopt()函数。上面提到的常量的完整列表可以在你的UNIX文档中关于socket实现部分找到。

除了socket模块之外,Python在用户层还提供了附加的模块来支持最常见的网络协议。我们可以找到很有用的httplib, ftplib, telnetlib, smtplib等模块。有一个 cgi模块支持CGI脚本,有URL解析的模块,通过类来描述的Web服务器,以及其他实例。这些模块完美的实现了常见的协议,鼓励用户使用他们而不要“重新放明轮子”。 作者希望使用者能够享受Python提供的丰富的网络编程工具,并用更新更激动人心的方式使用它们。

因为下面所有的实例程序都是用Python编写,读者应该能较流利的阅读Python语言。

(2005/2/25 20:40 翻译初稿)