Python程序设计教程第10章课件

上传人:re****.1 文档编号:569988001 上传时间:2024-08-01 格式:PPT 页数:36 大小:421.50KB
返回 下载 相关 举报
Python程序设计教程第10章课件_第1页
第1页 / 共36页
Python程序设计教程第10章课件_第2页
第2页 / 共36页
Python程序设计教程第10章课件_第3页
第3页 / 共36页
Python程序设计教程第10章课件_第4页
第4页 / 共36页
Python程序设计教程第10章课件_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《Python程序设计教程第10章课件》由会员分享,可在线阅读,更多相关《Python程序设计教程第10章课件(36页珍藏版)》请在金锄头文库上搜索。

1、第第10章网络编程章网络编程课程描述课程描述课程描述课程描述随着随着随着随着InternetInternetInternetInternet技术的应用技术的应用技术的应用技术的应用和普及,人类社会已经进和普及,人类社会已经进和普及,人类社会已经进和普及,人类社会已经进入了信息化的网络时代。入了信息化的网络时代。入了信息化的网络时代。入了信息化的网络时代。大多数应用程序都是运行大多数应用程序都是运行大多数应用程序都是运行大多数应用程序都是运行在网络环境下,能够开发在网络环境下,能够开发在网络环境下,能够开发在网络环境下,能够开发网络应用程序是程序员的网络应用程序是程序员的网络应用程序是程序员的网

2、络应用程序是程序员的必备技能。本章介绍必备技能。本章介绍必备技能。本章介绍必备技能。本章介绍PythonPythonPythonPython网络编程的方法。网络编程的方法。网络编程的方法。网络编程的方法。本章知识点本章知识点10.1 10.1 网络通信模型和网络通信模型和TCP/IPTCP/IP协议簇协议簇10.2 Socket10.2 Socket编程编程10.1 网络通信模型和网络通信模型和TCP/IP协议簇协议簇10.1.1 OSI10.1.1 OSI参考模型参考模型11.1.2 11.1.2 关系数据库关系数据库10.1.1 OSI参考模型参考模型 OSI参考模型的通信过程参考模型的通

3、信过程 PDU在在OSI参考模型中的特定名称参考模型中的特定名称OSI参考模型中的层次PDU的特定名称传输层数据段(Segment)网络层数据包(Packet)数据链路层数据帧(Frame)物理层比特(Bit)10.1.2 TCP/IP协议簇体系结构协议簇体系结构1网络接口层网络接口层p在在TCP/IPTCP/IP参考模型中,网络接口参考模型中,网络接口层位于最低层。它负责通过网络层位于最低层。它负责通过网络发送和接收发送和接收IPIP数据报。网络接口数据报。网络接口层包括各种物理网络协议,例如层包括各种物理网络协议,例如局域网的局域网的EthernetEthernet(以太网)协(以太网)协

4、议、议、Token ringToken ring(令牌环)协议,(令牌环)协议,分组交换网的分组交换网的X.25X.25协议等。协议等。2网络层网络层p在在TCP/IPTCP/IP参考模型中,网络层位于第参考模型中,网络层位于第2 2层。它负责将源主机的报文分组发送到层。它负责将源主机的报文分组发送到目的主机,源主机与目的主机可以在一目的主机,源主机与目的主机可以在一个网段中,也可以在不同的网段中。个网段中,也可以在不同的网段中。网络层包括下面网络层包括下面4个核心协议个核心协议pIPIP(Internet ProtocolInternet Protocol,网际协议):主要任务是对数据包进行

5、,网际协议):主要任务是对数据包进行寻址和路由,把数据包从一个网络转发到另一个网络。寻址和路由,把数据包从一个网络转发到另一个网络。pICMPICMP(Internet Control Message ProtocolInternet Control Message Protocol,网际控制报文协议),网际控制报文协议):用于在:用于在IPIP主机和路由器之间传递控制消息。控制消息是指网络主机和路由器之间传递控制消息。控制消息是指网络是否连通、主机是否可达、路由是否可用等网络本身的消息。这是否连通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据

