上一篇说了最为底层的用来网络通讯的套接字。有很多基于套接字的一些协议,这些协议构成了当今互联网大多数客户服务器应用的核心
其实这些协议时在套接字上面的进一层封装用来完成特定的应用,这些应用主要包括:
- 文件传输(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实现