Python程序设计第11章 网络编程课件.pptx
《Python程序设计第11章 网络编程课件.pptx》由会员分享,可在线阅读,更多相关《Python程序设计第11章 网络编程课件.pptx(63页珍藏版)》请在三一办公上搜索。
1、2022/12/27,第11章 网络编程,主 讲 人:,目录,2022/12/27,2,1. 网络编程,2. 因特网应用层客户端,3. Python网络编程实例,2022/12/27,1.网络编程,本节将简要介绍使用套接字进行网络编程的知识。在此之前,将介绍一些有关网络编程的背景信息,以及套接字如何应用于Python之中,然后展示如何使用Python的相关网络编程模块来创建网络应用程序。,2022/12/27,1.1 客户端/服务器架构,什么是客户端服务器架构?,1.网络编程,2022/12/27,1.2套接字,1.网络编程,分为两种类型:基于文件(AF_UNIX)的和面向网络的(AF_INE
2、T)主机-端口对:,合法的端口号范围为065535。其中,小于1024的端口号为系统保留端口。,HOST=127.0.0.1 PORT=8888 BUFSIZ=1024 ADDR=(HOST,PORT),2022/12/27,1.2.1面向连接的套接字(TCP),1.网络编程, 服务器端程序创建套接字(socket)。将套接字绑定到一个本地地址和端口上(bind)。将套接字设为监听模式,准备接受客户请求(listen)。等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。用返回的套接字和客户端进行通信(send/recv)。返回,等待另一客户的请求
3、。关闭套接字。,2022/12/27,1.2.1面向连接的套接字(TCP),1.网络编程, 客户端程序创建套接字(socket)。向服务器发出连接请求(connect)。和服务器端进行通信(send/recv)。关闭套接字。,2022/12/27,1.2.2面向无连接的套接字(UDP),1.网络编程, 服务器端程序创建套接字(socket)。将套接字绑定到一个本地地址和端口上(bind)。等待接收数据(recvfrom)。关闭套接字。 客户端程序创建套接字(socket)。向服务器发送数据(sendto)。关闭套接字。,2022/12/27,1.3.1Python中socket模块函数,1.网
4、络编程,(1)服务器端(server),创建socket对象。调用socket构造函数。如: socket = socket.socket(family,type)将socket绑定到指定地址。这是通过socket对象的bind方法来实现的: socket.bind(address),2022/12/27,1.网络编程,(1)服务器端(server),使用socket套接字的listen方法接收连接请求: socket.listen(backlog)服务器套接字通过socket的accept方法等待客户请求一个连接。 connection,address = socket.accept(),1
5、.3.1Python中socket模块函数,2022/12/27,1.网络编程,(1)服务器端(server),处理阶段,服务器和客户端通过send和recv方法通信(传输数据)传输结束,服务器调用socket的close方法关闭连接。,1.3.1Python中socket模块函数,2022/12/27,1.网络编程,(2)客户端(client),创建一个socket以连接服务器: socket = socket.socket( family, type )使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:socket.connect( (host,port
6、) ),1.3.1Python中socket模块函数,2022/12/27,1.网络编程,(2)客户端(client),处理阶段,客户和服务器将通过send方法和recv方法通信。传输结束,客户通过调用socket的close方法关闭连接。,1.3.1Python中socket模块函数,2022/12/27,1.3.2套接字对象内置方法,1.网络编程,2022/12/27,1.3.3 创建TCP服务器,1.网络编程,伪代码:ss = socket()ss.bind()ss.listen()inf_loop:cs = ss.accept()comm_loop:cs.recv()/cs.send(
7、)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.listen(5)14 15 while True:16 print(waiting for
8、 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/12/27,1.3.4 创建TCP客户端,1.网络编程,伪代码:cs = socket(
9、)sc.connect()comm_loop:cs.send()/cs.recv()cs.close(),2022/12/27,1.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(ADDR)12 13 while True:14 data=input(
10、 )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/12/27,1.3.4 运行结果,1.网络编程,现在,我们给出客户端对应的输入和输出,它以一个未带输入数据的简单Return(或Enter)键结束。$ python /usr/tcpClie.py helloThu Sep 1 15:35:45 2016 hello howareyouThu Sep 1
11、15:36:09 2016 howareyou,2022/12/27,1.3.4 运行结果,1.网络编程,服务器的输出主要是诊断性的。$ python /usr/tcpServ.pywaiting for connection.(.connected from:, (127.0.0.1, 48426)hellohowareyouwaiting for connection.,2022/12/27,1.3.5 创建UDP服务器,1.网络编程,UDP服务器不需要TCP服务器那么多的设置,因为它不是面向连接的。除了等待传入的连接以外,几乎不需要其他工作。ss.= socket()ss.bind()i
12、nf_loop:cs = ss.recvfrom()/ss.sendto()ss.close(),2022/12/27,1.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 True:15 print(w
13、aiting 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/12/27,1.3.6 创建UDP客户端,1.网络编程,在本节中所强调的4个客户端中,UDP客户端的代码是最短的。它的伪代码如下所示:cs = socket()
14、somm_loop:cs.sendto/cs.recvfrom()cs.close()一旦创建了套接字对象,就进入了对话循环之中,在这里我们与服务器交换消息。最后,当通信结束时,就会关闭套接字。,2022/12/27,1.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 while Tr
15、ue: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/12/27,1.3.6 运行结果,1.网络编程,$python /usr/tsUclnt.py HelloThu Sep 1 17:45:36 2016 Hello WorldThu Sep 1 17:45:50 2016 World服务器
16、的输出主要是诊断性的:$ python /usr/tsUserv.pywaiting for message.received from and returned to: (127.0.0.1, 48375)waiting for message.,2022/12/27,1.3.7 socket模块属性,1.网络编程,2022/12/27,1.4 socketserver模块,1.网络编程,socketserver是标准库中的一个高级模块,它的目标是简化很多样板代码,它们是创建网络客户端和服务器客户端所必需的代码。,2022/12/27,1.4 socketserver模块,1.网络编程,创建
17、socketserver TCP服务器(1)socketserver TCP服务器示例首先导入服务器类,然后定义与之前相同的主机常量。其次是请求处理程序类,最后启动它。更多的细节请查看下面的代码。,2022/12/27,1.4 socketserver模块,1.网络编程,1 #!/usr/bin/env python 2 3 from socketserver import (TCPServer as TCP,StreamRequestHandler as SRH) 4 from time import ctime 5 6 HOST= 7 PORT=8888 8 ADDR=(HOST,PORT
18、) 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.)17 tcpServ.serve_forever(),2022/12/27,1.4 socketserver模块,1.网络编程,创建socke
19、tserver 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:11tcpCliSock=socket(AF_INET,SOCK_STREAM)12tcpCliSock.connect(ADDR)13dat
20、a=input( )14if not data:15break16tcpCliSock.send(%s %data)17data=tcpCliSock.recv(BUFSIZ)18if not data:19break20print(data.strip()21 tcpCliSock.close(),2022/12/27,1.4 socketserver模块,1.网络编程,执行结果:,这里是socketserverTCP客户端的输出。$ python /usr/tsTclntSS.py applicationThu Sep 1 18:32:45 2016 application flashTh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python程序设计第11章 网络编程课件 Python 程序设计 11 网络 编程 课件
链接地址:https://www.31ppt.com/p-1935526.html