Python编程及项目开发课件 第7章 Python网络编程_第1页
Python编程及项目开发课件 第7章 Python网络编程_第2页
Python编程及项目开发课件 第7章 Python网络编程_第3页
Python编程及项目开发课件 第7章 Python网络编程_第4页
Python编程及项目开发课件 第7章 Python网络编程_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第7章Python网络编程从基础到实践本章重点与难点本章重点OSI参考模型TCP/IP协议体系Socket编程基础urllib包和http包的使用ftplib包的使用本章难点使用Socket建立服务器端与客户端程序使用SocketServer建立服务器使用urllib包、httplib包访问网站使用ftplib包访问FTP服务器目录7.1网络模型介绍OSI七层参考模型TCP/IP协议体系7.2Socket编程Socket基础与方法/TCP与UDP实践SocketServer模块7.3使用urllib包访问网站发送GET与POST请求7.4使用http包访问网站底层HTTP协议操作7.5使用ftplib包访问FTP服务器文件上传与下载7.1网络模型介绍了解OSI与TCP/IP模型,是掌握网络编程的基础。7.1.1OSI七层参考模型标准定义与背景为解决不同厂商计算机之间的互联互通问题,国际标准化组织(ISO)于1978年提出了“开放系统互联参考模型”(OSI/RM)。分层设计思想模型采用分层设计思想,将复杂的网络通信过程分解为七个相对独立的层次,每个层次专注于特定的通信功能,从而大大降低了系统设计的复杂度。OSI模型:物理层与数据链路层物理层(Layer1)负责处理物理介质上的信号传输,定义电缆、光纤等物理设备标准。传输单位:比特(bit)数据链路层(Layer2)将物理层信号组成帧(Frame),进行检错和纠错。确保数据在相邻节点间的可靠传输。OSI模型:网络层与传输层网络层(Layer3)负责在不同网络之间路由数据包(Packet)核心功能:通过IP地址寻址,找到目标主机核心协议:IP协议传输层(Layer4)建立源主机与目标主机应用程序间的端到端通信传输单位:报文(Segment)核心协议:面向连接的TCP、无连接的UDPOSI模型:会话层、表示层与应用层会话层(Layer5)负责建立、管理和终止表示层实体之间的通信会话。它就像网络通信中的“握手”与“挥手”,确保通信的同步与有序。表示层(Layer6)负责处理在两个通信系统中交换信息的表示方式。主要功能包括数据加密、解密、压缩、解压缩以及格式转换,确保数据能被正确理解。应用层(Layer7)直接为应用程序提供网络服务,如文件传输、电子邮件、远程登录等。常见协议包括HTTP、FTP、SMTP等,是用户最直接接触的层面。7.1.2TCP/IP协议体系互联网基石TCP/IP协议簇是互联网的核心通信标准,它成功实现了全球范围内各类网络的互联互通,是现代互联网通信的基础架构。庞大的协议家族虽然名称中只包含TCP和IP,但它实际上是一个包含上百个协议的协议族,涵盖了从底层网络接口到高层应用的全套标准。异构网络互联其核心目标是屏蔽底层物理网络的差异,实现异构网络和异种计算机之间的无缝互联通信,让全球网络成为一个整体。TCP/IP四层模型应用层(ApplicationLayer)对应OSI的应用层、表示层和会话层。提供HTTP、FTP、SMTP等应用服务,直接为用户的应用程序提供网络服务。传输层(TransportLayer)对应OSI的传输层。提供TCP和UDP协议,负责端到端的通信,确保数据可靠或快速传输。网络层(InternetLayer)对应OSI的网络层。核心是IP协议,负责数据包的路由选择,使数据能够在复杂的网络环境中找到目的地。网络接口层(NetworkInterfaceLayer)对应OSI的数据链路层和物理层。负责将IP数据包封装成帧,并通过物理网络(如以太网、Wi-Fi)发送。TCP/IP与OSI模型的对应关系应用层功能整合TCP/IP模型的应用层整合了OSI模型中的应用层、表示层和会话层这三层的功能,简化了上层交互逻辑。网络接口层简化TCP/IP的网络接口层对应OSI模型的数据链路层和物理层,将底层的硬件访问和帧传输统一封装。理解模型对应关系清晰的层级映射关系有助于我们深入理解网络协议的工作原理,是掌握网络通信机制的关键基础。TCP/IP核心协议介绍IP网络层协议负责将数据包从源地址传送到目标地址,提供无连接的、尽力而为的服务,是网络通信的基石。TCP传输层协议面向连接,提供可靠的、有序的字节流传输服务。通过三次握手建立连接,四次挥手断开连接,确保数据准确无误。UDP传输层协议无连接,提供不可靠的数据报传输服务。特点是速度快、开销小,适用于对实时性要求高的场景(如视频通话)。TCP/IP应用层协议介绍HTTP/HTTPS超文本传输协议,用于访问网页,是互联网内容传输的基础。FTP文件传输文件传输协议,专门用于在网络上进行文件的上传和下载操作。SMTP/POP3/IMAP电子邮件协议族,负责邮件的发送(SMTP)和接收(POP3/IMAP)。DNS域名解析域名系统,负责将易于记忆的域名转换为计算机识别的IP地址。Telnet/SSH远程登录协议,允许用户通过网络远程控制和管理服务器。7.2Socket编程Socket是网络通信的基石,是实现不同主机间数据交换的接口。7.2.1什么是Socket核心定义Socket本质上是网络中两个端点程序之间的“信息通道”。它是网络通信的基本组件,屏蔽了底层复杂的协议细节,让不同主机间的通信变得简单直接。工作模式包含服务器端和客户端两种角色。服务器Socket创建后处于监听状态,等待连接;一旦建立连接,双方即可通过Socket进行双向的数据传输。协议接口SocketAPI位于应用层和传输层之间,提供了灵活的协议选择。开发者可以根据需求选择TCP(可靠传输)或UDP(高效传输)协议来实现网络通信。创建Socket对象创建TCPSocketimportsocket#AF_INET表示IPv4,SOCK_STREAM表示TCP协议tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)创建UDPSocketimportsocket#SOCK_DGRAM表示使用UDP协议udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)Socket模块常用方法服务器端方法bind((host,port))绑定地址(主机,端口号对)到套接字listen([backlog])开始TCP监听,backlog指定最大连接数accept()被动接受TCP客户端连接,返回(conn,address)客户端方法connect((host,port))主动初始化TCP服务器连接公共方法recv(bufsize)接收TCP数据,返回字节对象send(bytes)发送TCP数据sendall(bytes)完整发送TCP数据close()关闭套接字7.2.3基于TCP的Socket服务器端流程1.创建Socket使用socket.socket()创建TCPSocket对象,初始化通信端点。2.绑定地址调用bind()方法,将Socket绑定到指定的IP地址和端口号。3.开始监听调用listen()方法,使服务器进入监听状态,准备接受连接。4.接受连接调用accept()阻塞等待,建立连接后返回新的Socket对象。5.收发数据使用recv()和send()方法,通过新Socket与客户端进行数据交互。6.关闭连接通信结束后,调用close()关闭Socket,释放资源。TCP服务器端代码示例server.pyimportsocket#定义主机和端口HOST=''#本地回环地址PORT=8888#创建Socket对象并绑定监听server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_socket.bind((HOST,PORT))server_socket.listen(10)#接受连接并收发数据conn,addr=server_socket.accept()data=conn.recv(1024)conn.sendall("Hello,Client!".encode('utf-8'))conn.close()创建与绑定使用socket.socket()创建TCP套接字,通过bind()方法将其绑定到指定的IP地址和端口上。监听与连接调用listen()开始监听,accept()方法会阻塞程序,直到有客户端连接并返回新的连接对象。数据交互通过recv()接收客户端数据,处理后使用sendall()发送响应,最后关闭连接释放资源。基于TCP的Socket客户端流程01.创建Socket使用socket.socket()方法创建一个TCPSocket对象,这是通信的基础。02.连接服务器调用connect()方法,传入服务器的IP地址和端口号,建立网络连接。03.收发数据利用send()发送请求数据,使用recv()接收服务器响应,完成交互。04.关闭连接通信结束后,调用close()方法关闭Socket,释放系统资源。TCP客户端代码示例importsocket#定义服务器地址和端口HOST=''PORT=8888#创建Socket对象并连接服务器client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client_socket.connect((HOST,PORT))#发送数据并接收响应client_socket.sendall("Hello,Server!".encode('utf-8'))data=client_socket.recv(1024)client_socket.close()建立连接创建Socket对象后,调用connect()方法连接到服务器指定的IP地址和端口。数据交互使用sendall()发送数据,recv()接收服务器响应。注意数据需要进行编码和解码。关闭连接通信结束后,务必调用close()方法释放资源,关闭套接字连接。7.2.4基于UDP的Socket编程UDP是无连接的协议,编程模型比TCP更简单,无需建立和维护连接,每次发送数据需指定目标地址。UDP服务器流程1.创建Socket→2.绑定地址→3.循环收发数据→4.关闭SocketUDP客户端流程1.创建Socket→2.循环发送数据并接收响应→3.关闭SocketUDP服务器端代码示例importsocket#定义地址和端口address=('',10000)#创建UDPSocket对象s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#绑定地址并监听s.bind(address)whileTrue:data,addr=s.recvfrom(2048)s.sendto("Response".encode(),addr)s.close()创建与绑定使用socket.SOCK_DGRAM参数创建UDP套接字,并绑定到指定的IP地址和端口,启动监听。数据接收与响应通过recvfrom()接收数据,该方法会同时返回数据内容和客户端地址;随后使用sendto()将响应发送回客户端。非阻塞特性UDP是无连接协议,服务器无需建立连接即可直接收发数据,适合对实时性要求较高的场景。UDP客户端代码示例udp_client.pyimportsocket#定义服务器地址和端口addr=('',10000)#创建UDPSocket对象client_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)whileTrue:data=input("输入数据(空行退出):")ifnotdata:breakclient_socket.sendto(data.encode('utf-8'),addr)response,_=client_socket.recvfrom(2048)print(f"收到响应:{response.decode('utf-8')}")

