python基础教程总结13——网络编程,

1.网络设计模块

1.1 socket模块

根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

  1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

  2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套    接字的地址和端口号,然后就向服务器端套接字提出连接请求。

  3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户     端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

  在网络编程中的一个基本组件就是套接字(socket)。套接字主要是两个程序之间“信息通道”。程序可能(通过网络连接)分布在不同的计算机上,通过套接字相互发送信息。在Python中的大多数的网络编程都隐藏了socket模块的基本细节,并且不直接和套接字交互。

  套接字包括两个:服务器套接字和客户端套接字。创建一个服务器套接字后,让它等待连接。这样它就在某个网络地址处(ip地址和一个端口号的组合)监听。处理客户端套接字通常比处理服务器套接字容易,因为服务器必须准备随时处理客户端的连接,同时还要处理多个连接,而客户端只是简单的连接,完成事务,断开连接。

  一个套接字就是一个socket模块中的socket类的实例。有三个参数:

    第一个是地址族(默认是socket.AF_INET);

    第二个参数是流(默认是socket.SOCK_STREAM,默认值)或数据报(socket.SOCK_DGRAM)套接字;

    第三个参数是使用的协议(默认是0,使用默认值即可)。对于一个普通的套接字,不需要提供任何参数。

  服务器端套接字使用bind方法后,再调用listen方法监听这个给定地址。客户端套接字使用connect方法连接到服务器在connect方法中使用的地址与bind方法中的地址相同。在这种情况下,一个地址就是一个格式为(host,port)的元组,其中host是主机名,port是端口号。Listen方法只有一个参数,即服务器未处理的连接的长度。

  服务器套接字开始监听后,它就可以接受客户端的连接。这个步骤使用accept方法来完成。这个方法会堵塞(等待)直到客户端连接,然后该方法就返回一个格式为(client,address)的元组。服务器能处理客户端到它满意的程度,然后调用一个accept方法开始等待下一个连接。这个过程通常都是在一个无限循环中实现的。

  套接字有两个方法:send和rev,用于传输数据。可以使用字符串参数调用send以发送数据,用一个所需的(最大)字节数做参数调用recv来接收数据。如果不能确定使用哪个数字比较好,那么1024是个很好的选择。

 1 #小型服务器
 2 import socket
 3 s=socket.socket()
 4 host=socket.gethostname()
 5 port=1234
 6 s.bind((host,port))
 7 s.listen(5)
 8 while True:
 9     c,addr = s.accept()
10     print "Got connect from",addr
11     c.send(‘tkx for connecting‘)
12     c.close()
13
14
15 #小型客户端
16
17 import socket
18 s=socket.socket()
19 host=socket.gethostname()
20 port=1234
21 s.connect((host,port))
22 print s.recv(1024)

1.2 urllib和urllib2模块

  在能使用的各种网络工作库中,功能最强大的是urllib和urllib2。它们能让通过网络访问文件,就像那些文件存在于你电脑上一样。通过一个简单的函数调用,几乎可以把任何URL所指向的东西用作程序的输入。这两个模块功能差不多,但urllib更好一些。如果只使用简单的下载,urllib就足够了。但如果需要使用HTTP验证或cookie或者要为自己的协议写扩展程序的话,urllib2是个好的选择。

1)打开远程文件

#打开远程文件
>>> from urllib import urlopen
>>> webpage=urlopen("http://blog.csdn.net/signjing")

  Urlopen返回的类文件对象支持close、read、readline和readlines方法,当然也支持迭代。

2)获取远程文件

  函数urlopen提供一个能从中读取数据的类文件对象。如果希望urllib为你下载文件并在本地文件存在一个文件的副本,那么可以使用urlretrieve。

Urlretrieve返回一个元组(filename,headers)而不是类文件对象,filename是本地文件的名字(由urllib自动创建),headers包含一些远程文件的信息。

