Python程序设计第11章-网络编程课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Python程序设计第11章-网络编程课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 程序设计 11 网络 编程 课件
- 资源描述:
-
1、2022-6-3第第11章章 网络编程网络编程主 讲 人:目录目录2022-6-321. 网络编程2. 因特网应用层客户端3. Python网络编程实例2022-6-31.网络编程本节将简要介绍使用套接字进行网络编程的知识。在此之前,将介绍一些有关网络编程的背景信息,以及套接字如何应用于Python之中,然后展示如何使用Python的相关网络编程模块来创建网络应用程序。2022-6-31.1 客户端/服务器架构什么是客户端服务器架构?1.网络编程2022-6-31.2套接字1.网络编程分为两种类型:基于文件(AF_UNIX)的和面向网络的(AF_INET)主机-端口对:合法的端口号范围为065
2、535。其中,小于1024的端口号为系统保留端口。 HOST=127.0.0.1 PORT=8888 BUFSIZ=1024 ADDR=(HOST,PORT)2022-6-31.2.1面向连接的套接字(TCP)1.网络编程 服务器端程序创建套接字(socket)。将套接字绑定到一个本地地址和端口上(bind)。将套接字设为监听模式,准备接受客户请求(listen)。等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。用返回的套接字和客户端进行通信(send/recv)。返回,等待另一客户的请求。关闭套接字。2022-6-31.2.1面向连接的套接字
3、(TCP)1.网络编程 客户端程序 创建套接字(socket)。 向服务器发出连接请求(connect)。 和服务器端进行通信(send/recv)。 关闭套接字。2022-6-31.2.2面向无连接的套接字(UDP)1.网络编程 服务器端程序服务器端程序 创建套接字(socket)。 将套接字绑定到一个本地地址和端口上(bind)。 等待接收数据(recvfrom)。 关闭套接字。 客户端程序客户端程序 创建套接字(socket)。 向服务器发送数据(sendto)。 关闭套接字。2022-6-31.3.1Python中socket模块函数1.网络编程(1)服务器端)服务器端(server)
4、创建socket对象。调用socket构造函数。如: socket = socket.socket(family,type) 将socket绑定到指定地址。这是通过socket对象的bind方法来实现的: socket.bind(address) 2022-6-31.网络编程(1)服务器端)服务器端(server) 使用socket套接字的listen方法接收连接请求: socket.listen(backlog) 服务器套接字通过socket的accept方法等待客户请求一个连接。 connection,address = socket.accept()1.3.1Python中socket模
5、块函数2022-6-31.网络编程(1)服务器端)服务器端(server)处理阶段,服务器和客户端通过send和recv方法通信(传输数据)传输结束,服务器调用socket的close方法关闭连接。1.3.1Python中socket模块函数2022-6-31.网络编程(2)客户客户端(端(client) 创建一个socket以连接服务器: socket = socket.socket( family, type ) 使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下: socket.connect( (host,port) )1.3.1Python中sock
6、et模块函数2022-6-31.网络编程(2)客户客户端(端(client) 处理阶段,客户和服务器将通过send方法和recv方法通信。 传输结束,客户通过调用socket的close方法关闭连接。1.3.1Python中socket模块函数2022-6-31.3.2套接字对象内置方法1.网络编程名名 称称描描 述述服务器套接字方法服务器套接字方法s.bind()将地址(主机名、端口号对)绑定到套接字上s.listen()设置并启动TCP监听器s.accept()被动接受TCP客户端连接,一直等待直到连接到达(阻塞)客户端套接字方法客户端套接字方法s.connect()主动发起TCP服务器连
7、接s.connect_ex()connect()的扩展版本,此时会以错误码的形式返回问题,而不是抛出一个异常普通的套接字方法普通的套接字方法s.recv()接受TCP消息s.recv_into()接受TCP消息到指定的缓冲区s.send()发送TCP消息s.sendall()完整地发送TCP消息s.recvfrom()接受UDP消息s.recvfrom_into()接受UDP消息到指定的缓冲区s.sendto()发送UDP消息s.close()关闭套接字2022-6-31.3.3 创建TCP服务器1.网络编程伪代码:ss = socket()ss.bind()ss.listen()inf_lo
8、op:cs = ss.accept()comm_loop:cs.recv()/cs.send()cs.close()ss.close()1.3.3 创建TCP服务器1.网络编程 1 #!/usr/bin/env python 2 3 from socket import * 4 from time import ctime 5 6 HOST= 7 PORT=8888 8 BUFSIZ=1024 9 ADDR=(HOST,PORT)10 11 tcpSerSock=socket(AF_INET,SOCK_STREAM)12 tcpSerSock.bind(ADDR)13 tcpSerSock.l
9、isten(5)14 15 while True:16 print(waiting for connection.)17 tcpCliSock,addr=tcpSerSock.accept()18 print(.connected from:,addr)19 20 while True:21 data=tcpCliSock.recv(BUFSIZ)22 if not data:23 break24 print(data)25 tcpCliSock.send(%s %s %(ctime(),data)2627tcpCliSock.close()28 tcpSerSock.close()2022-
10、6-31.3.4 创建TCP客户端1.网络编程伪代码:cs = socket()sc.connect()comm_loop:cs.send()/cs.recv()cs.close()2022-6-31.3.4 创建TCP客户端1.网络编程 1 #!/usr/bin/env python 2 3 from socket import * 4 5 HOST=127.0.0.1 6 PORT=8888 7 BUFSIZ=1024 8 ADDR=(HOST,PORT) 9 10 tcpCliSock=socket(AF_INET,SOCK_STREAM)11 tcpCliSock.connect(AD
11、DR)12 13 while True:14 data=input( )15 if not data:16 break17 tcpCliSock.send(data)18 data=tcpCliSock.recv(BUFSIZ)19 if not data:20 break21 print(data)22 23 tcpCliSock.close()2022-6-31.3.4 运行结果1.网络编程现在,我们给出客户端对应的输入和输出,它以一个未带输入数据的简单Return(或Enter)键结束。 $ python /usr/tcpClie.py helloThu Sep 1 15:35:45 2
12、016 hello howareyouThu Sep 1 15:36:09 2016 howareyou 2022-6-31.3.4 运行结果1.网络编程服务器的输出主要是诊断性的。 $ python /usr/tcpServ.pywaiting for connection.(.connected from:, (127.0.0.1, 48426)hellohowareyouwaiting for connection.2022-6-31.3.5 创建UDP服务器1.网络编程UDP服务器不需要TCP服务器那么多的设置,因为它不是面向连接的。除了等待传入的连接以外,几乎不需要其他工作。 ss.
13、= socket()ss.bind()inf_loop:cs = ss.recvfrom()/ss.sendto()ss.close()2022-6-31.3.5 创建UDP服务器1.网络编程 1 #!/usr/bin/env python 2 3 from socket import * 4 from time import * 5 6 HOST= 7 PORT=8888 8 BUFSIZ=1024 9 ADDR=(HOST,PORT)10 11 udpSerSock=socket(AF_INET,SOCK_DGRAM)12 udpSerSock.bind(ADDR)13 14 while
14、True:15 print(waiting for message.)16 data,addr=udpSerSock.recvfrom(BUFSIZ)17 if not data:18 break19 print(data)20 udpSerSock.sendto(%s %s %(ctime(),data),addr)21print(.received from and returned to:,addr)22 23 udpSerSock.close()2022-6-31.3.6 创建UDP客户端1.网络编程在本节中所强调的4个客户端中,UDP客户端的代码是最短的。它的伪代码如下所示: cs
15、= socket()somm_loop:cs.sendto/cs.recvfrom()cs.close() 一旦创建了套接字对象,就进入了对话循环之中,在这里我们与服务器交换消息。最后,当通信结束时,就会关闭套接字。2022-6-31.3.6 创建UDP客户端1.网络编程 1 #!/usr/bin/env python 2 3 from socket import * 4 5 HOST=localhost 6 PORT=8888 7 BUFSIZ=1024 8 ADDR=(HOST,PORT) 9 10 udpCliSock=socket(AF_INET,SOCK_DGRAM)11 12 wh
16、ile True:13 data=input( )14 if not data:15 break16 udpCliSock.sendto(data,ADDR)17 data,ADDR=udpCliSock.recvfrom(BUFSIZ)18 if not data:19 break20 print(data)21 22 udpCliSock.close()2022-6-31.3.6 运行结果1.网络编程$python /usr/tsUclnt.py HelloThu Sep 1 17:45:36 2016 Hello WorldThu Sep 1 17:45:50 2016 World 服务
17、器的输出主要是诊断性的: $ python /usr/tsUserv.pywaiting for message.received from and returned to: (127.0.0.1, 48375)waiting for message.2022-6-31.3.7 socket模块属性1.网络编程属性名称属性名称描描 述述数据属性数据属性AF_UNIX、AF_INET、AF_INET6、AF_NETLINK、AF_TIPCPython中支持的套接字地址家族SO_STREAM、SO_DGRAM套接字类型(TCP=流,UDP=数据包)has_ipv6指示是否支持IPv6的布尔标记异常
18、异常error套接字相关错误herror主机和地址相关错误gaierror地址相关错误timeout超时时间函数函数socket()以给定的地址家族、套接字类型和协议类型(可选)创建一个套接字对象socketpair()以给定的地址家族、套接字类型和协议类型(可选)创建一对套接字对象create_connection()常规函数,它接收一个地址(主机名,端口号)对,返回套接字对象fromfd()以一个打开的文件描述符创建一个套接字对象ssl()通过套接字启动一个安全套接字层连接;不执行证书验证2022-6-31.4 socketserver模块1.网络编程socketserver是标准库中的一
19、个高级模块,它的目标是简化很多样板代码,它们是创建网络客户端和服务器客户端所必需的代码。2022-6-31.4 socketserver模块1.网络编程创建socketserver TCP服务器(1)socketserver TCP服务器示例首先导入服务器类,然后定义与之前相同的主机常量。其次是请求处理程序类,最后启动它。更多的细节请查看下面的代码。2022-6-31.4 socketserver模块1.网络编程 1 #!/usr/bin/env python 2 3 from socketserver import (TCPServer as TCP,StreamRequestHandler
20、 as SRH) 4 from time import ctime 5 6 HOST= 7 PORT=8888 8 ADDR=(HOST,PORT) 9 10 class MyRequestHandler(SRH):11def handle(self):12 print(.connected from:,self.client_address)13 self.wfile.write(%s %s%(ctime(),self.rfile.readline()14 15 tcpServ=TCP(ADDR,MyRequestHandler)16 print(waiting for connection
21、.)17 tcpServ.serve_forever()2022-6-31.4 socketserver模块1.网络编程创建socketserver TCP客户端如下示例所示,这里的客户端很自然地非常像最初的客户端,比服务器像得多,但必须稍微调整它以使其与新服务器很好地配合工作。1.4 socketserver模块1.网络编程 1 #!/usr/bin/env python 2 3 from socket import * 4 5 HOST=127.0.0.1 6 PORT=8888 7 BUFSIZ=1024 8 ADDR=(HOST,PORT) 9 10 while True:11tcpC
22、liSock=socket(AF_INET,SOCK_STREAM)12tcpCliSock.connect(ADDR)13data=input( )14if not data:15break16tcpCliSock.send(%s %data)17data=tcpCliSock.recv(BUFSIZ)18if not data:19break20print(data.strip()21 tcpCliSock.close()2022-6-31.4 socketserver模块1.网络编程执行结果执行结果:这里是这里是socketserverTCP客户端的输出客户端的输出。 $ python
23、/usr/tsTclntSS.py applicationThu Sep 1 18:32:45 2016 application flashThu Sep 1 18:33:50 2016 flash 这是服务器的输出这是服务器的输出。 $ python /usr/tsTservSS.pywaiting for connection.connected from:( 127.0.0.1,51245).connected from:( 127.0.0.1,51246)目录目录2022-6-321. 网络编程2. 因特网应用层客户端3. Python网络编程实例2022-6-32.因特网应用层客户端
展开阅读全文