6、的传递起些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。着重要的作用。pARPARP(Address Resolution ProtocolAddress Resolution Protocol,地址解析协议):可以通,地址解析协议):可以通过过IPIP地址得知其物理地址(地址得知其物理地址(MacMac地址)的协议。在地址)的协议。在TCP/IPTCP/IP网络环境网络环境下,每个主机都分配了一个下,每个主机都分配了一个3232位的位的IPIP地址,这种互联网地址是在地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在物理网络上传网际范围标识主机的一种逻

7、辑地址。为了让报文在物理网络上传送,必须知道对方目的主机的物理地址。这样就存在把送,必须知道对方目的主机的物理地址。这样就存在把IPIP地址变地址变换成物理地址的地址转换问题。换成物理地址的地址转换问题。pRARPRARP(Reverse Address Resolution ProtocolReverse Address Resolution Protocol,逆向地址解析协,逆向地址解析协议):该协议用于完成物理地址向议):该协议用于完成物理地址向IPIP地址的转换。地址的转换。3传输层传输层在在TCP/IPTCP/IP参考模型中,传输层位于第参考模型中,传输层位于第3 3层。它负责层。它

8、负责在应用程序之间实现端到端的通信。传输层中定在应用程序之间实现端到端的通信。传输层中定义了下面两种协议。义了下面两种协议。pTCPTCP:是一种可靠的面向连接的协议,它允许将:是一种可靠的面向连接的协议,它允许将一台主机的字节流无差错地传送到目的主机。一台主机的字节流无差错地传送到目的主机。TCPTCP协议同时要完成流量控制功能,协调收发双协议同时要完成流量控制功能,协调收发双方的发送与接收速度,达到正确传输的目的。方的发送与接收速度,达到正确传输的目的。pUDPUDP:是一种不可靠的无连接协议。与:是一种不可靠的无连接协议。与TCPTCP相比,相比,UDPUDP更加简单,数据传输速率也较高

9、。当通信网更加简单,数据传输速率也较高。当通信网的可靠性较高时,的可靠性较高时,UDPUDP方式具有更高的优越性。方式具有更高的优越性。4应用层应用层在在TCP/IPTCP/IP参考模型中,应用层位于最高层,其中包括了所有与网络相关的高层协议。参考模型中,应用层位于最高层,其中包括了所有与网络相关的高层协议。常用的应用层协议说明如下。常用的应用层协议说明如下。pTelnetTelnet(Teletype NetworkTeletype Network,网络终端协议):用于实现网络中的远程登录功能。,网络终端协议):用于实现网络中的远程登录功能。pFTPFTP(File Transfer Pro

10、tocolFile Transfer Protocol,文件传输协议):用于实现网络中的交互式文件,文件传输协议):用于实现网络中的交互式文件传输功能。传输功能。pSMTPSMTP(Simple Mail Transfer ProtocolSimple Mail Transfer Protocol,简单邮件传输协议):用于实现网络中,简单邮件传输协议):用于实现网络中的电子邮件传送功能。的电子邮件传送功能。pDNSDNS(Domain Name SystemDomain Name System,域名系统):用于实现网络设备名称到,域名系统):用于实现网络设备名称到IPIP地址的映射。地址的映射

11、。pSNMPSNMP(Simple Network Management ProtocolSimple Network Management Protocol,简单网络管理协议):用于管理与,简单网络管理协议):用于管理与监视网络设备。监视网络设备。pRIPRIP(Routing Information ProtocolRouting Information Protocol,路由信息协议):用于在网络设备之间交,路由信息协议):用于在网络设备之间交换路由信息。换路由信息。pNFSNFS(Network File SystemNetwork File System,网络文件系统):用于网络中不

12、同主机之间的文件共,网络文件系统):用于网络中不同主机之间的文件共享。享。pHTTPHTTP(Hyper Text Transfer ProtocolHyper Text Transfer Protocol,超文本传输协议):这是,超文本传输协议):这是互联网互联网上应用最上应用最为广泛的一种网络协议。所有的为广泛的一种网络协议。所有的WWWWWW文件都必须遵守这个标准。设计文件都必须遵守这个标准。设计HTTPHTTP的最初目的最初目的是为了提供一种发布和接收的是为了提供一种发布和接收HTMLHTML页面的方法。页面的方法。10.2 Socket编程编程p10.2.1 Socket10.2.1

