关闭

关闭

关闭

封号提示

内容

首页 C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第1章 进程、线程与网络…

C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第1章 进程、线程与网络协议.ppt.ppt

C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 …

希望
2019-09-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第1章 进程、线程与网络协议.pptppt》,可适用于高等教育领域

全国最大的共享资料库,等您下载。本资料为C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第1章 进程、线程与网络协议.ppt.ppt文档,由吉林快3—吉林快三用户提供,以下为正文内容。

*C#编程三剑客《C#网络应用编程基础》马骏主编基础知识部分适用于初学者。《C#网络应用高级编程》马骏、郑逢斌、沈夏炯编著高级编程部分适用于高级开发者。《C#网络应用编程开发实例与实验指导》马骏编著上机题与项目开发实例(从设计到安装程序制作一网打尽)。*C#网络应用高级编程*第章进程、线程与网络协议进程和线程IP地址与端口套接字网络流*进程和线程进程是对一段静态指令序列(程序)的动态执行过程是系统进行资源分配和调度的一个基本单位。与进程相关的信息包括:进程的用户标志、正在执行的已经编译好的程序、进程程序和数据在存储器中的位置等。同一个进程又可以划分为若干个独立的执行流我们称之为线程。线程可以看作是进程的一个实例是CPU调度和分配的基本单位。在Windows环境下用户可以同时运行多个应用程序每个执行的应用程序就是一个进程。*进程和线程(续)并行性的主要特点:并发处理  在一个单处理器系统中可以通过分时处理来获得并发系统为每个线程分配一个CPU时间片每个线程只有在分配的时间片内才拥有对CPU的控制权其它时间都在等待。*Process类Process类位于SystemDiagnostics名称空间下它专门用于完成系统进程的管理任务。可以在本地计算机上启动和停止进程也可以向进程查询特定类型的信息。在远程计算机上无法启动和停止进程但可以查询进程的相关信息。在对进程进行操作时首先要创建Process类的实例其次还需要设置其对象成员的StartInfo属性最后调用它的Start方法。*例启动、停止和观察进程新建一个名为ProcessExample的Windows应用程序。从工具箱中将Process组件拖放到设计窗体。添加名称空间:usingSystemDiagnosticsusingSystemThreading添加ldquo启动记事本rdquo、ldquo停止记事本rdquo和ldquo观察所有进程rdquo三个按钮并添加Click事件代码:privatevoidbuttonStartClick(objectsender,EventArgse){processStartInfoFileName=notepadexe启动Notepadexe进程processStart()}*privatevoidbuttonStopClick(objectsender,EventArgse){创建新的Process组件的数组,并将它们与指定的进程名称(Notepad)的所有进程资源相关联Processmyprocessesmyprocesses=ProcessGetProcessesByName(Notepad)foreach(Processinstanceinmyprocesses){设置终止当前线程前等待毫秒instanceWaitForExit()instanceCloseMainWindow()}}privatevoidbuttonViewClick(objectsender,EventArgse){listBoxItemsClear()创建Process类型的数组,并将它们与系统内所有进程相关联*Processprocessesprocesses=ProcessGetProcesses()foreach(Processpinprocesses){由于访问Idle的StartTime会出现异常所以将其排除在外if(pProcessName!=Idle){将每个进程名和进程开始时间加入listBox中thislistBoxItemsAdd(stringFormat({,}{:h:m:s},pProcessName,pStartTime))}}}  *Thread类在SystemThreading名称空间下Thread类是用于创建和控制线程的,对线程的常用操作有:启动线程、终止线程、合并线程和让线程休眠等。*启动线程在使用线程前首先要创建一个线程。其一般形式为:Threadt=newThread(enterPoint)其中enterPoint为线程的入口即线程开始执行的方法。在托管代码中是通过委托处理线程执行的代码的。例:Threadt=newThread(newThreadStart(methodName))创建线程实例后就可以调用Start方法启动线程了。*Thread类(续)终止线程线程启动后当不需要某个线程继续执行的时候就需要终止该线程。终止线程调用Thread类的Abort方法。 例如:tAbort()Abort方法没有参数。当调用Abort方法时CLR可能不会立即终止线程。主线程调用子线程的Abort方法后结束子线程会占用大量CPU的时间表面上看就像死机。为解决这个问题可以在主线程中调用子线程对象的Join方法并在Join方法中指定主线程等待子线程结束的等待时间。*Thread类(续)合并线程Join方法用于把两个并行执行的线程合并为一个单个的线程。如果一个线程t在执行的过程中需要等待另一个线程t结束后才继续执行可以在t中调用t的join()方法。如:tJoin()这样t在执行到tjoin()语句后就会处于组塞状态直到t结束后才会继续执行。为了解决假如t一直不结束的问题,可以在调用t的Join方法的时候指定一个等待时间。如:tJoin()Join方法通常和Abort一起使用。*Thread类(续)让线程休眠  在多线程应用程序中有时候并不希望某一个线程继续执行而是希望该线程停止一段时间等待其它线程执行之后再接着执行。这时可以调用Thread类的Sleep方法即让线程休眠。  例如:ThreadSleep()  这条语句的功能是让当前线程休眠毫秒。  注意调用Sleep方法的是类本身而不是类的实例。休眠的是该语句所在的线程而不是其他线程。*Thread类(续)线程优先级  在C#应用程序中可以对线程设定五个不同的优先级由高到低分别是Highest、AboveNormal、Normal、BelowNormal和Lowest。在创建线程时如果不指定其优先级则系统默认为Normal。  若想让一些重要的线程优先执行可以使用下面的方法为其赋予较高的优先级: Threadt=newThread(newThreadStart(enterpoint)) tpriority=ThreadPriorityAboveNormal  设置线程的优先级可改变线程的执行顺序所设置的优先级仅适用于这些线程所属的进程。当把某线程的优先级设置为Highest时系统正在运行的其它线程都会止。*Thread类(续)线程池  线程池是一种多线程处理形式线程池为线程生命周期的开销问题和资源不足问题提供了很好的解决方案。通过对多个任务重用线程线程创建的开销被分摊到了多个任务上。  线程池适用于需要多个线程而实际执行时间又不多的场合。但是如果线程要求运行的时间比较长的话那么此时线程的运行时间比线程的创建时间要长得多仅靠减少线程的创建时间对系统效率的提高就不是那么明显了此时就不适合使用线程池技术*Thread类(续)同步  同步指在某一时刻只有一个线程可以访问变量或者对象。 线程t对variable操作时为了避免其他线程也对其进行操作可以使用C#提供的lock语句将variable锁定。  实现代码为:lock(variable){variable=}注意:不要将被同步的对象声明为public。*例在程序中使用线程新建一个名为ThreadExample的Windows应用程序。向设计窗体拖放一个Timer组件。名称空间:usingSystemThreading字段声明:StringBuildersb=newStringBuilder()ThreadthreadThreadthread代码:privatevoidAppendString(strings){lock(sb){*strAppend(s)}}publicvoidMethod(){while(true){ThreadSleep()线程休眠毫秒AppendString(a)}}publicvoidMethod(){while(true)*{ThreadSleep()线程休眠毫秒AppendString(b)}}启动线程和终止线程按钮的Click事件中添加代码:privatevoidbuttonStartClick(objectsender,EventArgse){sbRemove(,sbLength)timerEnabled=truethread=newThread(newThreadStart(Method))thread=newThread(newThreadStart(Method))threadStart()*threadStart()}privatevoidbuttonAbortClick(objectsender,EventArgse){threadAbort()threadJoin()threadAbort()threadJoin()}timer的Tick事件代码:privatevoidtimerTick(objectsender,EventArgse){if(threadIsAlive==true||threadIsAlive==true)*{richTextBoxText=sbToString()}else{timerEnabled=false}} 键编译并执行单击启动线程后等一会再单击终止线程查看运行结果。*在一个线程中操作另一个线程的控件默认情况下为了防止引起死锁等不安全因素C#不允许在一个线程中直接操作另一个线程中的控件。但是在Windows应用程序中为了在窗体上显示线程中处理的信息我们可能需要经常在一个线程中引用另一个线程中的窗体控件。比较常用的办法是使用委托(delegate)来完成这个工作。例一个线程操作另一个线程的控件的方法。*IP地址与端口 IP(InternetProtocol)是internet网络设备之间传输数据的一种协议。本节所讲的端口虽逻辑意义上的端口是指TCPIP协议中的端口。这一节我们将对IPAddress、IPHostEntry、IPEndPoint等SystemNet命名空间中的几个类进行简单的介绍。*TCPIP网络协议网络协议 TCPIP IP地址*IPAddress类与Dns类 IPAddress类提供了对IP地址的转换、处理等功能。其Parse方法可将IP地址字符串转换为IPAddress实例。如: IPAddressip=IPAddressParse(ldquordquo) IPAddress类提供了个只读字段:Any表示本地系统可用的任何IP地址Broadcast表示本地网络的IP广播地址IPvAnySocketBind方法用此字段指出本地系统可用的IP地址IPvLoopback表示系统的回送地址IPvNone表示系统上没有可用的网络接口Loopback表示系统的回送地址None表示系统上没有可用的网络接口*IPAddress类与Dns类(续) Dns类提供了一系列静态的方法用于获取提供本地或远程域名等功能,常用方法有: )GetHostAddresses方法获取指定主机的IP地址返回一个IPAddress类型的数组。函数原形为:publicstaticIPAddressGetHostAddresses(stringhostNameOrAddress)例如:IPAddressip=DnsGetHostAddresses(wwwcctvcom)listBoxItemsAddRange(ip)* )GetHostName方法获取本机主机名。例如:stringhostname=DnsGetHostName()*IPHostEntry类 IPHostEntry类的实例对象中包含了Internet主机的相关信息。 常用属性有:AddressList属性和HostName属性。 AddressList属性作用:获取或设置与主机关联的IP地址列表是一个IPAddress类型的数组包含了指定主机的所有IP地址HostName属性则包含了服务器的主机名。 在Dns类中有一个专门获取IPHostEntry对象的方法通过IPHostEntry对象可以获取本地或远程主机的相 关IP地址。  例如:*IPHostEntry类(续)listBoxItemsAdd(搜狐新闻所用的服务器IP地址有:)IPAddressip=     DnsGetHostEntry(newssohucom)AddressListlistBoxItemsAddRange(ip)listBoxItemsAdd(本机IP地址为:)ip=DnsGetHostEntry(DnsGetHostName())AddressListlistBoxItemsAddRange(ip)*IPEndPoint类 在C#中IPEndPoint类包含了应用程序连接到主机上的服务所需的IP地址和端口信息。 IPEndPoint类常用的构造函数为: publicIPEndPoint(IPAddress,int) 其中第一个参数指定IP地址第二个参数指定端口号。例:IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法。*套接字 套接字是支持TCPIP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点它构成了单个主机内及整个网络间的编程界面。套接字通常和同一个域中的套接字交换数据,各种进程使用这个相同的域互相之间用Internet协议进行通信。 套接字有两种不同的类型:流套接字和数据报套接字。 要通过互联网进行通信至少需要一对套接字其中一个运行于客户端称之为ClientSocket另一个运行于服务器端称之为ServerSocket。*套接字(续) 根据连接启动的方式以及本地套接字要连接的目标套接字之间的连接过程可以分为三个步骤:服务器监听客户端请求连接确认。 服务器监听:指服务器端套接字并不定位具体的客户端套接字而是处于等待连接的状态实时监控网络状态。 客户端请求:指由客户端的套接字提出连接请求要连接的目标是服务器端的套接字。 连接确认:指当服务器端套接字监听到或接收到客户端套接字的连接请求时它就响应客户端套接字的请求建立一个新的线程把服务器端套接字的信息发给客户端一旦客户端确认了此信息连接即可建立。*套接字(续)  套接字处理数据两种基本模式:同步套接字和异步套接字。 同步套接字 其特点是在通过Socket进行连接、接收、发送操作时客户机或服务器在接收到对方响应前会处于阻塞状态。它适用于数据处理不太多的场合。 异步套接字 在通过Socket进行连接、接收、发送操作时客户机或服务器不会处于阻塞方式而是利用callback机制进行连接、接收和发送处理这样就可以在调用发送或接收的方法后直接返回并继续执行下面的程序。*面向连接的套接字IP连接领域有两种通信类型:面向连接的(connectionoriented) 在面向连接的套接字中使用TCP协议来建立两个IP地址端点之间的会话。一旦建立了这种连接就可以在设备之间可靠的传输数据。无连接的(connectionless) 为了建立面向连接的套接字服务器和客户端必须分别进行编程。对于服务器端程序建立的套接字必须绑定到用于TCP通信的本地IP地址和端口上。*面向连接的套接字(续) Bind方法用于完成绑定工作: Bind(IPEndPointaddress) Address为IPEndPoint的实例该实例包括一个本地IP地址和一个端口号。在套接字绑定到本地之后就用Listen方法等待客户机发出的连接尝试: Listen(intbacklog) Backlog参数指出系统等待用户程序服务排队的连接数超过连接数的任何客户都不能与服务器进行通信。 在Listen方法执行之后服务器已经做好了接收任何引进连接的准备这是用Accept方法来完成的当有新客户进行连接时该方法就返回一个新的套接字描述符。*无连接的套接字 UDP协议使用无连接的套接字不需要在网络设备之间发送连接信息。UDP客户机不需要Connect方法。 由于不存在确定的连接所以可以直接使用SendTo方法和ReceiveFrom方法发送和接收数据在两个设备之间的通信结束之后可以像TCP中使用的方法一样对套接字使用Shutdown和Close方法。 需要接收数据时必须使用Bind方法将套接字绑定到一个本地地址端口对上后才能使用ReceiveFrom方法接收数据如果只发送而不接收则不需要使用Bind方法。*网络流 流(stream)是对串行传输的数据的一种抽象表示底层的设备可以是文件、外部设备、主存、网络套接字等。 流有三种基本的操作:写入、读取和查找。 若数据从内存缓冲区传输到外部源这样的流叫作ldquo写入流rdquo。 若数据从外部源传输到内存缓冲区这样的流叫作ldquo读取流rdquo。 C#在SystemNetSockets名称空间中提供了一个专门的NetworkStream类用于通过网络套接字发送和接收数据。 NetworkStream类支持对网络数据的同步或异步访问它可被视为在数据来源端和接收端之间架设了一个数据通道*网络流(续) 对于NetworkStream流写入操作是指从来源端内存缓冲区到网络上的数据传输读取操作是从网络上到接收端内存缓冲区(如字节数组)的数据传输。 构造NetworkStream对象的常用形式为:Socketsocket=newSocket(AddressFamilyInterNetwork,SocketTypeStream,ProtocolTypeTcp)NetWorkStreamnetworkStream=newNetworkStream(socket) 一旦构造了一个NetworkStream对象就不需要使用Socket对象了。

