《Python程序设计与算法基础教程》课件(含思政案例) Ch17 网络编程和通信_第1页
《Python程序设计与算法基础教程》课件(含思政案例) Ch17 网络编程和通信_第2页
《Python程序设计与算法基础教程》课件(含思政案例) Ch17 网络编程和通信_第3页
《Python程序设计与算法基础教程》课件(含思政案例) Ch17 网络编程和通信_第4页
《Python程序设计与算法基础教程》课件(含思政案例) Ch17 网络编程和通信_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ch17网络编程和通信本章要点:17.1网络编程的基本概念17.2基于socket的网络编程17.3基于urllib的网络编程17.4基于http的网络编程17.5基于ftplib的网络编程17.6基于poplib和smtplib的网络编程资源下载提示2课件等资源:扫描封底的“课件下载”二维码,在公众号“书圈”中下载。素材(源码):扫描本书目录上方的二维码下载。讲解视频:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最前)的二维码,作为开源的补充阅读和学习资源。

案例研究:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最后)的二维码,可以在线学习。每章练习题:扫描封底刮刮卡中的二维码,再扫描每章习题部分的二维码,下载本章练习题电子版。

题库平台:教师登录网站(),联系客服开通教师权限网络编程的基本概念计算机网络是由传输介质连接在一起的一系列设备(网络节点)组成在计算机网络中,用于规定信息的格式以及如何发送和接收信息的一套规则、标准或约定称为网络协议网络编程就是通过网络协议与其他计算机进行通讯TCP/IP协议模型把TCP/IP协议族分成四个层次:图17-2IP地址和域名IPV4版本规定IP地址由32位二进制数码组成一般采用以点分十进制表示方法,即32位二进制数码组成的IP地址,每8位为一组,共分为4组,中间用“.”隔开域名系统:管理计算机域名与IP地址的对应关系统一资源定位器URL专为标识Internet网上资源位置而设的一种编址方式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的网络编程(2)基于套接字的UDPServer的网络编程一般包括以下基本步骤(1)创建socket对象。(2)将socket绑定到指定地址上。(3)服务器和客户机通过send和recv方法通信(传输数据)。(4)传输结束,调用socket的close方法以关闭连接。基于套接字的UDPClient的网络编程一般包括以下基本步骤(1)创建socket对象。(2)客户机和服务器通过send和recv方法通信(传输数据)。(3)传输结束,调用socket的close方法以关闭连接。简单TCP程序:EchoServer基于TCP的EchoServer包括服务器/客户机两个部分:服务端应用程序和客户机应用程序。服务端应用程序创建一个socket并绑定到某个“IP地址:端口号”上,然后侦听listen,并使用阻塞方法accept以等待客户机连接请求客户机创建一个socket,并建立到服务器的连接;客户机循环接收用户数据并发送数据到服务器,服务器接收数据后回送(Echo)给客户机。客户机输入空数据时,关闭socket并终止运行;服务器接收到空数据时,关闭socket并终止运行【例17.1】服务端应用程序ChatServerimportsocket#导入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】客户机应用程序ChatClientimportsocket#导入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.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.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】服务器应用程序QuoteServerimportsocket,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】客户机应用程序QuoteClientimportsocket#导入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示例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示例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页面的程序。每次访问一个网页时,会分析网页内容,提取结构化数据信息最简单最直接的方法是使用urllib(或requests)库请求网

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论