Python程序任务式教程 2_第1页
Python程序任务式教程 2_第2页
Python程序任务式教程 2_第3页
Python程序任务式教程 2_第4页
Python程序任务式教程 2_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

网络编程与进程控制content目录01认知Socket02创建TCP服务器程序与客户端程序03创建UDP服务器程序和客户端程序04创建与使用进程05创建与使用线程认知SocketPython提供了两个级别的网络服务:低级别的网络服务支持基本的Socket,它提供了标准的BSDSocketsAPI,可以访问操作系统底层Socket接口的全部方法;高级别的网络服务支持模块SocketServer,它提供了服务器中心类,可以简化网络服务器的开发过程。认知SocketSocket又称套接字,网络应用程序通常通过Socket向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通信。Socket通信模型如图9-3所示。认知Socket1.socket()方法Python中,使用socket模块的socket()方法来创建Socket。socket()方法的基本格式如下。socket.socket([Addressfamily[,type[protocol=0]]])其中,各参数说明如下。Addressfamily:Internet进程间通信时使用AF_INET,同一台机器进程间通信时使用AF_UNIX,通常使用AF_INET。type:Socket类型,可以根据是面向连接还是无连接分为SOCK_STREAM(主要用于TCP)和SOCK_DGRAM(主要用于UDP)。protocol:该参数一般不赋值,默认值为0。认知Socket例如,创建TCP/IPSocket时,可以采用以下形式。tcpSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)创建UDP/IPSocket时,可以采用以下形式。udpSock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)认知Socket2.Socket对象的主要方法(1)Socket对象公共用途的Socket方法演示socket模块的gethostname()、gethostbyname()方法的应用运行结果认知Socket(2)服务器的Socket方法方法说明bind()绑定地址到Socket,在AF_INET下,以元组(host,port)的形式表示地址listen()开始TCP监听accept()被动接收TCP客户端连接(阻塞式),等待连接的到来认知Socket(3)客户端的Socket方法方法说明connect()主动初始化TCP服务器连接,以元组(host,port)的形式表示地址,如果连接出错,则返回socket.error错误connect_ex()开始TCP监听演示Socket对象的使用,通过客户端向浏览器和本地服务器发起请求,服务器接收到请求后,向浏览器发送“Iwishyougoodhealth.”文本内容认知Socket在浏览器地址栏中输入127.0.0.1:8080,即服务器IP地址为127.0.0.1,端口号为8080,成功连接服务器后,浏览器中显示文本内容“Iwishyougoodhealth.”。认知Socket创建TCP服务器程序与客户端程序创建TCP服务器程序导入socket模块。使用socket()方法创建一个Socket对象。使用bind()方法绑定套接字地址。使用listen()方法监听端口,进入监听过程。使用accept()方法等待并接收来自客户端的连接请求。服务器使用recv()方法读取客户端的数据。使用send()方法向客户端发送数据。调用close()方法关闭连接,释放Socket连接所占用的资源。创建TCP服务器程序与客户端程序创建TCP客户端程序入socket模块。调用socket()方法生成一个Socket对象。通过connect()方法连接服务器程序,当客户端连接到服务器后,一直等待的服务进程会被唤醒,并处理此连接。使用send()方法向服务器发送数据。客户端直接调用recv()方法来获取服务器发送过来的数据。调用close()方法将连接关闭。创建TCP服务器程序与客户端程序字符串在网络中的传输创建TCP服务器程序与客户端程序演示TCP客户端与服务器之间发送和接收数据的实现方法创建TCP服务器程序与客户端程序TCP客户端程序文件demo9-3client.py的代码如下。创建TCP服务器程序与客户端程序运行服务器程序和客户端程序之前,先打开两个Windows的“命令提示符”窗口,第1个“命令提示符”窗口模拟TCP服务器,第2个“命令提示符”窗口模拟TCP客户端。在第1个“命令提示符”窗口中执行命令“pythonD:\PyCharmProject\Unit09\demo9-3server.py”,开始运行demo9-3server.py程序,此时该窗口中会出现“服务器等待客户端连接……”的提示文字。在第2个“命令提示符”窗口中执行命令“pythonD:\PyCharmProject\Unit09\demo9-3client.py”,开始运行demo9-3client.py程序,此时该窗口中出现“请输入要发送的数据:”提示文字,输入“Hi,hello”后按“Enter”键,此时运行demo9-3server.py程序的窗口会接收到客户端发来的数据,并出现以下内容:当前连接地址为:('192.168.56.1',54995)b'Hi,hello'创建TCP服务器程序与客户端程序模拟TCP服务器的“命令提示符”窗口中出现的信息如图9-7所示。服务器会向客户端发送“Nicetohearfromyou”,客户端也会收到服务器发来的数据,模拟TCP客户端的“命令提示符”窗口中出现的信息如图9-8所示。任务描述【任务9-1】实现客户端与服务器之间的通信在PyCharm集成开发环境中创建项目Unit09。在项目Unit09中创建task9-1server.py和task9-1client.py两个Python程序文件。编写程序,使用Socket实现TCP服务器与客户端之间的通信,即客户端向服务器发送文字,服务器接收到消息后,显示消息内容并输入文字返回给客户端。任务实施【任务9-1】实现客户端与服务器之间的通信创建PyCharm项目Unit09创建Python程序文件task9-1server.py编写task9-1server.py的程序代码创建Python程序文件task9-1client.py编写task9-1client.py的程序代码任务实施【任务9-1】实现客户端与服务器之间的通信任务9-1模拟TCP服务器的“命令提示符”窗口中出现的信息如图9-9所示,模拟TCP客户端的“命令提示符”窗口中出现的信息如图9-10所示。任务描述【任务9-2】TCP服务器与客户端之间传输字符串数据在项目Unit09中创建task9-2server.py和task9-2client.py两个Python程序文件。编写程序,实现TCP服务器与客户端之间的字符串传输,即客户端连接服务器后向服务器发送一个字符串,服务器接收到字符串后再次返回这个字符串给客户端。任务实施【任务9-2】TCP服务器与客户端之间传输字符串数据1.创建Python程序文件task9-2server.py2.编写task9-2server.py的程序代码3.创建Python程序文件task9-2client.py4.编写task9-2client.py的程序代码5.运行Python程序创建UDP服务器程序和客户端程序在UDP程序中,实现UDP服务器功能的流程如下。(1)导入socket模块。(2)使用socket()方法创建一个Socket对象。(3)使用bind()方法绑定端口。(4)使用recvfrom()方法接收客户端的数据。(5)使用sendto()方法向客户端发送数据,需要使用encode()方法将字符串类型转换为字节类型。(6)调用close()方法关闭Socket,释放Socket连接所占用的资源。创建UDP服务器程序创建UDP服务器程序和客户端程序创建UDP客户端程序比较简单,对一个客户端程序而言,实现客户端功能的流程如下。(1)导入socket模块。(2)调用socket()方法生成一个Socket对象。(3)使用sendto()方法向服务器发送数据。(4)客户端直接调用recvfrom()方法来获取服务器发送过来的数据。(5)调用close()方法将Socket关闭。创建UDP客户端程序创建UDP服务器程序和客户端程序创建UDP客户端程序任务描述【任务9-3】建立UDP通信获取客户购物数量在项目Unit09中创建task9-3server.py和task9-3client.py两个Python程序文件。编写程序,建立UDP通信,获取客户购物数量,即在客户端输入购物数量,并发送给服务器,服务器接收到数据后,再发送给客户端输出。任务实施【任务9-3】建立UDP通信获取客户购物数量程序文件task9-3server.py的代码如下。任务实施【任务9-3】建立UDP通信获取客户购物数量程序文件task9-3server.py的代码如下。任务实施【任务9-3】建立UDP通信获取客户购物数量模拟UDP服务器的“命令提示符”窗口中出现的信息如图9-14所示模拟UDP客户端的“命令提示符”窗口中出现的信息如图9-15所示。创建与使用进程使用multiprocessing模块的Process类创建进程multiprocessing模块提供了Process类来创建进程对象。Process类的基本格式如下。Process([group[,target[,name[,args[,kwargs]]]]])其中,各参数说明如下。group:值为None,为以后版本而保留。target:表示当前进程启动时执行的可调用对象。name:表示当前进程实例的别名。args:表示传递给target的参数元组。kwargs:表示传递给target的参数字典。创建与使用进程使用multiprocessing模块的Process类创建进程序号方法或属性说明1is_alive()判断进程实例是否在执行2join([timeout])是否等待进程实例执行结束,或等待多少秒3start()启动进程实例(创建子进程)4run()如果没有给定target参数,对这个对象调用start()方法时,执行run()方法5terminate()不管任务是否完成,立即终止6name当前进程实例的别名,默认为Process-n,n为从1开始递增的整数7pid当前进程实例的PID值创建与使用进程使用Process的子类创建进程