13、 Socket的工作原理和基本的工作原理和基本概念概念p10.2.2 10.2.2 基于基于TCPTCP的的SocketSocket编程编程p10.2.3 10.2.3 基于基于UDPUDP的的SocketSocket编程编程10.2.1 Socket的工作原理和基本概念的工作原理和基本概念pSocketSocket的中文翻译是套接字,它是的中文翻译是套接字,它是TCP/IPTCP/IP网网络环境下应用程序与底层通信驱动程序之间络环境下应用程序与底层通信驱动程序之间运行的开发接口,它可以将应用程序与具体运行的开发接口,它可以将应用程序与具体的的TCP/IPTCP/IP隔离开来,使得应用程序不需

14、要了隔离开来,使得应用程序不需要了解解TCP/IPTCP/IP的具体细节,就能够实现数据传输。的具体细节,就能够实现数据传输。Socket编程的层次结构编程的层次结构10.2.2 基于基于TCP的的Socket编程编程pPythonPython可以通过可以通过socketsocket模块实现模块实现SocketSocket编程。编程。在开始在开始SocketSocket编程之前,需要导入编程之前,需要导入socketsocket模块,模块,代码如下:代码如下:import socketimport socket服务器和客户机进程实现面向连接的服务器和客户机进程实现面向连接的Socket通信的过

15、程通信的过程服务器程序要先于客户机程序启动,每个步骤服务器程序要先于客户机程序启动,每个步骤中调用的中调用的Socket函数如下函数如下p1 1)调用)调用socket()socket()函数创建一个流式套接字,返回套接函数创建一个流式套接字,返回套接字号字号s s。p(2 2)调用)调用bind()bind()函数将套接字函数将套接字s s绑定到一个已知的地址,绑定到一个已知的地址,通常为本地通常为本地IPIP地址。地址。p(3 3)调用)调用listen()listen()函数将套接字函数将套接字s s设置为监听模式,准设置为监听模式,准备好接收来自各个客户机的连接请求。备好接收来自各个客

16、户机的连接请求。p(4 4)调用)调用accept()accept()函数等待接受客户端的连接请求。函数等待接受客户端的连接请求。p(5 5)如果接收到客户端的请求,则)如果接收到客户端的请求,则accept()accept()函数返回,函数返回,得到新的套接字得到新的套接字nsns。p(6 6)调用)调用recv()recv()函数接收来自客户端的数据,函数接收来自客户端的数据,调用调用send()send()函数向客户端发送数据。函数向客户端发送数据。p(7 7)与客户端的通信结束后,服务器程序可以)与客户端的通信结束后,服务器程序可以调用调用shutdown()shutdown()函数通

17、知对方不再发送或接收函数通知对方不再发送或接收数据,也可以由客户端程序断开连接。断开连数据,也可以由客户端程序断开连接。断开连接后,服务器进程调用接后,服务器进程调用closesocket()closesocket()函数关闭函数关闭套接字套接字nsns。此后服务器程序返回第。此后服务器程序返回第4 4步,继续等步,继续等待客户端进程的连接。待客户端进程的连接。p(8 8)如果要退出服务器程序,则调用)如果要退出服务器程序,则调用closesocketclosesocket()()函数关闭最初的套接字函数关闭最初的套接字s s。客户端程序在每一步骤中使用的函数如客户端程序在每一步骤中使用的函数

18、如下下(1 1)调用)调用WSAStartupWSAStartup()()函数加载函数加载Windows Windows SocketsSockets动态库,然后调用动态库,然后调用socket()socket()函数创建一个函数创建一个流式套接字,返回套接字号流式套接字,返回套接字号s s。(2 2)调用)调用connect()connect()函数将套接字函数将套接字s s连接到服务器。连接到服务器。(3 3)调用)调用send()send()函数向服务器发送数据,调用函数向服务器发送数据,调用recvrecv()()函数接收来自服务器的数据。函数接收来自服务器的数据。(4 4)与服务器的