>>> import urllib
>>> urllib.urlretrieve(‘http://www.baidu.com‘,‘d:\\baidu.html‘)
(‘d:\\baidu.html‘, <httplib.HTTPMessage instance at 0x02BFC788>)

  如果没有指定文件名,文件会放在临时的位置,用open函数可以打开它。完成了对它的操作,就可以删除它以节省空间,要删除临时文件,可以用urlcleanup函数,不需要提供参数。

1.3 其他模块


模块


描述


asynchat


asyncore的增强版本


asyncore


异步套接字处理程序


cgi


基本的CGI支持


Cookie


Cookie对象操作,主要用于服务器


cookielib


客户端cookie支持


email


Email消息支持


ftplib


FTP客户端模块


gopherlib


gopher客户端模块


httplib


http客户端模块


imaplib


imap4客户端模块


mailbox


读取几种邮箱的格式


mailcap


通过mailcap文件访问MIME配置


mhlib


访问MH邮箱


nntplib


NNTP客户端模块


poplib


pop客户端模块


robotparser


支持解析web服务器的robot文件


SimpleXMLRPCServer


一个简单的xml-rpc服务器


smtpd


smtp服务器端模块


smtplib


smtp客户端模块


telnetlib


telnet客户端模块


urlparse


支持解释url


xmlrpclib


xml-rpc的客户端支持

2. SocketServer

  SocketServer模块是标准库中很多服务器框架的基础。SocketServer包含了4个基本的类:针对TCP套接字流的TCPServer;针对UDP数据报套接字的UDPServer;以及针对性不强的UnixStreamServer和UnixDatagramServer。

3. 多连接

  到目前为止讨论的服务器解决方案都是同步的:即一次只能连接一个客户端并处理它的请求。怎么样同时处理多个连接呢?

  三种方法:分叉(forking)、线程(threading)以及异步I/O(asynchronous I/O)。

4. Twisted

  Twisted是一个事件驱动的python网络框架,原来是为网络游戏开发的,现在被所有类型的网络软件使用。

时间: 2024-11-04 18:42:37

python基础教程总结13——网络编程,的相关文章

第八篇:python基础_8 面向对象与网络编程

本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度. (2)归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合. 2.模拟接口 #!/usr/bin/env pyhon #encoding: utf-8 #auth: yanglei class Interface: #定义接口Interface类来模

《python基础教程第三版》高清版PDF免费下载

Python基础教程 第3版Python简明教程书籍 Python编程从入门到实践 灵程序设计丛书 下载地址:网盘下载 编辑推荐 久负盛名的Python入门经典 中文版累计销量200 000+册 针对Python 3全新升级 本书是经典的Python入门教程,层次鲜明.结构严谨.内容翔实,特别是后面几章,作者将前面讲述的内容应用到10个引人入胜的项目中,并以模板的形式介绍了项目的开发过程,手把手教授Python编程实践,让读者从项目中领略Python的真正魅力. 本书既适合初学者夯实基础,又能帮

Python基础教程(第3版)(高清中文版PDF+高清英文版PDF+源代码)下载 &#72059;

下载地址: http://www.gqylpy.com/di/19 Python基础教程 第3版Python简明教程书籍 Python编程从入门到实践 灵程序设计丛书 <python基础教程第三版>高清版PDF下载 包含高清中文版PDF,英文版PDF,中英对照看,效果更佳! 编辑推荐 久负盛名的Python入门经典 中文版累计销量200 000+册 针对Python 3全新升级 本书是经典的Python入门教程,层次鲜明.结构严谨.内容翔实,特别是后面几章,作者将前面讲述的内容应用到10个引人

Python基础教程(第十四章 网络编程)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5538341.html______ Created on Marlowes 本章将会给读者展示一些例子,这些例子会使用多种Python的方法编写一个将网络(比如因特网)作为重要组成部分的程序.Python是一个很强大的网络编程工具,这么说有很多原因,首先,Python内有很多针对常见网络协议的库,在库顶部可以获得抽象层,这样就可以

python基础教程_学习笔记24:网络编程、Python和万维网

网络编程 python是一个很强大的网络编程工具,首先,它有很多针对常见网络协议的库,在库顶部可以获得抽象层,这样可以集中精力在程序的逻辑处理上,而不是停留在网络实现的细节上:其次,python处理字节流的各种模式方面很擅长,因此可以轻松处理各种协议格式. 少数几个网络设计模块 socket模块 在网络编程中的一个基本组件就是套接字(socket).套接字主要是两个程序之间"信息通道".程序可能(通过网络连接)分布在不同的计算机上,通过套接字相互发送信息.在Python中的大多数的网络

python基础教程_学习笔记26:好玩的编程

好玩的编程 程序设计的柔术 当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验.在实现功能的时候,会逐渐地学到对原始设计有用的新知识.不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中. 灵活性的实现包括许多方面,下面是其中两个: 原型设计:python最棒的功能之一就是可以快速地编写程序.编写原型程序是更充分地了解问题的一种很好的方法. 配置:灵活性有很多种存在形式.配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样. 第三点是

python基础教程_学习笔记13:标准库:一些最爱——sys

标准库:一些最爱 sys sys这个模块让你能够访问与python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描述 argv 命令行参数,包括脚本名称 exit([arg]) 退出当前程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 类似sunos5或者win32的平台标识符 stdin 标准输入流--一个类文件对象 stdout 标准输出流--一个类文件对象 stde

《Python编程从入门到实践》+《流畅的Python》+《Python基础教程(第3版)》分析对比

<Python编程从入门到实践>针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用Python 编程所必须了解的基本概念,包括matplotlib.NumPy 和Pygal 等强大的Python 库和工具介绍,以及列表.字典.if 语句.类.文件与异常.代码测试等内容:第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python 2D 游戏开发如何利用数据生成交互式的信息图,以及创建和定制简单的Web 应用,并帮读者解决常见编程问题和困惑. <

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包