对于一些简单的任务,通常使用Process类实现多进程。但是如果要处理复杂任务的进程,则通常会定义一个类,使其继承Process类,每次实例化这个类的时候,等同于实例化一个进程对象。创建与使用进程

实例9-5的代码如下。创建与使用线程

Python3的多线程多线程类似于同时执行多个不同的程序,多线程运行有如下优点(1)使用线程可以把运行时间长的程序中的任务放到后台去处理。(2)用户界面可以更加吸引人。(3)程序的运行速度可能加快。(4)在一些等待的任务的实现方面(如用户输入、文件读写等方面),线程会比较有用。(5)每个独立的线程都有一个程序运行的入口、顺序执行序列和程序运行的出口。创建与使用线程

Python3支持的线程模块Python3通过_thread和threading模块提供对线程的支持,推荐使用threading模块。Python3中,thread模块已被废弃。为了兼容性,Python3将thread重命名为“_thread”。hreading模块除了包含_thread模块中的所有方法外,还提供了以下方法。(1)threading.currentThread():用于返回当前的线程变量。(2)threading.enumerate():用于返回一个包含正在运行线程的列表。所谓的“正在运行线程”,是指启动后、结束前的线程,不包括启动前和结束后的线程。(3)threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。threading模块同样提供了Thread类来处理线程,Thread类提供了以下方法。创建与使用线程

