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是个很好的选择。

 #小型服务器
import socket
s=socket.socket()
host=socket.gethostname()
port=
s.bind((host,port))
s.listen()
while True:
c,addr = s.accept()
print "Got connect from",addr
c.send('tkx for connecting')
c.close() #小型客户端 import socket
s=socket.socket()
host=socket.gethostname()
port=
s.connect((host,port))
print s.recv()

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网络框架,原来是为网络游戏开发的,现在被所有类型的网络软件使用。

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

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

    本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了 ...

  2. python基础(七)——网络编程

    服务端 我们使用 socket 模块的 socket 函数来创建一个 socket 对象.socket 对象可以通过调用其他函数来设置一个 socket 服务. 现在我们可以通过调用 bind(hos ...

  3. Python 基础教程 —— 网络爬虫入门篇

    前言 Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言,它由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年.自面世以后,Pytho ...

  4. 学习参考《Python基础教程(第3版)》中文PDF+英文PDF+源代码

    python基础教程ed3: 基础知识 列表和元组 字符串 字典 流程控制 抽象(参数 作用域 递归) 异常 魔术方法/特性/迭代器 模块/标准库 文件 GUI DB 网络编程 测试 扩展python ...

  5. Python基础教程(第2版 修订版) pdf

    Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...

  6. Python基础教程(第3版)PDF高清完整版免费下载|百度云盘

    百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...

  7. python基础教程(一)

    之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...

  8. Python 基础教程

    Python 基础教程 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像P ...

  9. (Python基础教程之二十二)爬虫下载网页视频(video blob)

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

随机推荐

  1. 《精通Spring4.X企业应用开发实战》读后感第五章(装配Bean,依赖注入)

  2. day4 DOM,BOM

    1.     BOM编程 1.1. BOM编程基础 全称 Browser Object Model,浏览器对象模型. JavaScript是由浏览器中内置的javascript脚本解释器程序来执行ja ...

  3. Eclipse下对maven进行配置

    前提:安装好maven插件http://www.cnblogs.com/lchzls/p/6281697.html 1.需要修改配置:首先选择Window->Preferences,弹出如下对话 ...

  4. HTML页面弹出窗口调整代码总结

    弹出跟你当前的窗口有没有菜单工具栏没有关系,你只要在页面中写一个脚本它就弹出了.比如<a href=# onclick="window.open('xxx.aspx','窗口名称',' ...

  5. 交叉编译调试qemu_guest_agent

    Winodws版本 编译环境Fedora23 下载VSS SDK的setup.exe 下载地址 提取VSS SDK头文件 将下面的代码保存成extract-vsssdk-headers.sh脚本,然后 ...

  6. 多行文字超出字数部分省略(主要解决不兼容;display: -webkit-box;的浏览器)

    注明:内容来处https://www.cnblogs.com/ss977/p/5846176.html 1.现webkit内核的浏览器支持display: -webkit-box;属性, 所以网页中显 ...

  7. JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime` from String

    在使用Postman测试Spring Boot项目接口时,接口返回JSON parse error: Cannot deserialize value of type `java.time.Local ...

  8. uoj#386. 【UNR #3】鸽子固定器(乱搞)

    传送门 题解 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define fp(i ...

  9. IT兄弟连 Java语法教程 编写Java源代码

    现在我们来一步一步的编写第一个Java程序,鼎鼎大名的“HelloWorld”. 编写Java源代码 编写Java源代码可以使用任何无格式的文本编辑器,在Windows操作系统上可以使用记事本.Edi ...

  10. 用户唯一性验证(ajax)

    验证用户添加或者修改时用户名的唯一性: 验证时机:用户名改变时,表单提交时. 1.jsp页面:(前端) <%@ page contentType="text/html;charset= ...