全面掌握VisualC#实现UDP协议要点_第1页
全面掌握VisualC#实现UDP协议要点_第2页
全面掌握VisualC#实现UDP协议要点_第3页
全面掌握VisualC#实现UDP协议要点_第4页
全面掌握VisualC#实现UDP协议要点_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

全面掌握VisualC#实现UDP协议一走进协议:( )协议就是“用户数据报协议”,它是一种无连接的协议,无连接主要是和协议相比较的。我们知道当利用协议传送数据的时候,首先必须先建立连接(也就是所谓的握手)才可以传输数据。而当计算机利用协议进行数据传输的时候,发送方只需要知道对方的地址和端口号就可以发送数据,而并不需要进行连接。当然如果你非要进行连接,通过#也是可以实现的,但前提是要确定连接的远程主机的端口号处于监听状态,否则程序会出现不必要的错误,但这是种画蛇添足的做法,不仅丢失了协议的无连接传送数据的特点和优点,而且还给程序运行带来了不安定的因素。所以这种方法并不值得提倡。由于 协议并不需要进行确定的连接,所以编写基于 协议的应用程序比起编写基于 协议的应用程序要简单些(程序中可以不需要考虑连接和一些异常的捕获工作)。但同时也给基于 协议编写的程序带来了一个致命的缺点,由于不提供可靠数据的传输,当计算机之间利用 协议传送数据的时候,发送方只管发送数据,而并不确认数据是否被对方接收。这样就会导致某些 协议数据包在传送的过程中丢失,尤其网络质量不令人满意的情况下,丢失数据包的现象会更严重。这就是为什么在网络上传输重要数据不采用 协议的原因。但是我们也不能因为这一个缺点就全面否定 协议,这是因为虽然利用协议来传送安全性要求高的数据是不适合的,但对于那些不重要的数据,或者即使丢失若干数据包也不影响整体性的数据,如音频数据,视频数据等,采用协议就是一个非常不错的选择。如目前网络流行的很多即时聊天程序,如和等,采用的就是协议。同时虽然协议无法保证数据可靠性,但具有对网络资源开销较小,数据处理速度快的优点,所以在有些对数据安全性要求不是很高的情况下,采用协议也是一个非常不错的选择。总结一下上面的内容,可见是一种不面向连接的网络协议,既有其优点,也有其不足,具体如下:基于 协议的网络应用程序,实现起来比较简单,并且基于 协议的网络应用程序在运行时,由于受到环境影响较小,所以不容易出错。协议占用网络资源较少,数据处理较快,所以在网络中传送对安全性要求不是十分高数据时,其优点比较明显。所谓对安全性要求不高的数据,是指那些不重要的数据,或者是即使丢失若干数据,也不影响其整体的数据,如音频数据等。目前很多流行的网络应用程序都是基于协议的,如、等。3.由于其不是面向连接的网络协议,其缺点也是非常明显的,有些时候甚至是致命的。因为使用协议来传送数据,在数据发送后,在发送方并不确认对方是否接收到。这样就可能导致传送的数据在网络中丢失,尤其在网络条件并不很好的情况下,丢失数据包的现象就更多。所以传送重要数据一般不采用 协议。

二.简介 a发送、接收 数据包使用的主要类及其用法用 井实现协议,最为常用,也是最为关键的类就是 ,位于命名空间 中, 井发送、接收数据包都是通过 类的。表和表是 类中常用方法和属性及其简要说明。方法 说明关闭连接、onnect建立与远程主机的连接退出多路广播组将 添加到多路广播组返回已由远程主机发送的 数据文报将 数据文报发送到远程主机表: 类中常用方法及其说明。属性说明获取或设置一个值,该值指示是否已建立了与远程主机的连接获取或设置基础网络套接字表: 类中常用方法及其说明。#使用类发送 数据包:

#使用类发送 数据包:在具体使用中,一般分成二种情况:()知道远程计算机地址:方法的调用语法如下:参数说明:要发送的 数据文报(以字节数组表示)。数据文报中的字节数。一个,它表示要将数据文报发送到的主机和端口。一个,它表示要将数据文报发送到的主机和端口。返回值已发送的字节数。面使用发送 数据包的具体的调用例子:面使用发送 数据包的具体的调用例子:远程计算机地址发送的字节 发送的字节长度(2).知道远程计算机名称::知道远程计算机名称后,利用方法直接把 数据包发送到远程主机的指知道远程计算机名称后,利用方法直接把 数据包发送到远程主机的指定端口号上了,这种调用方式也是最容易的,语法如下:参数说明:要发送的 数据文报(以字节数组表示)。数据文报中的字节数。要连接到的远程主机的名称。要与其通讯的远程端口号。返回值已发送的字节数。u使用u使用类接收 数据包:接收 数据包使用的是 中由勺“Receive”方法。此方法的调用语法如下:ic e Receive e i ee参数e 是一个 类的实例,它表示网络中发送此数据包的节点。如果指定了远程计算机要发送到本地机的端口号,也可以通过侦听本地端口号来实现对数据的获取,下面就是通过侦听本地端口号“8080”来获取信息代码:evee (eeceiveie ie e 008080 e ec eveReceive eeceivei三.i#实现 协议之网络对时系统的体系结构及功能简介:在局域网中有很多应用软件为了协同工作,需要保证客户机上时间统一,而为了实现这一点,通常的做法是客户机从一个时间相对正确的服务器读取时间,以此来校正本地时间。如经常看到的对时系统等。本节编写的局域网上对时系统的主要的功能是保证局域网上计算机时间、日期的统一。网络对时程序是体系结构分成服务器端程序和客户端程序二个部分,具体的作法是:在同一个网段上,固定一台计算机作为对时的服务器,在这个网段的所有计算机都可以读取这台服务器上的时间和日期,并依此服务器上的时间和日期为基准,来确定本地的时间和日期。在服务器端程序需要达到以下功能:能够接收局域网中任一台客户机的请求记录请求客户机的计算机名称,和请求时间准确发送服务器端的时间和日期端程序要达到以下功能:能够设定服务器的主机或者地址能够接收服务器端发送的时间、日期信息能够以接收的服务器端时间、日期为基准,校正本地时间因此在具体用 a实现网络对时系统时就包括二个部分:服务器端程序和客户端程序。下面首先介绍 al现网络对时系统中服务器端程序的具体步骤。

四.a四.a实现网络对时系统之服务器端程序的具体步骤:服务器端程序比客户端程序相对要简单,主要因是服务器端程序的工作比较简单,就是接收客户端的对时请求、发送服务器端的时间数据。而于客户端不仅要传送和接收数据,还要把服务器端的时间提取出来,并以此来修改本地计算机的时间、日期。下面是用 #实现网络对时系统之服务器端程序的具体步骤步骤。启动 。2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。将【项目类型】设置为【 #项目】。将【模板】设置为【应用程序】。在【名称】文本框中输入【对时服务器端】。启在【位置】的文本框中输入【项目】,然后单击【确定】按钮

启在【位置】的文本框中输入【项目】,然后单击【确定】按钮.在【解决方案资源管理器】窗口中,双击文件,进入文件.在【解决方案资源管理器】窗口中,双击文件,进入文件的编辑界面。在 文件的开头,用下列导入命名空间代码替代系统缺省的导入命名空间代码。程序中使用到线程程序中使用到编码切换到【 (设计)】窗口,并从【工具箱】中的【 窗体组件】中往窗体中拖入下列组件,并执行相应操作:一个组件,显示对时服务器正在运行信息一个组件,名称为 B用以显示客户端和服务器端交流的日志一个组件,名称为,并在其拖入窗体后,双击,则系统会在文件中产生其 事件对应的处理代码。在.【解决方案资源管理器】窗口中,双击文件,进入文.件的编辑界面。在中.的代码区添加下列代码,下列代码是定义以.下面代码替代系统产生的过程。以.下面代码替代系统产生的过程。程序中使用的全局变量和创建全局使用的实例:定义端口号设定本地 地址定义端口号对时服务器端正在运行清除信息对时服务器端至此,【对时服务器端】项目的界面设计和功能实现的前期工作就完成了,设计界面如图01所示:lis+Eoxl:lis+Eoxl:======:====图1【 对时服务器端】项目的设计界面在r文件中的 tae过程的后面添加下面代码,下列代码是定义过程“start_server”。此过程的功能是获取客户端对时请求数据,并向客户端发送服务器当前时间和日期。v start_server 接收从远程主机发送到本地 端口的数据tereataservereeverereeve t获得客户端请求数据提取客户端的信息,存放到定义为 的字符串数组中显示端口号的请求信息时间: 接收信息如下:客户机: 端口号: 发送服务器端时间和日期发送服务器时间! 对远程主机的指定端口号发送服务器时间请注意:上述代码中约定客户机程序发送对时请求信息到服务器的808端0口号。服务器端程序接收发送到本地808端0口号的数据就完成了数据接收。为了能够让服务器端程序知道是那台客户机提出请求和要把对时信息发送到客户机的那个端口号上,客户端程序对发送的对时请求信息进行了设计。客户端的对时请求信息结构为:计算机名称+信客户+机接收信息端口号这样如果客户端计算机名称为: ,接收服务器端时间数据的端口号是8则客户端程序发送的对时请求数据就为: 。服务器端程序在接收到客户端对时请求数据,并进行分析后,就能够通过类的 方法准确的把服务器端当前的时间和日期发送到客户端指定的端口号上。这样客户端程序通过读取指定的端口号,就能够获得服务器端当前的时间和日期,从而以此来修正客户端的时间和日期了。1在“start_server”过程之后面添加下面代码,下列代码是定义“run”过程。“run”过程的作用是创建一个线程实例,并以“start_server”过程来初始化线程实例。之所以采用线程是因为服务器端程序需要不间断读取发送到端口号,并且eceive方法是一个阻塞式方法。采用线程就是为了保证服务器端程序正常运行:ulicvoidrun 利用本地 端口号来初始化一个 网络服务servernedClient ort receiveointne ndointne ddress开一个线程starterverne readne readtart star§t_server线程startervertart1在FormlcS中的 air函数之后添加下列代码,下列代码是定义“Form1_Load”事件,在此事件中将调用“run”过程,这样当服务器端程序运行后,就启动网络对时服务:rivatevoidForm1_Loadoectsender stem vei启动对时服务run1在Formlcs文件中的“Form1_Load”事件之后,添加下列代码,下列代码是定义uttonl的“Click”事件,此事件的作用是清除服务器端程序显示的日志信息:

序日志用.下列代码替换中.的清除服务器端程方法。下列代码的功能是手动收集程序中使用的资源:关闭线程序日志用.下列代码替换中.的清除服务器端程方法。下列代码的功能是手动收集程序中使用的资源:关闭线程清除资源至此,在上述步骤都正确完成,【对时服务器端】项目的全部工作就完成了。图2对时服务器端】运行后的界面,在日志信息中记录了对时请求客户机的名称,发送对时数据的端口号以及客户端请求的时间:对时服务器端】项目的运行界面五.a五.a实现网络对时系统之客户端程序的具体步骤:客户端的程序比服务器端程序要复杂些,因为客户端程序不仅要往服务器端发送对时请求信息,接收服务器端反馈的日期和时间数据,还要提取这些时间和日期信息,并以此来修改本地端的日期和时间。参照上面实现网络对时系统服务器端程序,实现请求信息的发送和接收应相对要容易许多。所以客户端程序的关键就是根据获得的服务器端日期、时间数据来修改本地的日期、时间。在版本中并没有提供修改本地日期和时间的函数和类库,本文的实现办法是引入 函数,通过对应的 函数来更正本地时间和日期的,具体可参阅以下第十三和第十八步。以下是 a实现网络对时系统之客户端程序的具体实现步骤:启动 。2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。将【项目类型】设置为【 #项目网。将【模板】设置为【 应用程序】。在【名称】文本框中输入【 对时客户端】。

.在【位置】的文本框中输入【项目】,然后单击【确定】按钮。.在【位置】的文本框中输入【项目】,然后单击【确定】按钮。.解决方案资源管理器】窗口中,双击 文件,进入 文件的编辑界面。8在 文件的开头,用下列导入命名空间代码替换 中缺省的导入命名空间代码。程序引入函数要使用到程序引入函数要使用到.把 的集成开发环境的当前窗口切换到I (设计)I窗体设计界面,并从【工具箱】中的【窗体组件】中往窗体中拖入下列窗体设计界面,并从【工具箱】中的【窗体组件】中往窗体中拖入下列组件,并执行相应操作:三个组件,分别用来输入服务器的地址,和显示本地时间、服务器三个的时间二个组件,分别是和,在设计界面中分别双击和,系统会自动产生它们对应的 事件处理代码。三千个 组件。【解决方案资源管理器】窗口中,双击 文件,进入 文件的编辑界面。在 中的 代码区添加下列代码,下列代码的功能是在程序中定义系统时间的结构体。定义系统时间的结构在 中的 代码区添加下列代码,下列代码的功能是定义程序中使用的全局变量。创建网络服务定义接收服务器端程序发送对时信息对应的端口号存放时间日期信息字符串定义一个时间类型,用以修改当前时间和日期并.以下面代码替换中由系统产生的过程。获取对时本地时间:服务器时间:设定服务器地址:对时客户端至此【 对时客户端】项目的界面设计和程序功能实现的前期工作就基本完成了,其设计界面如图03所示:图3【 对时客户端】项目的设计界面在 中的过程之后,添加下列代码,下列代码的功能是在程序中导入 函数,这个函数位于文件在 中的过程之后,添加下列代码,下列代码的功能是在程序中导入 函数,这个函数位于文件。程序就是通过此函数来更正系统时间的。llrternelllriatestaticeternlet stesteietie引入函数ime并把它添加到在导入in函数代码之后,再添加下列代码,下列代码是定义“start_client”过程。此过程的功能是向服务器端传送对时请求,并获取从服务器端反馈来的时间日期数据。clientnelientrressaressareceieinne naint rtlress stcntinetreilestrincntinestaens etssteetnc inne ste et定义发送到服务器端的请求信息trseenctancodin请求信息是一个字符串,为客户端名称和接收服务器反馈信息的端口号组成的字符串判断使用者输入的是 地址还是计算机名称如果输入的是计算机名称,则按照执行下列代码。发送请求信息接收来自服务器端的信息输入的是地址,则执行下列代码nintnintstnest发送请求信息ataLengtclienten senatasenst接收来自服务器端的信息erefterecata clienteceireceieint获取服务器端的时间和日期tietrinenc eettrrecataclientClse退出循环cntine alse如果“start_client”过程正确调用,就把服务器端的时间和日期保存到tietrir字符串中了。用下列代码替换r中cstt的“Click”事件的处理代码。下列代码的功能是调用“start_client”过程,获取并显示服务器端程序的时间和日期信息。Clickcli显示

温馨提示

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

评论

0/150

提交评论