client_socket.close()无连接通信客户端无需建立连接,直接使用sendto()方法将数据发送到指定的服务器地址和端口。数据发送与接收发送数据前需编码为字节流,接收响应后需解码。recvfrom()方法会阻塞等待服务器响应。资源释放通信结束后,务必调用close()方法关闭Socket,释放系统资源。7.2.5用SocketServer建立服务器高级封装模块SocketServer是Python标准库中的高级模块,它对底层Socket接口进行了封装,提供了更简洁的方式来创建网络服务器。多协议支持支持多种服务器类型,包括TCP服务器和UDP服务器,能够满足不同场景下的网络通信需求。高效并发处理内置支持多线程和多进程处理并发请求,极大地简化了服务器端的并发开发工作,提升了服务性能。SocketServer代码示例(TCP服务器)importsocketserver

#定义请求处理类,继承自BaseRequestHandlerclassMyTCPHandler(socketserver.BaseRequestHandler):defhandle(self):self.data=self.request.recv(1024).strip()print(f"客户端{self.client_address}发送:{self.data}")self.request.sendall("HelloServer!".encode())

if__name__=="__main__":HOST,PORT="",9999withsocketserver.TCPServer((HOST,PORT),MyTCPHandler)asserver:server.serve_forever()定义处理类继承自BaseRequestHandler,必须实现handle()方法,该方法在每次客户端连接时被触发。创建服务器实例实例化TCPServer,绑定地址和端口,并指定自定义的处理类MyTCPHandler。启动服务调用serve_forever()方法启动服务器,使其进入永久运行状态,等待客户端连接。7.3使用urllib包访问网站urllib是Python内置的HTTP请求库,用于获取网络资源。urllib包介绍与简单示例核心模块介绍urllib是Python内置的HTTP请求库,无需额外安装即可使用。urllib.request:这是最常用的模块,提供了打开和读取URL的功能,能够模拟浏览器发送请求并获取响应。获取网页内容示例(Python)fromurllibimportrequest#定义要访问的URLurl=''#发送请求并获取响应response=request.urlopen(url)#读取并解码内容html=response.read().decode('utf-8')print(html)urllib:发送带参数的GET请求当需要发送带查询参数的GET请求时,可以使用urllib.parse.urlencode()来构建参数。fromurllibimportrequest,parse

