版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章网络编程和多线程主讲夏敏捷计算机学院副教授9.1网络编程基础9.1.1互联网TCP/IP协议IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地址如实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。9.1.2IP协议IP数据包TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等。UDP协议,同样是建立在IP协议之上,但是UDP协议面向无连接的通信协议,不保证数据包的顺利到达,不可靠传输。所以效率比TCP要高。9.1.3TCP和UDP协议面向连接TCP的时序图无连接UDP的时序图网络上两个计算机之间的数据通信,归根到底就是不同主机的进程交互,而每个主机的进程都对应着某个端口。也就是说,单独靠IP地址的无法完成通信的,必须要有IP和端口。9.1.4端口Socket是网络编程的一个抽象概念。Socket是套接字的英文名称,主要是用于网络通信编程。80年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大学Berkeley分校提供了资金,让他们在UNIX操作系统下实现TCP/IP协议。在这个项目中,研究人员为TCP/IP网络通信开发了一个API(应用程序接口)。这个API称为Socket(套接字)。Socket是TCP/IP网络最为通用的API。任何网络通讯都是通过Socket来完成的。9.1.5Socket例如创建TCPSocket:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)创建UDPSocket:s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
日常生活中大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。9.2.1TCP客户端编程【例9-1】访问新浪的TCP客户端程序。9.2TCP编程9.2.2TCP服务器端编程服务器端和客户端编程相比,服务器编程就要复杂一些。服务器端进程首先要绑定一个端口并监听来自其他客户端的连接。如果某个客户端连接过来了,服务器就与该客户端建立Socket连接,随后的通信就靠这个Socket连接了。【例9-2】编写一个简单的TCP服务器程序,它接收客户端连接,把客户端发过来的字符串加上Hello再发回去。图9-4服务器程序效果
图9-5客户端程序效果9.3UDP编程【例9-3】编写一个简单的UDP演示下棋程序。服务器端把UDP客户端发来的下棋x,y坐标信息显示出来,并把x,y坐标加1后(模拟服务器端下棋),再发给UDP客户端。9.4多线程编程线程是操作系统可以调度的最小执行单位,够执行并发处理。通常是将程序拆分成2个或多个并发运行的线程,即同时执行多个操作。例如,使用线程同时监视用户并发输入,并执行后台任务等。1.概念进程是操作系统中正在执行的应用程序的一个实例,操作系统把不同的进程(即不同程序)分离开来。每个进程至少包含一个线程,它从程序开始执行,直到退出程序,主线程结束,该进程也被从内存中卸载。主线程在运行过程中还可以创建新的线程,实现多线程的功能。9.4.1进程和线程9.4.1进程和线程2.多线程优点多线程类似于同时执行多个不同程序,多线程运行有如下优点:(1)使用线程可以把占据长时间的程序中的任务放到后台去处理。(2)用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度(3)程序的运行速度可能加快(4)在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。9.4.2创建线程Python中使用线程有两种方式:函数或者用类来创建线程对象。1.start_new_thread()函数创建线程调用_thread模块中的start_new_thread()函数来产生新线程。格式如下:_thread.start_new_thread(function,args[,kwargs])【例9-4】使用thread模块中的start_new_thread()函数来创建线程。2.Thread类创建线程threading线程模块封装了_thread模块,并提供更多功能,虽然可以使_thread模块中start_new_thread()函数创建线程,但建议使用threading模块。threading模块提供了Thread类来创建和处理线程,格式如下:线程对象=threading.Thread(target=线程函数,args=(参数列表),name=线程名,group=线程组)线程名和线程组都可以省略。【例9-5】使用threading.Thread类来创建线程例子。9.4.3线程同步如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。使用Threading的Lock(指令锁)和Rlock(可重入锁)对象可以实现简单的线程同步。【例9-7】使用指令锁实行多个线程同步。9.4.4定时器Timer定时器(Timer)是Thread的派生类,用于在指定时间后调用一个函数,具体方法如下:timer=threading.Timer(指定时间t,函数f)timer.start()执行timer.start()后,程序会在指定时间t后启动线程执行函数f。【例9-8】使用定时器Timer的例子。importthreadingimporttimedeffunc():print(time.ctime()) #打印出当前时间print(time.ctime())timer=threading.Timer(5,func)timer.start()该程序可实现延迟5秒后调用func方法的功能。9.5网络编程案例——网络五子棋主讲夏敏捷计算机学院副教授网络五子棋游戏简介建立基于UDP的Socket编程方法来制作网络五子棋程序。游戏时服务器端首先启动,当客户端连接后,服务器端可以走棋。用户根据提示信息,轮到自己下棋才可以在棋盘上落子,同时下方标签会显示对方的走棋信息,服务器端用户通过“退出游戏”按钮可以结束游戏网络五子棋游戏简介需要输入服务器IP地址(这里采用默认地址本机地址),如果正确且服务器启动则可以“连接”服务器。连接成功后客户端用户根据提示信息,轮到自己下棋才可以在棋盘上落子,同样可以通过“退出游戏”按钮结束游戏。通讯协议(1)move|下的棋子位置坐标(x,y)例如:“move|7,4”表示对方下子位置坐标(7,4)。(2)over|那方赢的信息例如:“over|黑方你赢了”表示黑方赢了。(3)exit|表示对方离开了,游戏结束。(4)join|连接服务器程序中根据接收的信息(当然都是字符串),通过字符串.split("|")获取消息类型(move,join,exit或者over),从中区分出“输赢信息over”,“下的棋子位置信息move”等,服务器端程序设计的步骤8.接收消息本程序关键部分就是接收消息data,从data字符串.split("|")中分割出消息类型(move,join,exit或者over)。如果是'join',是客户端连接服务器请求;如果是'exit',是对方客户端退出信息;如果是'move',是客户端走的位置信息;如果是'over',是对方客户端赢的信息。这里重点是处理对方走棋信息如“move|7,4”,通过字符串.split(",")分割出(x,y)坐标。服务器端程序设计的步骤9.发送消息发送消息代码很简单,仅仅调用socket的sendto函数,就可以把按协议写的字符串信息发出。defsendMessage(pos): #发送消息
globalsglobaladdrs.sendto(pos.encode(),addr)10.启动线程接收客户端的消息defstartNewThread():#启动一个新线程来接收客户器端的消息thread=threading.Thread(target=receiveMessage,args=())thread.setDaemon(True);thread.start();服务器端程序设计的步骤客户端程序设计的步骤步骤与服务器相似。接收消息data,从data字符串.split("|")中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 眼镜验光师岗中沟通协调考核试卷含答案
- 食用菌生产工合规测试考核试卷含答案
- 钢材热处理工岗位标准化考核试卷含答案
- 砂石骨料生产工岗中安全应急考核试卷含答案
- 2026年秋季高一数学必修第一册教学计划
- 危重症性高钠血症总结2026
- 九年级道德与法治下册 第1单元 构建和谐社会 第1课 加强社会建设 第1框 谋社会发展教学设计 北师大版
- 物业管理变更运营服务合同
- 三年级数学教学的工作计划5篇
- 小学第8课飞行梦工厂教案
- (2026年)急性胸痛的快速处理课件
- 肝胆外科围手术期护理常规
- 围手术期记录书写规范
- 61.食品加工过程微生物控制程序
- 托盘标准化堆码管理规范
- 2026湖北武汉出入境边防检查站警务辅助人员招聘笔试参考题库含答案解析
- 2026年销售人员薪酬激励制度范本
- 2026年首创水务笔试+面试全套题库及完整参考答案
- 职业暴露评价的队列设计
- 规范用药评估制度及流程
- 2025中国石化秋季校园招聘统一初选考试笔试试题附答案解析
评论
0/150
提交评论