Python3支持的线程模块threading模块同样提供了Thread类来处理线程,Thread类提供了以下方法。(1)run():用以表示线程活动的方法。(2)start():启动线程的方法。(3)join([timeout]):阻塞当前上下文环境的线程,直到调用此方法的线程结束或到达指定的timeout(可选参数)。其主要功能是实现多线程的线程独占,即只让一个线程运行。join()方法可用于阻塞另一个线程,让当前线程获得另一个线程的处理结果。(4)isAlive():返回线程的活动状态。(5)getName():返回线程名称。(6)setName():设置线程名称。创建与使用线程

Python中创建线程的方式

1.使用threading模块的Thread类创建线程threading模块提供了一个Thread类来创建线程。Thread类的基本格式如下。Thread([group[,target[,name[,args[,kwargs]]]]])其中,各参数说明如下。group:值为None,为以后版本而保留。target:表示一个可调用对象,线程启动时,run()方法调用此对象,默认值为None,表示不调用任何内容。name:表示当前线程名称,默认创建一个名称为“Thread-n”的线程。args:表示传递给target的参数元组。kwargs:表示传递给target的参数字典。创建与使用线程

Python中创建线程的方式

演示创建3个线程,分别使用for循环执行start()和join()方法,实例代码如下创建与使用线程

Python中创建线程的方式

2.使用threading模块的Thread类的子类创建线程定义一个从threading.Thread继承的子类,将其实例化后调用start()方法启动新线程。演示使用threading模块的Thread类的子类创建线程的方式,实例代码如下创建与使用线程

Python中创建线程的方式

3.调用_thread模块中的start_new_thread()函数产生新线程调用_thread模块中的start_new_th

温馨提示

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

评论

0/150

提交评论