资源预览内容
第1页 / 共50页
第2页 / 共50页
第3页 / 共50页
第4页 / 共50页
第5页 / 共50页
第6页 / 共50页
第7页 / 共50页
第8页 / 共50页
第9页 / 共50页
第10页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十一章 系统升级,章节任务,任务:升级更新系统,章节目标,了解组网、多线程及委托的知识 学习如何通过Winform访问 Internet 掌握套接字编程,系统做好之后,还需不断的维护。本章所做的升级程序能使用户方便地更新客户端系统,使维护更加方便。,10.1 背景知识介绍,1 组网 组网是将许多设备(如计算机、打印机和工作站)连接成一个网络以共享资源。如图所示,将一台打印机物理连接至某台计算机,然后将所有的计算机连接后组成一个网络。这样,每台计算机通过网络都可以共享这台打印机,从而减少了成本,节约了费用。 在该网络中,直接连接打印机的计算机是服务器,其它计算机是客户端,二者是提供服务和享有服务的关系。,2 统一资源标识符 .NET 框架使用统一资源标识符 (URI) 来标识图所请求的 Internet 资源和通讯协议。URI 至少由三个(也可能是四个)片段组成:方案标识符(标识用于请求和响应的通讯协议)、服务器标识符(由域名系统 (DNS) 主机名或 TCP 地址组成,用于唯一标识 Internet 上的服务器)、路径标识符(定位服务器上请求的信息)以及可选的查询字符串(将信息从客户端传送到服务器)。,3 Internet 应用程序 Internet 应用程序大体上分为两类:客户端应用程序和服务器应用程序。典型的 Internet 客户端-服务器应用程序是万维网,在万维网中,人们使用浏览器来访问世界各地的 Web 服务器上存储的文档和其他数据。 应用程序并不限于仅充当其中的一个角色;例如,大家所熟悉的中间层应用程序服务器通过请求其他服务器的数据来响应客户端的请求,在这种情况中,它既作为服务器,也作为客户端。 客户端应用程序通过标识所请求的 Internet 资源以及用于该请求和响应的通讯协议来发出请求。如有必要,客户端还提供完成请求所需的任何附加数据,例如代理位置或身份验证信息(用户名、密码等)。只要构成了请求,就可以将该请求发送到服务器。,4 多线程 (1)基本概念 进程是指在系统中正在运行的一个应用程序。进程包括运行中的程序和程序所使用到的内存和系统资源,一个进程是由多个线程组成的。 线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 多线程:一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。,(2) 多线程的优劣 优点:可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。 缺点:线程也是程序,所以线程需要占用内存,线程越多占用内存也越多; 多线程需要协调和管理,所以需要CPU时间跟踪线程; 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;线程太多会导致控制太复杂,最终可能造成很多Bug;,(3)控制线程的类和方法 在.NET中,多线程的功能定义在System.Threading命名空间中。要使用多线程,必须先声明引用此命名空间。具体使用的类是:System.Threading.Thread,Thread类的方法如下所列。 Start() :启动一个线程 Sleep(int):静态方法,暂停当前线程指定的毫秒数 Abort() :通常使用该方法来终止一个线程 Join():禁止调用线程,直到线程终止 Interrupt():中止处于Sleep或者Join线程状态的线程 Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复 Resume() :恢复被Suspend()方法挂起的线程的执行,(4) Thread.ThreadState 属性 使用线程的ThreadState属性可以确定线程当前的状态,这个状态将是ThreadState枚举中指定的一个值,如下所列。 Aborted:线程已停止 AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止 Background:线程在后台执行 Running:线程正在正常运行 Stopped:线程已经被停止 StopRequested:线程正在被要求停止 Suspended:线程已经被挂起 SuspendRequested:线程正在要求被挂起,但是未来得及响应 Unstarted:未调用Thread.Start()开始线程的运行 WaitSleepJoin:线程因为调用了Wait(),Sleep()或Join()等方法处于封锁状态,(5)线程的生命周期 与人有生老病死一样,线程也同样要经历开始(等待)、运行、挂起、封锁和停止几种不同的状态。这几种状态都可以通过Thread类中的方法进行控制。下图是几种状态之间的转换和相关的方法。,(6)线程的优先级 在一个应用程序中可能存在多个线程。如果创建了多个线程并要执行这些线程,那操作系统如何知道先运行哪一个线程?解决办法是可以对每个线程都指定优先级。 Thread类中有一个ThreadPriority属性,它用来设置优先级,但不能保证操作系统会接受该优先级。线程的优先级由高到低分别是Highest,AboveNormal,Normal,BelowNormal,Lowest。系统默认为ThreadPriority.Normal。 指定优先级的代码是:myThread.Priority=ThreadPriority.Lowest;,(7) 线程实例 演示线程实例。程序启动后,开始运行主线程,接着启动子线程,然后让主线程休眠1ms后,终止子线程,主线程等待直到子线程结束。最后程序又重启终止的子线程,则产生异常。 【例11-1】主、子线程运行实例。,5 Control.Invoke 在多线程的WinForms程序中,通过非创建控件的线程调用控件的的属性和方法是非法的,所有跨进程的调用必须被明确地排列至创建控件的线程中(通常为主线程)。因为从另外一个线程操作windows窗体上的控件(运行在主线程),就会和主线程产生竞争,造成不可预料的结果,甚至死锁。所以 windows GUI编程有一个规则,就是只能通过创建控件的线程来操作控件的数据。 因此,.net为解决这个问题,由Control类提供了Invoke方法,实现了其它线程更新GUI界面控件的机制。这样,如果从线程外操作windows窗体控件,就可使用Invoke方法,通过一个委托把调用封送到控件所属的线程上执行。,Invoke方法需要一个委托对象作为参数(委托是一个可以对方法进行引用的类)。调用者通过Invoke方法中的委托参数就可以把需要调用的函数地址封送给界面线程。这些方法里面如果包含了更改控件状态的代码,那么由于最终执行这个方法的是界面线程,从而避免了竞争条件,避免了不可预料的问题。 与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。Invoke方法中不带参数和带参数的委托签名如下: Control.Invoke(Delegate Method) Control.Invoke(Delegate Method, params object args),6 tcp/ip 协议和端口 (1) TCP/IP 协议 TCP/IP协议是物理网上的一组完整的网络协议。协议的基本传输单位是数据包,TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头(就像给一封信加上信封),包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式,IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方(就像信封上要写明地址一样),如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输,并重新组包。总之,IP协议保证数据的传输,TCP协议保证数据传输的质量。,TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现,用户一般不涉及。编程时,编程界面有两种形式:由内核直接提供的系统调用和以库函数方式提供的各种函数。前者为核内实现 ,后者为核外实现。用户服务要通过核外的应用程序才能实现,这样就需要使用套接字(socket)。 如图11-3是TCP/IP协议核心与应用程序关系图。,(2)端口 一般来说我们的计算机上运行着非常多的应用程序,它们可能都需要同远程主机打交道,所以远程主机就需要有一个ID来标识它想与本地机器上的哪个应用程序打交道,这里的ID就是端口。将端口分配给一个应用程序,那么来自这个端口的数据则总是针对这个应用程序的。 在Internet中,TCP/IP 使用一个网络地址和一个服务端口号来唯一标识设备。网络地址标识网络上的特定设备,端口号标识要连接到的该设备上的特定服务。,11.2 .Net 框架中的Internet访问,1 Net类的网络服务层次 Microsoft.Net 框架为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要-从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要。,抛开ISO/OSI模型的7层构架,单从TCP/IP模型上的逻辑层面上看,.Net类可以视为包含3个层次:请求/响应层、应用协议层、传输层。WebReqeust和WebResponse 代表了请求/响应层,支持Http、Tcp和Udp的类组成了应用协议层,而Socket类处于传输层。如下图示。 可见,传输层位于这个结构的最底层,当其上面的应用协议层和请求/响应层不能满足应用程序的特殊需要时,就需要使用这一层进行Socket套接字编程。,2 .NET 框架中的请求和响应 在.NET 框架中,可使用特定类来访问Internet,如WebRequest-WebResponse、HttpWebRequest-HttpWebResponse、WebClient、TcpClient及Socket,其中前三者比较简单,后两者比较底层。 对于简单的Internet访问,WebClient 类可提供从Internet服务器上载、下载数据最简便的方法:可用来上传和下载文件、发送和接收流以及将数据缓冲区发送到服务器并接收响应。WebClient 使用 WebRequest和 WebResponse 类来建立与Internet 资源的实际连接。 对于复杂的Internet访问,客户端应用程序可使用 WebRequest及其子类来请求服务器中的数据。WebRequest 封装了连接到服务器、发送请求并接收响应的详细信息。,由于WebRequest和WebResponse都是抽象基类,所以由其子类(例如 HttpWebRequestHttpWebResponse)实现其定义的属性和方法。 对于不能使用请求/响应模型的应用程序而言,或者对于需要侦听网络并发送请求的应用程序而言,System.Net.Sockets 命名空间提供 TCPClient 类、TCPListener 类和 UDPClient 类。这些类处理使用不同的传输协议建立连接的详细信息,并且作为流向应用程序公开网络连接。,3 .NET网络访问命名空间 WinForms网络编程中用到 System.Net 和 System.Net.Sockets 命名空间。System.Net 命名空间主要处理高层的操作,例如下载和上载文件;System.Net.Sockets 包含执行低层操作的类,处理用于让计算机之间高效通信的代码 (1) System.
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号