python客户端编程
上一篇说了最为底层的用来网络通讯的套接字。有很多基于套接字的一些协议,这些协议构成了当今互联网大多数客户服务器应用的核心
其实这些协议时在套接字上面的进一层封装用来完成特定的应用,这些应用主要包括:
- 文件传输(FTP, SCP 等)
- 阅读Usenet 新闻组(NNTP)
- e-mail 发送(SMTP)
- 从服务器上下载e-mail(POP3, IMAP)等等
这些协议的工作方式与之前在套接字编程中介绍的客户端/服务器的例子很像
因特网客户端??
好吧,之前我们实现了两个机器的通信,那因特网呢?其实我们在因特网这里的网络模型也是按个客户服务器,我想你知道这个是什么了
因特网协议??
socket传递只能是字符串是吧?说起来是TCP UDP协议咩?答案是什么呢?
这里,我们将详细了解三个因特网协议——FTP, NNTP 和POP3,并写出它们的客户端程序。通
过这些程序,你将会发现这些协议的API 是多么的相似——由于保持接口的一致性有很大的好处,
所以,这些相似性在设计之初就考虑到了——更重要的是,你还能学会如何写出这些协议与其它协
议实用的客户端程序来。虽然我们只着重说了这三个协议。在看完这些协议后,你就能有足够的信
心和能力写出任何因特网协议的客户端程序了。
文件传输
因特网中最流行的事情就是文件的交换。文件交换无处不在。有很多协议可以供因特网上传输文件使用。
最流行的有文件传输协议(FTP),Unix-to-Unix 复制协议(UUCP),以及网页的超文本传输
协议(HTTP)。另外,还有(Unix 下的)远程文件复制指令rcp(以及更安全,更灵活的scp 和rsync)
迄今为止,HTTP,FTP 和scp/rsync 还是非常流行的。HTTP 主要用于网页文件的下载和访问Web
服务上。它一般不要求用户输入登录的用户名密码就可以访问服务器上的文件和服务。HTTP 文件传
输请求主要是用于获取网页(文件下载)。
文件传输之FTP
在底层上,FTP 只使用TCP(见前面网络编程相关章节)——它不使用UDP。而且,FTP 是客户
端/服务器编程中很“与众不同”的例子。客户端和服务器都使用两个套接字来通讯:一个是控制
和命令端口(21 号端口),另一个是数据端口(有时是20 号端口)。
协议工作流:
1. 客户端连接远程的FTP 服务器
2. 客户端输入用户名和密码(或“anonymous”和e-mail 地址)
3. 客户端做各种文件传输和信息查询操作
4. 客户端登出远程FTP 服务器,结束通讯
python使用ftp??
我猜你知道了,肯定有什么模块,没错他就是ftplib
好啦,其实如果你有跨网络大量传输文件的需求,完全可以使用python来做,它很简单而且自动化
新闻组nntp协议
去找相应的库吧,对这个协议不感兴趣的
之前有个师兄用它来解决类似于im通信的功能,好了现在来看看这个东西
smtp协议发送邮件与smtplib
邮件发送首先要有邮件服务器的
pop3协议接收邮件与poplib
这里接受的邮件也是要邮件服务器的
一个完整的例子可以参考这里
有了这两个协议就可以开发一个自己的邮件收发客户端了,想想Gmail客户端,outlook客户端
Python 最好的一个方面就是它在标准库中提供了相当的全面的网络支持。尤其在因特网协议和
客户端开发方面的支持更为全面。下面列出了一些相关模块,首先是电子邮件相关的,随后是一般
用途的因特网协议相关的。
email e-mail 处理的包 (也支持MIME)
rfc822 RFC2822 邮件头解析器
smtpd SMTP 服务器
base64 Base 16,32,和64 数据编码(RFC 3548)
mhlib 处理MH 文件夹和信息的类
mailbox 支持mailbox 文件格式解析的类
mailcap “mailcap” 文件的处理模块
mimetools (不建议使用)MIME 信息解析工具(使用上面的email)
mimetypes 在文件名或URL 到相关的MIME 类型之间转换的模块
MimeWriter (不建议使用)MIME 信息处理模块(使用上面的email)
mimify (不建议使用)信息的MIME 处理工具(使用上面的email)
binascii 二进制和ASCII 转换
binhex Binhex4 编码和解码支持
另外这里也列出其他的有关互联网客户端的,可以看到httplib
ftplib FTP 协议客户端
gopherlib Gopher 协议客户端
httplib HTTP 和HTTPS 协议客户端
imaplib IMAP4 协议客户端
nntplib NNTP protocol client
nntplib NNTP 协议客户端
poplib POP3 协议客户端
smtplib SMTP 协议客户端
telnetlib Telnet 协议客户端类
还有之前使用的 suds和soaplib(现在是spyne)
不同的协议其实就是针对不同的问题来解决的
所以这里你或许会有疑问,邮件服务器是怎么实现的呢?
文件服务器怎么用python实现?
也许他们并不用使用python实现
python客户端编程的更多相关文章
- python web编程-CGI帮助web服务器处理客户端编程
这几篇博客均来自python核心编程 如果你有任何疑问,欢迎联系我或者仔细查看这本书的地20章 另外推荐下这本书,希望对学习python的同学有所帮助 概念预热 eb客户端通过url请求web服务器里 ...
- python网络编程socketserver模块(实现TCP客户端/服务器)
摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...
- python网络编程socket编程(TCP、UDP客户端服务器)
摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- python web编程-概念预热篇
互联网正在引发一场革命??不喜欢看概念的跳过,注意这里仅仅是一些从python核心编程一书的摘抄 这正是最激动人心的一部分了,web编程 Web 客户端和服务器端交互使用的“语言”,Web 交互的标准 ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- 【Python千问 1】Python核心编程(第二版)导读
第一章 欢迎来到Python世界 什么是Python Python的起源 Python的特点 下载Python 安装Python 运行Python Python文档 比较Python(与其它语言的比较 ...
随机推荐
- POJ 3728
http://poj.org/problem?id=3278 题目大意就是在同一坐标轴上给你一个人的坐标,一个牛的坐标,而人的运动每一次运动有三种方式,一种是后退1,一种是前进1,还有一种是坐标翻倍, ...
- javax.imageio.IIOException: Can't create cache file!
javax.imageio.IIOException: Can't create cache file! at javax.imageio.ImageIO.createImageInputStream ...
- Unity3d 保存和使用地形高度
TerrainHeightProcesser 地形高度存储工具 TerrainHeightData 地形高度数据 // class TerrainHeightProcesser using Unity ...
- ios 引入第三方库 运行时找不到函数实现
今天引入webtrends 这个库,结果一直运行时找不到函数,纳闷了一下午! 后来发现,是other flag没有设置对,对于那些包含category用来扩展ios原始类型的库,链接的时候需要特别的链 ...
- sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
启动SQL Server 2008 Management Studio 工具菜单----选项----Designers(设计器)----阻止保存要求重新创建表的更改 取消勾选即可.
- vs2010:fatal error LNK1123: 转换到 COFF 期间失败
解决方法: 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”.
- 在DB2 for z/os上创建指定pagesize的数据库
ASNTDIFF的diff table有一列类型为varchar 15000,z上创建db默认的pagesize是4K,无法创建table,所以需要创建一个大pagesize的database. db ...
- Android单元测试
安卓单元测试总结文章,目测主要会cover以下的主题: 什么是单元测试 为什么要做单元测试 JUnit Mockito Robolectric Dagger2 一个具体的app例子实践 神秘的bonu ...
- jquery学习笔记-----ajax
$(selector).load( url [,date] [,callback] ) url:请求页面的url地址 date:发送至服务器的key:value数据 callback:请求完成时的回调 ...
- MVC – 7.Razor 语法
7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName=&quo ...