类似资料

该用户的其他资料

2015.11创新杯创新杯说课大赛国赛说课课件.ppt

19--课程..创新杯说课大赛国赛说课课件.ppt

2014创新杯直线的倾斜角与斜率课程创新杯说课大赛国赛说课课件.ppt

13幼师3 住创新杯说课大赛国赛说课课件.ppt

2010血栓的形成讲课曹颜冬创新杯说课大赛国赛说课课件.ppt

职业精品

精彩专题

让你惊艳又清新的英文短诗合集

让你清新惊艳的英文小诗有哪些呢?小编汇集了以下经典英文诗、唯美爱情小诗、英文诗押韵技巧等等,让爱好英文短诗的你能够一起体验其中的乐趣!

用户评论

0/200
上传我的资料

热门资料排行换一换

  • 《止学》原文及译文

  • 高等学校毕业生学费和国家助学贷款代…

  • 心理健康_自我剖析_性格分析

  • 简析《尚书》里的“誓”一

  • 15座未来派水上城市设计

  • 玩转涨停大阳线

  • 中山陵机构设置

  • 2[1][1]

  • 论良好师生关系建设的师德要求

  • 资料评价:

    / 39
    所需积分:0 立即下载

    VIP

    在线
    客服

    免费
    邮箱

    吉林快3—吉林快三服务号

    扫描关注领取更多福利