19、通信结束后,客户端程序可以调)与服务器的通信结束后,客户端程序可以调用用close()close()函数关闭套接字。函数关闭套接字。1socket()函数函数 socket()socket()函数用于创建与指定的服务提供者绑定套接字,函数用于创建与指定的服务提供者绑定套接字,函数原型如下:函数原型如下:socket=socket=socket.socketsocket.socket( (familly,typefamilly,type) ) 参数说明如下:参数说明如下:p famillyfamilly,指定协议的地址家族,可为,指定协议的地址家族,可为AF_INETAF_INET或或AF_UN

20、IXAF_UNIX。AF_INETAF_INET家族包括家族包括InternetInternet地址,地址,AF_UNIXAF_UNIX家族用于同一台机器上的进程间通信。家族用于同一台机器上的进程间通信。p typetype,指定套接字的类型。,指定套接字的类型。套接字类型的取值套接字类型的取值套接字类型说 明SOCK_STREAM提供顺序、可靠、双向和面向连接的字节流数据传输机制,使用TCPSOCK_DGRAM支持无连接的数据报,使用UDPSOCK_RAW原始套接字,可以用于接收本机网卡上的数据帧或者数据包2bind()函数函数 pbind()bind()函数可以将本地地址与一个函数可以将本

21、地地址与一个SocketSocket绑定在一绑定在一起,函数原型如下:起,函数原型如下:socket.bindsocket.bind( address ) ( address ) p参数参数addressaddress是一个双元素元组,格式是是一个双元素元组,格式是( (host,porthost,port) )。hosthost代表主机,代表主机,portport代表端口号。代表端口号。3listen()函数函数 plisten()listen()函数可以将套接字设置为监听接入连接的状态,函数可以将套接字设置为监听接入连接的状态,函数原型如下:函数原型如下:listen(backlog);

22、listen(backlog); p参数参数backlogbacklog指定等待连接队列的最大长度。指定等待连接队列的最大长度。4accept()函数函数p在服务器端调用在服务器端调用listen()listen()函数监听接入连接后,可以函数监听接入连接后,可以调用调用accept()accept()函数来等待接受连接请求。函数来等待接受连接请求。accept()accept()的的函数原型如下:函数原型如下:connection, address = connection, address = socket.acceptsocket.accept()()p调用调用accept()accep

23、t()方法后,方法后,socketsocket会进入会进入waitingwaiting状态。状态。客户请求连接时,客户请求连接时,accept()accept()方法会建立连接并返回服方法会建立连接并返回服务器。务器。accept()accept()方法返回一个含有两个元素的元组方法返回一个含有两个元素的元组( (connection,addressconnection,address) )。第一个元素。第一个元素connectionconnection是新是新的的socketsocket对象,服务器必须通过它与客户通信;第二对象,服务器必须通过它与客户通信;第二个元素个元素 address

24、address是客户的是客户的InternetInternet地址。地址。) )5recv()函数函数 p调用调用recvrecv()()函数可以从已连接的函数可以从已连接的SocketSocket中接收数据。中接收数据。recvrecv()()的函数原型如下:的函数原型如下:bufbuf = = sock.recvsock.recv(size)(size)p参数参数socksock是接收数据的是接收数据的socketsocket对象,参数对象,参数sizesize指定指定接收数据的缓冲区的大小。接收数据的缓冲区的大小。recvrecv()()的函数的返回接的函数的返回接收的数据。收的数据。6

25、send()函数函数 调用调用send()send()函数可以在已连接的函数可以在已连接的SocketSocket上发送数上发送数据。据。send()send()的函数原型如下:的函数原型如下:sock.recvsock.recv( (bufbuf) )参数参数socksock是在已连接的是在已连接的SocketSocket上发送数据。参数上发送数据。参数bufbuf是也要已连接的是也要已连接的SocketSocket上发送数据。上发送数据。7close ()函数函数 pclose ()close ()函数用于关闭一个函数用于关闭一个SocketSocket,释放其所,释放其所占用的所有资源。

26、占用的所有资源。socket()socket()的函数原型如下:的函数原型如下:s.closesockets.closesocket(); (); p参数参数s s表示要关闭的表示要关闭的SocketSocket。【例例10-1】if _name_ = _main_: if _name_ = _main_: import socket import socket # #创建创建socketsocket对象对象 sock = sock = socket.socketsocket.socket( (socket.AF_INETsocket.AF_INET, , socket.SOCK_STREAM

