zoukankan      html  css  js  c++  java
  • 第三章因特网客户端编程

    • 3.1 因特网客户端简介
      • 1)因特网客户端是什么?
        • 用来传输数据的地方,数据在服务提供者和服务使用者之间传输
      • 2)“生产者-消费者”的概念
        • 一般用途:描述操作系统方面的内容
        • 本章解释:
          • 服务器:生产者,提供服务
          • 客户端:消费者,使用服务
          • 对特定的服务,一般只有一个服务器(即进程/主机等),但有多个消费者
      • 3)本章目的
        • 介绍多个因特网协议。
      • 3.2 文件传输
      • 3.2.1 文件传输因特网协议
        • 用于在因特网上传输文件的协议
          • FTP:文件传输协议
            • 上传或下载文件,需要输入有效的用户名和密码,但也允许匿名登录。
            • 多用户概念(UNIX)
            • UUCP:UNIX到UNIX的复制协议
            • HTTP:用于web的超文本传输协议
              • 基于web的文件下载以及访问web服务
              • 大部分http文件传输请求都用于获取网页(即将网页文件下载到本地)
              • 一般客户端无需登录就可以访问服务器上的文件和服务
            • rcp:UNIX下的远程文件复制命令(以及更安全、更灵活的scp和rsync)
              • scp和rsync需要用户登陆到服务器主机,在传输文件之前必须验证客户端身份,否则无法上传或者下载文件
      • 3.2.2 文件传输协议FTP
        • 1)用途
          • 匿名下载公共文件
          • 在两台计算机之间传输文件(特别在使用Windows工作,文件存储系统使用UNIX的情况下)
        • 2)匿名登录和用户名密码登录的区别
          • 匿名登录:
            • 用户名:anonymous
            • 密码:用户的电子邮件地址
            • 特点:公开某些目录让大家共同访问
            • 缺陷:与登录用户相比只能使用有限的几个FTP命令
            • 限制:管理员要先设置FTP服务器以允许匿名登录
          • 用户名密码登录
            • 特点:
              • 可通过FTP向特定登录用户传输文件
              • 可使用的FTP命令更多
        • 3)FTP的工作流程
            • ①客户端连接远程主机上的FTP服务器
            • ②客户端输入用户名和密码(或“anonymous”和电子邮件地址)
            • ③客户端进行各种文件传输和信息查询操作
            • ④客户端从远程FTP服务器退出,结束传输
            • ⑤中断的情况
              • 1)网络两边计算机崩溃——传输完成前中断
              • 2)客户端超过15min(900s)没响应,FTP连接超时中断
        • 4)FTP连接的具体细节
          • 1)在底层,FTP只使用TCP不使用UDP

          • 2)FTP的客户端和服务器使用两个套接字通信:

            • 21号端口:控制和命令端口

            • 20号端口:数据端口

          • 3)FTP的两种模式

            • 主动:

              • 只有在主动模式下,服务器才使用数据端口

              • 即服务器主动连接客户端的数据端口

            • 被动:

              • 服务器只是告诉客户端随机的数据端口号

              • 客户端必须主动建立数据连接

      • 3.2.3 python和FTP
        • 1)流程
          • ①连接到服务器
          • ②登录
          • ③发出服务请求(希望得到响应)
          • ④退出
        • 2)相关模块
          • ①导入ftplib模块
          • ②实例化一个ftplib.FTP的类对象
          • ③所有得FTP操作(登录、传输文件、注销)都要使用这个对象完成
      • 3.2.4 ftplib.FTP
        • 1)表3-1 FTP对象的方法
        • 2)在一般的FTP事务中,常用到的:login(),cwd(),dir(),pwd(),stor*(),retr*()和quit()
      • 3.2.5 交互式FTP示例
      • 3.2.6 客户端FTP程序示例
        • P79示例3-1
      • 3.2.7 FTP的其他内容
        • 1)主动模式和被动模式
          • python2.0以前的版本中有被动模式默认关闭
          • python2.1以后的版本中,默认打开
        • 2)典型的FTP客户端
          • 命令行客户端程序
          • GUI客户端程序
            • 工具包:Tk、wxWidgets、GTK、Qt、MFC甚至Swing(需要导入Python或Jython模块)来创建
          • web浏览器
            • urllib模块解析
          • 自定义应用程序
    • 3.3 网络新闻
      • 3.3.1 Usenet与新闻组
        • 1)是什么
          • Usenet新闻系统是一个全球存档的“电子公告板”
          2)系统特点
          • 大量计算机组成
          • 计算机之间共享Usenet上的帖子
          • 一个用户发帖,所有相连计算机均可接收
          • 帖子在Usenet上存活时间有限
          • 每个系统设置已“订阅”的新闻组列表——就像哔站的关注频道一样
          • 内容由提供者安排、服务公开、特定服务特定用户(VIP)、可设置只能上传/下载
          3)使用技术
          • 老版本UUCP
          • 新版本TCP/IP
      • 3.3.2 网络新闻传输协议
        • 协议特点
          • 客户端/服务器架构
          • 只使用一个标准端口119进行通信
            • FTP中,登录、传输数据和控制需要使用不同的端口
          • 用户发一个请求,服务器就响应一次
      • 3.3.3 Python个NNTP
        • 1)用到的库和类
          • 库:nntplib库
          • 类:nntplib.NNTP类(需要实例化)
        • 2)操作流程
          • ①连接到服务器
          • ②登录(根据需要)
          • ③发出服务请求
          • ④退出
      • 3.3.4 nntplib.NNTP类方法
        • P83页表3-2
      • 3.3.5 交互式NNTP示例
      • 3.3.6 客户端程序NNTP示例
    • 3.4 电子邮件
      • 3.4.0 概述
        • 1)电子邮件的定义
          • RFC2822:(电子邮件)消息由头字段(统称消息标题)以及后面可选的正文组成
          • 邮件可以没有正文,但一定要有标题
      • 3.4.1 电子邮件系统组成和协议
        • 1)出现时间
          • 在因特网诞生之前出现(不同主机用户之间交换消息——用户使用同一台计算机,所以没有涉及网络
          • 网络出现后(不同主机之间交换消息)
        • 2)电子邮件怎么工作
          • 发送计算机
          • 中间主机(跳板)
          • 接收计算机
        • 3)电子邮件系统的各组件
          • 1)消息传输代理(MTA)
            • 是什么:在邮件交换主机上运行的服务器进程
            • 做什么:邮件的路由、队列处理和发送工作
            • 特点:它就是从发送主机到接收主机所要经过的主机和跳板
            • 需要怎么做:
              • ①要知道如何找到消息应该到达的下一台MTA
                • 由域名服务DNS来查找目的域名的MX(Mail eXchange,邮件交换)来完成
              • ②要知道如何与另一台MTA通信
                • MTA靠某种协议进行通信
                  • 只有两个MTA都使用同一个协议时,才能进行通信
                  • MTA之间通过消息传输系统(MTS)互相通信
      • 3.4.2 发送电子邮件
        • 1)SMTP、ESMTP、LMTP
          • SMTP:
            • 简单邮件传输协议
          • ESMTP
            • SMTP的基础上增加扩展服务
          • LMTP
            • 本地邮件传输协议
            • 基于SMTP、ESMTP
              • SMTP需要有一个邮件队列,会增加额外的存储和管理工作
              • LMTP移除了对邮件队列的需求,提供了更轻量级的系统,但邮件需要立刻发送
        • 2)MTA
          • 开源MTA:Sendmail、Posrfix、Exim、qmail
          • 商业MTA:Microsoft Exchange、Lotsus Notes Domino Mail Server
          • SMTP是在因特网上的MTA之间信息交换的最常用MTSMTA
      • 3.4.3 python和SMTP
        • 1)相关模块和类
          • smtplib模块
          • smtplib.SMTP类(需要实例化)
        • 2)流程
          • ①连接到服务器
          • ②登录(根据需要)
            • 只有在服务器启动了STMP身份验证(SMTP-AUTH)时才要登录
          • ③发出服务请求
            • STMP通信时只要一个端口
          • ④退出
      • 3.4.4 smtplib.SMTP类方法
        • 1)另外两个类
          • SMTP_SSL:类似SMTP,通过加密的套接字通信循环可以作为SMTP/TLS的替代品
          • LMTP:实现了LMTP(本地邮件传输协议)
        • 2)SMTP客户端所需要的方法
          • sendmail(from,to,msg[,mopts,ropts])
          • quit()
          • 其他见P93表3-3
      • 3.4.5 交互式SMTP示例
      • 3.4.6 SMTP的其他内容
        • 1)SMTP协议定义/规范:RFC 5321
        • 2)如何正确设定因特网地址的格式和电子邮件消息——查看因特网消息格式规范RFC5322
        • 3)python对SMTP模块的支持
      • 3.4.7 接收电子邮件
        • MUA(邮件用户代理)
          • 定义:在家用电脑中运行的应用程序
          • 功能:能够周期性的把邮件下载到本地计算机,以供离线使用
          • 要求:MUA也必须能发送邮件
            • 即发邮件的时候,应用程序要能直接使用SMTP与MTA通信
      • 3.4.8 POP和IMAP
        • 1)POP协议
          • 名称:邮局协议(post office protocal)
          • 功能:下载邮件
          • 目的:让用户的工作站可以访问邮箱服务器里的邮件,并在工作站中,通过SMTP将邮件发送到邮件服务器
          • 缺点:POP无法很好的应对多邮件客户端
        • 2)IMAP协议
          • 名称:因特网消息访问协议(internet message access protocol)
            • 因特网邮件访问协议
            • 交互式邮件访问协议
            • 临时邮件访问协议
          • 目的:提供比POP更完整的解决方案
          • 特点:可适用于用户在不同设备上使用电子邮件的场景
          • 当前版本2003:IMAP4rev1
      • 3.4.9 python和POP3
        • 1)导入模块
          • 模块:poplib
          • 类:poplib.POP3
        • 2)流程
          • ①连接到服务器
          • ②登录
          • ③发出服务请求
          • ④退出
        • 3)邮件传输过程图解
      • 3.4.10 交互式POP3示例
      • 3.4.11 poplib.POP3类方法
        • 1)user()方法
          • 像服务器发送用户名,还会等待并显示服务器的响应,表示服务器正在等待输入该用户的密码
        • 2)pass()方法
          • 在用户使用user()登录后,发送passwd。
          • 验证失败:抛出poplib.error_proto异常
          • 验证成功:得到一个以"+"号开头的应答消息,然后锁定该邮箱,直到调用quit()方法
        • 3)list()方法
          • 从服务器返回以三元组表示的整个消息列表(rsp,msg_list,rsp_siz),分别为服务器的响应、消息列表、返回消息的大小
          • msg_list的格式为[‘msgnum msgsiz’,...],分别表示每个消息的编号和消息的大小
        • 4)其他方法
          • P98表3-4
      • 3.4.12 客户端程序SMTP和POP3示例
        • P98页示例3-3
      • 3.4.13 python和IMAP4
        • 1)相关模块
          • 模块:imaplib
          • 类:imaplib.IMAP4
        • 2)流程:
          • 连接服务器-登录-发出服务请求-退出
        • 3)imaplib模块中定义的类
          • IMAP4、IMAP_SSL、IMAP4_stream——可以用来连接任何兼容IMAP4的服务器
          • IMAP4_stream——可以通过类似文件的对象接口与IMAP4服务器交互
      • 3.4.14交互式IMAP4示例
      • 3.4.15 imaplib.IMAP4类中的常用方法
        • P101表3-5
    • 3.5 实战
      • 3.5.0 关于电子邮件实战的总结
        • 1)一封电子邮件的旅程
          • 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人
        • 2)要编写程序来发送和接收邮件,本质上就是:
          • 编写MUA把邮件发到MTA——SMTP
          • 编写MUA从MDA上收邮件——POP3和IMAP4
        • 3)收邮件
          • 第一步:用poplib把邮件的原始文本下载到本地;
          • 第二部:用email解析原始文本,还原为邮件对象。
      • 3.5.1 生成电子邮件
        • 1)内容扩展
          • MIME(邮件消息扩展格式):用来识别较长消息的不同部分
          • email包:
            • 适合处理并管理整个电子邮件消息的MIME部分
            • 它有多个组件,分别用来解析和生成电子邮件
          • 本节使用:
            • email包和smtplib包
        • 2)生成电子邮件示例
          • P103页3-4
      • 3.5.2 解析电子邮件
        • 1)用到的工具
          • email.message_from_string()函数:用来解析消息
          • message.walk():遍历消息附件
          • message.getpayload()方法:从消息正文中获取特定的部分。通常参数decode会被设为True,表示邮件正文根据每个Content-Transfer-Encoding头解码
        • 2)典型代码模式
          • P105页
      • 3.5.3 基于web的云电子邮件服务
        • 1)通用电子邮件服务——来自ISP
          • 举例:SMTP、POP、IMAP
          • 特点:需要每月支付使用因特网服务
        • 2)基于web的公开电子邮件服务
          • 举例:Yahoo!Mail和Google的Gmail服务
          • 特点:SaaS(Software as a Serveice,软件即服务)类型的云服务
            • 无需每月支付费用
            • 广告费
              • Gmail:
                • 使用算法扫描电子邮件消息,对内容进行评价,然后通过优秀的机器学习算法来精准的投放广告
                • 特点:更加吸引用户、纯文本、电子邮件消息面板右边
                • Yahoo!
                  • 用图片的方式投放广告,这些图片会被嵌入到web应用中
                  • 特点:
                    • 不精确,收益少
                    • 有些服务需要付费订阅,这样才能下载电子邮件
                    • Yahoo!不想用户很方便的就移动他们的电子邮件
      • 3.5.4 最佳实践:安全、重构
        • 1)代码重构的关注点
          • ①在实际开发环境中,web上的连接需要加密,相应的代码中使用的协议也要加密
            • IMAP4->IMAP4_SSL
            • POP3->POP3_SSL
            • SMTP->SMTP_SSL
          • ②不能外代码中直接用纯文本保存登录名和密码
            • 登录名和密码的获取方式:
              • 安全的数据库中获取
              • 编译后的字节码文件获取(.pyc或.pyo文件)
              • 从公司内联网中的服务器代理获取
          • ③邮件消息头和正文的表示:用列表替代字符串
            • 因为实际中,消息正文由应用生成或控制,不是硬编码的字符串
            • 使用列表可以方便增删数据
          • ④邮件的收件人可能不止一个:to的变量类型也改成了列表
          • ⑤小知识点:调用timeit可以知道两种代码(完成相同工作)哪个效率更高
        • 2)实际代码在P106页
      • 3.5.5 Yahoo!Mail
        • 1)代码在P108页
        • 2)代码执行的前提条件:
          • 需要一个Yahoo!Mail Plus账号
          • 付费用户且python版本在2.6.3及以后(解决办法:使用异常抛出)
            • 非付费用户执行代码会报错
        • 3)重构后的代码
          • P110页示例3-5
      • 3.5.6 Gmail
        • 1)特点
          • 所有访问都是免费的
          • 提供了使用传输层安全(TLS)的SMTP
    • 3.6 相关模块
      • 3.6.1 电子邮件相关
        • P115页表3-6
      • 3.6.2 其他因特网客户端协议
        • P116页表3-7
  • 相关阅读:
    实验5 数独游戏界面设计
    实验4 颜色、字符串资源的使用 实验报告
    实验五 操作系统之存储管理
    实验四 主存空间的分配和回收
    实验三 进程调度模拟程序
    实验二作业调度模拟程序(先来先服务(FCFS)调度算法)
    实验八 SQLite数据库操作
    实验七 BindService模拟通信
    实验六 在应用程序中播放音频和视频
    实验五 数独游戏界面设计
  • 原文地址:https://www.cnblogs.com/luoxun/p/14746631.html
Copyright © 2011-2022 走看看