简介
底层网络通信协议使用的是套接字,当我们需要进行文件传输、阅读、发送接收电子邮件时,使用的协议与套接字的客户端/服务器端相似,唯一去的区别在于使用TCP/IP这样的底层的协议创建了新的、有专门用途的协议,以此来实现刚刚介绍的服务。
文件传输
文件传输因特网协议
包括:
- 文件传输协议FTP,需要登录,但可以匿名登录
- UNIX到UNIX复制协议UUCP
- 用于web的超文本传输协议HTTP,不需要登录
- UNIX下的远程文件复制命令rcp(以及更安全更灵活的scp和rsync),需要登录
文件传输协议FTP
主要用于匿名下载公共文件,也可用于两台计算机之间传输文件。FTP要求输入用户名和密码才能访问远程FTP服务器,但也允许用户匿名登录,匿名登录的用户名为“anonymous”,密码一般是用户的电子邮件地址。匿名登录只能使用有限的几个FTP命令。
工作流程如下:
- 客户端连接远程主机上的FTP服务器
- 客户端输入用户名和密码(或“anonymous”和电子邮件地址)
- 客户端进行各种文件传输和信息查询操作
- 客户端从远程FTP服务器退出,结束传输
在底层,FTP只使用TCP,而不使用UDP。客户端和服务器都使用两个套接字来通信:一个是控制和命令端口(21号端口),另一个是数据端口(有时候是20号端口)。
之所以说是有时候,是因为FTP有两种模式:主动和被动。主动模式下,服务器才使用20号端口为数据端口,并“主动”连接客户端的数据端口。在被动模式下,服务器只是告诉客户端随机的数据端口号,客户端必须主动建立数据连接。
Python和FTP
导入ftplib模块→实例化一个ftplib.FTP对象。所有的FTP操作都使用这个对象完成。
方法 | 描述 |
---|---|
login(用户名,密码等) | 登录ftp服务器 |
pwd() | 获得当前工作目录 |
cwd(路径) | 设置当前工作目录 |
dir(路径) | 显示目录中的内容 |
nlst(路径) | 与dir类似,但是返回的是包含文件名的列表 |
retrlines(cmd命令) | 给定FTP命令,用于下载文本文件。 |
retrbinary(cmd命令) | 与retrlines类似,只用来处理二进制文件 |
storlines(cmd命令,文件对象) | 给定FTP命令,用来上传文本文件 |
storbinary(cmd命令,文件对象) | 与strolines相似,只用来处理二进制文件 |
rename(旧文件名,新文件名) | 重命名 |
delete(路径) | 删除位于 路径 的远程文件 |
mkd(目录) | 创建远程目录 |
rmd(目录) | 删除远程目录 |
quit() | 关闭连接并退出 |
网络新闻
Usenet与新闻组
Usenet新闻系统是一个全球存档的“电子公告板”。整个系统是一个由大量计算机组成的庞大的全球网络,计算机之间共享Usenet上的帖子。
网络新闻传输协议
用户使用网络新闻传输协议(NNTP)在新闻组中下载或发表帖子。在FTP中,登录、传输和控制需要使用不同的端口,而NNTP只使用一个标准端口119来通信。
Python和NNTP
有一个nntplib库和一个需要实例化的nntplib.NNTP类。
- 连接到服务器
- 登录(根据需要)
- 发出服务请求
- 退出
一般来说,登陆后需要调用group()方法来选择一个感兴趣的新闻组。该方法返回服务器的回复、文章数量、第一篇和最后一篇文章的ID、新闻组的名称。
nntplib.NNTP类方法
见链接:https://docs.python.org/3/library/nntplib.html#methods