版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ch17网络编程和通信本章要点:17.1网络编程的基本概念17.2基于socket的网络编程17.3基于urllib的网络编程17.4基于http的网络编程17.5基于ftplib的网络编程17.6基于poplib和smtplib的网络编程资源下载提示2课件等资源:扫描封底的“课件下载”二维码,在公众号“书圈”中下载。素材(源码):扫描本书目录上方的二维码下载。讲解视频:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最前)的二维码,作为开源的补充阅读和学习资源。
案例研究:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最后)的二维码,可以在线学习。电子资源:扫描封底的“补充资源”二维码,在公众号“书圈”中下载,习题参考答案、教学大纲、教学案例、思政刚要和案例分析,以及Python计算生态等补充知识。
题库自测平台:扫描封底刮刮卡中的二维码,登录网站(),进入本书“题库”页面,选择相应章节练习网络编程的基本概念计算机网络是由传输介质连接在一起的一系列设备(网络节点)组成在计算机网络中,用于规定信息的格式以及如何发送和接收信息的一套规则、标准或约定称为网络协议目前使用最广泛的网络协议是Internet上所使用的TCP/IP(TransmissionControlProtocol/InternetProtocol)协议网络编程就是通过网络协议与其他计算机进行通讯网络编程涉及主机定位和数据传输。在TCP/IP协议中,TCP层提供面向应用的数据传输机制;IP层则负责网络主机定位、数据传输路由。目前较为流行的网络编程模型是客户机/服务器(C/S)结构TCP/IP协议简介(1)TCP/IP协议即传输控制协议/互连网协议,它是一种网际互联通信协议,目的在于通过它实现网际间各种异构网络和异种计算机的互联通信众多的网络产品厂家都支持TCP/IP协议,TCP/IP已经成为一个事实上的工业标准。TCP/IP协议模型把TCP/IP协议族分成四个层次:图17-2TCP/IP协议简介(2)1.网络接口层网络接口层(又称网络访问层)对应于OSI模型的数据链路层和物理层,负责向网络媒体发送TCP/IP数据包并从网络媒体接收TCP/IP数据包。从理论上讲,该层不是TCP/IP协议的组成部分,但它是TCP/IP协议的基础,是各种网络与TCP/IP协议的接口。2.Internet层Internet层对应于OSI模型的网络层,负责相同或不同网络中计算机之间的通信,主要处理数据报和路由。IP是一个可路由的协议,可以为数据包进行寻址、路由、分段和重组。IP协议在TCP/IP协议组中处于核心地位TCP/IP协议简介(3)3.传输层传输层对应于OSI模型的传输层,为应用层提供端到端的会话和数据报通信服务,主要功能是数据格式化、数据确认和丢失重传等。该层主要包括两种协议,即TCP协议和UDP协议。TCP协议定义了两台计算机之间进行可靠传输时交换的数据和确认信息的格式,以及计算机为了确保数据的正确到达而采取的措施。该协议是面向连接的,可提供可靠的、按序传送数据的服务。TCP协议采用的最基本的可靠性技术包括三个方面,即确认与超时重传、流量控制和拥塞控制。TCP协议的优点是可靠通信服务,缺点是建立连接需要额外的网络开销。UDP协议(UserDatagramProtocol,用户数据报协议)也是建立在IP协议之上,同IP协议一样提供无连接数据报传输。UDP本身并不提供可靠性服务,相对IP协议,它唯一增加的能力是提供协议端口,以保证进程通信。与TCP不同,UDP提供一对一或一对多的、无连接的不可靠通信服务。UDP协议的优点是简单高效,缺点是通信服务有可能不可靠。4.应用层应用层是TCP/IP协议的最高层,对应于OSI模型的应用层、表示层和会话层。应用层允许应用程序访问其他层的服务,它定义了应用程序用来交换数据的协议。应用层包含大量的协议,而且随着网络技术和应用的发展,不断会产生许多新的应用层协议IP地址和域名IPV4版本规定IP地址由32位二进制数码组成一般采用以点分十进制表示方法,即32位二进制数码组成的IP地址,每8位为一组,共分为4组,中间用“.”隔开域名系统:管理计算机域名与IP地址的对应关系Internet使用域名系统(DomainNameSystem,DNS)来管理计算机域名与IP地址的对应关系。用户先在域名系统中注册域名及与其对应的IP地址。当需要使用域名进行通信时,DNS客户机通过查询DNS服务器将此域名解析为相对应的IP地址信息,然后通过IP地址进行通信统一资源定位器URL(UniformResourceLocator,统一资源定位器)专为标识Internet网上资源位置而设的一种编址方式通过URL可以访问Internet上的各种网络资源,例如最常见的WWW、FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL一般由以下几个部分组成:基于socket的网络编程(1)套接字:网络中两个应用程序之间通信的端点基于套接字的TCPServer的网络编程一般包括以下基本步骤(1)创建socket对象。(2)将socket绑定到指定地址上。(3)准备好套接字,以便接收连接请求。(4)通过socket对象方法accept,等待客户请求连接。(5)服务器和客户机通过send和recv方法通信(传输数据)。(6)传输结束,调用socket的close方法以关闭连接。基于套接字的TCPClient的网络编程一般包括以下基本步骤(1)创建socket对象。(2)通过socket对象方法connect连接服务器。(3)客户机和服务器通过send和recv方法通信(传输数据)。(4)传输结束,调用socket的close方法以关闭连接。基于socket的TCP程序架构基于socket的网络编程(2)基于套接字的UDPServer的网络编程一般包括以下基本步骤(1)创建socket对象。(2)将socket绑定到指定地址上。(3)服务器和客户机通过send和recv方法通信(传输数据)。(4)传输结束,调用socket的close方法以关闭连接。基于套接字的UDPClient的网络编程一般包括以下基本步骤(1)创建socket对象。(2)客户机和服务器通过send和recv方法通信(传输数据)。(3)传输结束,调用socket的close方法以关闭连接。基于socket的UDP程序架构简单TCP程序:EchoServer基于TCP的EchoServer包括服务器/客户机两个部分:服务端应用程序和客户机应用程序。服务端应用程序创建一个socket并绑定到某个“IP地址:端口号”上,然后侦听listen,并使用阻塞方法accept以等待客户机连接请求客户机创建一个socket,并建立到服务器的连接;客户机循环接收用户数据并发送数据到服务器,服务器接收数据后回送(Echo)给客户机。客户机输入空数据时,关闭socket并终止运行;服务器接收到空数据时,关闭socket并终止运行【例17.1】服务端应用程序ChatServer(ChatServer.py)importsocket#导入socket模块serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建服务器socketserversocket.bind(('',8000))#绑定到IP地址和端口号serversocket.listen(1)#开始侦听,队列长度为1clientsocket,clientaddress=serversocket.accept()#使用阻塞方法accept以等待客户机连接请求print('Connectionfrom',clientaddress)#接收客户机请求后输出客户机的信息while1:#循环以接收和回送客户机数据data=clientsocket.recv(1024)#接收数据ifnotdata:break#接收到空数据时,终止循环print('Receivedfromclient:',repr(data))#输出接收到的数据,repr函数转换为字符串print('Echo:',repr(data))#输出发送到客户机数据的信息clientsocket.send(data)#回送数据到客户机clientsocket.close()#关闭客户机socketserversocket.close()#关闭服务器socket【例17.2】客户机应用程序ChatClient(ChatClient.py)importsocket#导入socket模块clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建客户机socketclientsocket.connect(('',8000))#连接到服务器while1:#循环以接收用户输入,并发送到服务器,接收服务器的回送数据data=input('>')#接收用户输入数据clientsocket.send(data.encode())#把数据转换为bytes对象,并发送到服务器ifnotdata:break#如果数据为空,终止循环newdata=clientsocket.recv(1024)#接收服务器的回送数据print('Receivedfromserver:',repr(newdata))#输出接收到数据clientsocket.close()#关闭客户机socket简单UDP程序:EchoServer基于UDP的EchoServer包括服务器/客户机两部分:服务端应用程序创建一个socket并绑定到某个“IP地址:端口号”上,然后循环使用recvfrom接收数据(返回数据和客户机地址),并使用sendto回送数据到客户机地址客户机创建一个socket,然后循环使用sendto发送用户输入的数据到服务器,并接收服务器回送的数据。客户机输入空数据时,关闭socket并终止运行;服务器接收到空数据时,关闭socket并终止运行【例17.3】服务端应用程序ChatServerUDP(ChatServerUDP.py)#ChatServerUDP.pyimportsocket#导入socket模块serversocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建服务器socketserversocket.bind(('',8000))#绑定到IP地址和端口号while1:#循环以接收和回送客户机数据data,address=serversocket.recvfrom(1024)#接收数据,返回数据和客户机地址ifnotdata:break;#接收到空数据时,终止循环print('Receivedfromclient:',address,repr(data))#输出接收到的数据,repr函数转换为字符串print('Echo:',repr(data))#输出发送到客户机数据的信息serversocket.sendto(data,address)#发送数据到客户机serversocket.close()#关闭服务器socket【例17.4】客户机应用程序ChatClientUDP(ChatClientUDP.py)#ChatClientUDP.pyimportsocket#导入socket模块clientsocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建客户机socketwhile1:#循环以接收用户输入,并发送到服务器,接收服务器的回送数据data=input('>')#接收用户输入数据clientsocket.sendto(data.encode(),('',8000))#把数据转换为bytes对象,并发送到服务器ifnotdata:break#如果数据为空,终止循环newdata=clientsocket.recvfrom(1024)#接收服务器的回送数据print('Receivedfromserver:',repr(newdata))#输出接收到数据clientsocket.close()#关闭客户机socketUDP程序:QuoteServerQuoteServer实现Quoteoftheday(每日名言)功能:客户机发送一个数据报到Quote服务器(相当于请求)服务器使用接收来自客户机的数据报(请求)服务器从格言列表中读取一句名言,并作为数据报发送给客户机客户机接收Quote服务器的数据报(包含一句名言),并显示该名言【例17.5】服务器应用程序QuoteServer(QuoteServer.py)importsocket,random#导入socket和random模块quotes=['不妄求,则心安,不妄做,则身安','多门之室生风,多言之人生祸','人之心胸,多欲则窄,寡欲则宽',
'三人行,必有我师','滴水穿石,磨杵成针','是非天天有,不听自然无','积德为产业,强胜于美宅良田']serversocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建服务器socketserversocket.bind(('',8002))#绑定到IP地址和端口号while1:#循环以接收和回送客户机数据data,address=serversocket.recvfrom(1024)#接收数据,返回数据和客户机地址quote=random.choice(quotes)#从Quotes列表中随机选择一个项目serversocket.sendto(quote.encode(),address)#把数据转换为bytes对象,并发送数据到客户机serversocket.close()#关闭服务器socket【例17.6】客户机应用程序QuoteClient(QuoteClient.py)importsocket#导入socket模块clientsocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建客户机socketclientsocket.sendto(b'hello',('',8002))#数据转换为bytes对象,发送到服务器newdata,address=clientsocket.recvfrom(1024)#接收服务器的回送数据print('今日名言:',newdata.decode())#接收到数据解码为字符串,并输出clientsocket.close()#关闭客户机socket基于urllib的网络编程urllib.request(打开和读取URL)urllib.parse(解析URL)urllib.error(urllib.request引发的异常)urllib.robotparser(解析robots.txt文件)【例17.7】打开和读取URL网络资源示例>>>importurllib.request>>>f=urllib.request.urlopen('')#打开URL资源>>>print(f.read(200))#读取200个字节,返回bytes对象并输出b'<!DOCTYPEhtml>\r\n<html>\r\n\t<head>\r\n\t\t<metahttp-equiv="content-type"content="text/html;charset=utf-8">\r\n\t\t<metahttp-equiv="X-UA-Compatible"content="IE=Edge">\r\n\t\t<metacontent="never"name="referrer"'创建Request对象【例17.8】Request对象示例(RequestTest.py)importurllib.request#导入urllib.request模块defgetURLInfo(url,data,headers):req=urllib.request.Request(url,data,headers)#创建Request对象print('Fullurl:',req.full_url)#URLprint('Host:',req.host)#主机和端口号print('Data:',req.data)#向服务器传送的数据#测试代码if__name__=='__main__':url=''values={'wd':'python'}data=urllib.parse.urlencode(values)data=data.encode(encoding='UTF8')headers={'User-Agent':'Mozilla/4.0(compatible;MSIE5.5;WindowsNT)'}getURLInfo(url,data,headers)基于http的网络编程http.client(低级别的HTTP协议客户端,高级别的URL打开则使用urllib.request)http.server(基于socketserver的HTTP服务器类)http.cookies(使用cookies实现状态管理的工具)http.cookiejar(提供cookies的持久性)基于ftplib的网络编程创建FTP对象创建FTP_TLS对象【例17.9】创建FTP对象示例>>>fromftplibimportFTP>>>ftp=FTP("")>>>ftp.login()'230Anonymousaccessgranted,restrictionsapply'>>>ftp.dir()-rw-rw-r--1ftpftp451Jul12005README.MIRRORSdrwxrwxr-x3ftpftp4096Jul12005develdrwxrwxr-x3ftpftp4096Dec22010distribdrwxrwxr-x4ftpftp4096Jul12005historic>>>ftp.cwd('devel')'250CWDcommandsuccessful'>>>ftp.dir()drwxrwxr-x2ftpftp4096Jul1000:07source基于poplib和smtplib的网络编程poplib模块提供了对POP3协议的支持smtplib模块提供了对SMTP协议的支持使用poplib和smtplib,可以实现接收和发送邮件的功能【例17.10】pop3示例(pop3.py)importgetpass,poplibhost='YourPop3Host'#POP3服务器的主机名或IP地址,运行时需修改为对应的值port=110#POP3服务器的端口号,默认为110,运行时需修改为对应的值pop3=poplib.POP3(host,port=port)#创建POP3对象pop3.user(getpass.getuser())#用户名pop3.pass_(getpass.getpass())#密码numMessages=len(pop3.list()[1])#邮件数foriinrange(numMessages):#接收邮件forjinpop3.retr(i+1)[1]:print(j)【例17.11】smtp示例(smtp.py)importsmtplibdefprompt(prompt):returninput(prompt).strip()fromaddr=prompt("From:")toaddrs=prompt("To:").split()print("输入信息,^D(Unix)or^Z(Windows)结束输入:")#添加From:和To:头信息msg=("From:%s\r\nTo:%s\r\n\r\n"%(fromaddr,",".join(toaddrs)))whileTrue:try:line=input()exceptEOFError:breakifnotline:breakmsg=msg+lineprint("信息长度为:",len(msg))server=smtplib.SMTP('localhost')server.set_debuglevel(1)server.sendmail(fromaddr,toaddrs,msg)server.quit()本章小结实验和习题课本实例17.1~实例17.11复习题填空题思考题案例研究:网络爬虫案例(1)网络爬虫是通过跟踪超链接系统访问Web页面的程序。每次访问一个网页时,会分析网页内容,提取
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《用色彩叙事》教案-2026-2027学年湘美版(新教材)小学美术六年级上册
- 2025-2026年金融伦理与职业道德试题
- 2025-2026年考研政治毛泽东思想概论复习模拟卷
- 隔离(负荷)开关安装调整记录
- 广东大湾区一模-2026届高三-2026年1月-物理-试题
- 【7道第一次月考】安徽省淮北市2025-2026学年七年级上学期10月月考道德与法治试题(含解析)
- 河北省衡水市枣强中学2026-2027学年高二上学期开学考试英语试卷
- 四川省广元市川师大万达中学2026-2027学年高二上学期入学检测化学试卷(含答案)
- 医院职业暴露知识考核试卷及答案
- 湖南省长沙麓山国际实验学校2026-2027学年高二上学期开学考试政治试卷(含答案)
- 《诚信管理体系培训》课件
- 个人委托投资合同范本
- 社保局授权委托书范文(2篇)
- 浙江健立化学有限公司年产2万吨六氟磷酸锂、5000吨双氟磺酰亚胺锂、2000吨碳酸亚乙烯酯、5万吨锂电池电解液新能源材料建设项目环评报告
- SCR脱硝工艺计算书
- 预拌混凝土企业试验室资料管理系统(全自动化)
- 教育部首批中等职业学校专业教学标准
- RITTAL威图空调中文说明书
- 《红楼梦》(教学讲解课件)
- 中水回用深度处理系统操作规程
- 工艺管道吹扫试压方案
评论
0/150
提交评论