#基础URLurl='/search'

#定义查询参数params={'q':'Python网络编程','page':1}

#编码参数并构建完整URLencoded_params=parse.urlencode(params)full_url=f"{url}?{encoded_params}"

#发送请求response=request.urlopen(full_url)urllib:发送POST请求核心要点发送POST请求时,需将表单数据编码后作为data参数传入。使用parse.urlencode()将字典转换为URL编码格式。通过request.Request对象设置请求方法为POST。代码实现示例#导入模块与定义数据fromurllibimportrequest,parsedata={'username':'user','password':'pass'}#编码数据并创建请求对象encoded_data=parse.urlencode(data).encode('utf-8')req=request.Request(url,data=encoded_data,method='POST')#发送请求并获取响应response=request.urlopen(req)7.4使用http包访问网站http包提供了更底层的HTTP协议访问能力,允许精细控制请求环节。http包介绍与简单示例使用http.client模块创建HTTP连接并发送请求的基础示例importhttp.client#创建HTTPS连接对象conn=http.client.HTTPSConnection("")#发送GET请求conn.request("GET","/")#获取响应并处理response=conn.getresponse()print(f"状态:{response.status}")print(response.read().decode('utf-8'))#关闭连接conn.close()7.5使用ftplib包访问FTP服务器ftplib模块用于实现FTP协议的客户端操作。ftplib包介绍与连接示例核心功能概述使用ftplib.FTP类建立与服务器的连接支持标准的FTP协议操作,包括登录、上传、下载等提供简洁的API接口,易于集成到自动化脚本中Python连接示例#导入模块并建立连接fromftplibimportFTPftp=FTP('')ftp.login(user='user',passwd='pass')print(ftp.getwelcome())ftp.quit()

温馨提示

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

评论

0/150

提交评论