27、socket.SOCK_STREAM) ) # # 绑定到本地的绑定到本地的80018001端口端口 sock.bindsock.bind(localhost, 8001)(localhost, 8001) # # 在本地的在本地的80018001端口上监听,等待连接队列的最大长度为端口上监听,等待连接队列的最大长度为5 5 sock.listensock.listen(5) (5) while True: while True:# #接受来自客户端的连接接受来自客户端的连接 connection,address = sock.accept() connection,address = soc

28、k.accept() try: try: connection.settimeout(5) connection.settimeout(5) buf = connection.recv(1024).decode(utf-8) # buf = connection.recv(1024).decode(utf-8) #接收客户端的数据接收客户端的数据 if buf = 1: # if buf = 1: # 如果接收到如果接收到11 connection.send(bwelcome to server!) connection.send(bwelcome to server!) else: else

29、: connection.send(bplease go out!) connection.send(bplease go out!) except socket.timeout: except socket.timeout: print(time out) print(time out) connection.close() connection.close()【例例10-2】if _name_ = _main_: if _name_ = _main_: import socket import socket # # 创建创建socketsocket对象对象 sock = sock = so

30、cket.socketsocket.socket( (socket.AF_INETsocket.AF_INET, , socket.SOCK_STREAMsocket.SOCK_STREAM) ) # # 连接到本地的连接到本地的80018001端口端口 sock.connectsock.connect(localhost, 8001) (localhost, 8001) import time import time time.sleeptime.sleep(2)(2)# 向服务器发送字符向服务器发送字符11 sock.sendsock.send(b1)(b1) # #打印从服务器接收的数据

31、打印从服务器接收的数据 print( print(sock.recvsock.recv(1024).decode(utf-8)(1024).decode(utf-8) sock.closesock.close() () 10.2.3 基于基于UDP的的Socket编程编程 1sendto()函数函数 使用使用sendtosendto()()函数可以实现发送数据的功能,函函数可以实现发送数据的功能,函数原型如下;数原型如下;s.sendtos.sendto(datadata,(,(addraddr,portport)参数说明如下:参数说明如下: s s,指定一个,指定一个SocketSocket

32、句柄。句柄。 datadata,要传输数据。,要传输数据。 addraddr,接收数据的计算机的,接收数据的计算机的IPIP地址。地址。 portport,接收数据的计算机的端口。,接收数据的计算机的端口。【例例10-3】import socketimport socket# #创建创建UDP SOCKETUDP SOCKETs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)port = 8000 #port = 8000 #服务器端口服务器

33、端口host = 192.168.0.101#host = 192.168.0.101#服务器地址服务器地址while True:while True: msg = input()# msg = input()# 接受用户输入接受用户输入 if not msg: if not msg: break break # # 发送数据发送数据 s.sendto(msg.encode(),(host,port) s.sendto(msg.encode(),(host,port)s.close()s.close()2recvfrom()函数函数 p使用使用recvfromrecvfrom () ()函数可

34、以实现接收数据函数可以实现接收数据的功能,函数原型如下;的功能,函数原型如下;data,addrdata,addr = = s.recvfroms.recvfrom( ( bufsizebufsize); ); p参数说明如下:参数说明如下:p s s,指定一个,指定一个SocketSocket句柄。句柄。p bufsizebufsize,接收数据的缓冲区的长度,接收数据的缓冲区的长度,单位为字节。单位为字节。p datadata,接收数据的缓冲区。,接收数据的缓冲区。p addraddr,发送数据的客户端的地址。,发送数据的客户端的地址。【例【例10-4】import socketimpor

35、t sockets = s = socket.socketsocket.socket( (socket.AF_INET,socket.SOCK_DGRAMsocket.AF_INET,socket.SOCK_DGRAM) )s.binds.bind(192.168.0.101,8000)(192.168.0.101,8000)while True:while True: data,addrdata,addr = = s.recvfroms.recvfrom(1024)(1024) if not data: if not data: print(client has exited!) print(client has exited!) break break print(received:,data,from, print(received:,data,from,addraddr) )s.closes.close()()

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号