欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    基于UDP的文件传输..docx

    • 资源ID:656467       资源大小:87.86KB        全文页数:16页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于UDP的文件传输..docx

    计算机网络综合课程设计报告基于UDP协议的文件传输系统的设计与实现学生姓名:_指导教师:所在系:电子信息系所学专业:电子信息工程年级:2022年6月目录基于UDP的文件传输的系统的设计与实现3.一、实验的相关知识41.1 通信的模式41.2 UDP协议41.3 WinSOCk控件41.4 WinSOCk控件重要属性、方法和事件5.1.6 Commomdialog控件81.7 time控!件9三、实验步骤113.1 总体规划1.13.2 模块设计1.13.3 创建窗体1.23.4 程序设计1.43.5 系统运行1.8四、实验结论19五、参考文献2。基于UDP的文件传输的系统的设计与实现摘要:该实验的任务是实现文件的传输,并且是基于UDP协议的。所有文件在该协议下可以实现发送并正确接收。此时需要了解的是UDP的数据包一次最多只能发送8K,所以我们想到通过拆包和创建窗体的方法来实现文件的传输。拆包主要是规定每一个数据包的大小,然后计算具体的文件所需要的包数,创建窗体的目的是编写程序来进行分包发送和接收。通过系统运行窗体我们可以知道UDP不仅可以传送和接收小文件,还可以传输和接收较大的文件。通过实验可知UDP是不可靠的无连接传输,所以在传输过程中会发生丢包的情况,但大部份情况下传输还是比较好的。关键词:UDP协议;发送文件;接收文件;拆包;WinSoCk控件、实验的相关知识1.1 通信的模式由于是实现点对点的文件传输,因此在程序中我们使用的是C/S的模式来实现通信。对于C/S的模式,即分为客户端和服务端。服务端用来接收客户端的连接,实现两端之间互相传输文件。采用C/S的模式可以更好的体现程序的功能设计思想,充分调用在LAN中的SCrVer和Client两方面的处理能力,极大的减少网络上的信息流通量。OS体系结构有可能提供一种开放式的、易伸缩扩展的分布式计算机环境,并保护硬件等投资。1.2 UDP协'议该实验文件传输是在UDP协议下进行的,UDP提供无连接不可靠的用户数据包传输。其中每一个数据段惟独8Byte相对于TCP传输开消较少,且无须对发送速率进行管理。UDP发送数据的速率仅仅受限于程序产生数据的速率,信源主机的性能及internet上可以利用的宽带。并且与TCP不同的是UDP不需要连接,可直接发送,传输数据较快,但同时其稳定性不好,易丢包。1.3 Winsock控件Winsock即WindowsSockets规范的简称,是目前最流行的网络通信应用程序接口之一。所谓SoCket,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。SoCket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。WinSOCk控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议合用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协议的(例如常用的HTTP.FTP、SMTP、POP3等协议);UDP协议合用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的(例如Real公司的RTSP协议,腾讯公司的QQ协议等)。1.4 Winsock控件重要属性、方法和事件(1)属性Protocol:通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。可选的协议是TCP和UDP,对应的VB中常量分别是sckTCPProtocol和sckUDPProtocoI,Winsock控件默认协议是UDP。RemoteHostIP:返回远程计算机的IP地址。本实验使用的是UDP协议,那末当DataArrival事件后,发送UDP报文的计算机的IP才赋给了这个属性。如果是TCP协议,在客户端,当使用了控件的ConneCt方法后,远程计算机的IP地址就赋给了RemOteHoStlP属性,而在服务器端,当ConnectRequest事件后,远程计算机(客户端)的IP地址就赋给了这个属性。ByteReceived:返回当前接收缓冲区中的字节数。State:用于返回当前WinSock控件的状态。常数值描述SckClosed0缺省值,关闭SckOpen1打开SckListening2侦听(TCP)SckConnectionPcnding3连接挂起(TCP)SckRcsolvingHost4识别主机SckHostResolved5已识别主机SckConnecting6正在连接(TCP)SckConnected7己连接(TCP)SckClosing8同级人员正在关闭连接(TCP)SckError9错误表1-1(2)方法Bind:用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序能再使用这个端口。1.isten:只在使用TCP协议时实用。它将应用程序置于监听检测状态。Connect:当本地计算机希翼和远程计算机建立连接时,就可以调用ConneCt方法。Accept:当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的请求。SendData:当连接建立后,要发送数据就可以调用SendData方法,该方法惟独一个参数,就是要发送的数据。GetData:当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。PeekData:和GetData方法类似,但PeekData在取得数据后并不把缓冲区清空。(3)事件ConnectRequest:(TCP)当本地计算机接收到远程计算机发送的连接请求时,控件的ConnectRequest事件将会被触发。SendProgress:当一端的计算机正在向另一端的计算机发送数据时,SendProgress事件将被触发。SendProgress事件记录了当前状态下已发送的字节数和剩余字节数。SendComplete:当所有数据发送完成时,被触发。DataArrival:当建立连接后,接受到了新数据就会触发这个事件。注意:如果在接受到新数据前,缓冲区中非空,就不会触发这个事件。Error:当在工作中发生任何错误都会触发这个事件。1.5 Winsock控件通信的工作原理Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只无非这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。注意端口号被规定在065535范围内的某一个整数,其中0-1023被预先定义的服务器通信所占用(如telnet占用23,http占用端口80),所以最好使用1024-65535这些端口中的某一个,以免发生端口冲突。1.6 Commomdialog控件CommonDialog控件提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。通过运行WindoWS匡助引擎控件还能显示匡助。语法CommonDiaIog控件在ViSUalBaSiC和MiCroSoftWindOWS动态链接库ommdlg.dll.的例程之间提供了一个接口。为了用这个控件创建一个对话框,OmmdIg.dll.必须在MiCroSOftWindoWS的SYSTEM目录下。在应用程序中要使用COmmOnDiaIOg控件,可将其添加到窗体中并设置其属性。控件所显示的对话框由控件的方法确定。在运行时,当相应的方法被调用时,将显示一个对话框或者是执行匡助引擎;在设计时,CommonDiaIog控件是以图标的形式显示在窗体中。该图标的大小不能改变。如果该控件不在“工具箱”中,请按CTRL+T键或者使用菜单:工程-部件,显示“部件”对话框。在这个“部件”对话框中,选择CommonDialogControl44。使用指定的方法,CommonDialog控件能够显示下列对话。方法所显示的对话框ShowOpe显不"打开”对话框n显示“另存为”对话框ShoWSaV显示“颜色”对话框e显示“字体”对话框ShowColorShowFontShowPrinter显示“打印”或者“打印选项”对话框ShowHelp调用WindOWS匡助引擎在对话框接口上单击,CommonDialog控件将自动提供与上下文有关的匡助:单击标题栏中的“这是什么?“匡助按钮,然后单击想详细信息的项目。将鼠标放在想进一步详细信息的项目上,单击右键,然后在所显示的上下文菜单中选择这是什么命令。操作系统提供在WindoWS95匡助弹出中显示的文本。也可以通过设置FlagS属性,在带有CommonDiaIog控件的对话框中显示一个匡助按钮,但是,必须在这个位置提供匡助主题。1.7 timer控件Timer控件(最主要的就是enabled属性,和InterVaI属性,下面有详细介绍)通过引起Timer事件,Timer控件可以有规律地隔一段时间执行一次代码。Enabled属性返回或者设置一个值,该值用来确定一个窗体或者控件是否能够对用户产生的事件作出反应。InterVal属性返回或者设置对Timer控件的计时事件各调用间的毫秒数。说明:可以在设计时或者在运行时设置Timer控件的InterVaI属性。使用InterVal属性时,请记住:Timer控件的Enabled属性决定该控件是否对时间的推移做响应。将Enabled设置为False会关闭Timer控件,设置为True则打开它。当Timer控件置为有效时,倒计时总是从其ImerVal属性的设置值开始。创建Timer事件程序用以告诉VisualBaSiC在每次InterVaI到时该做什么。二、实验原理实验设计过程中主要是通过WinSOCk控件进行UDP文件传输。分别在发送端和接收端建立控件WinSoCk,经过对WinSoCk控件程序的写入,然后通过端口号和IP地址的绑定来建立联系,而无需像TCP一样建立连接,直接可以传送文件,而且能较准确的发送和接收。下图是UDP数据报的封装:UDP封装-IP包-UDP数据报IP5UDP头载荷数据-三、实验步骤3.1 总体规划根据该实验的要求在UDP协议下实现文件的传输。本程序的文件传输系统的实现应包含UdP聊天,上传文件,接收文件等几个部份,整个程序采用VB完成。程序使用流式套接字。在设计时设计选中文件界面中,传输并接收完成界面一个客户端即可用于用于发送文件,也可用于接收文件。在通信的时候主要可以分为两个部份,一个部份是控制信息的传输部份,而另一个部份就是文件的传输部份。传送的控制信息可以包含发送文件的请求,文件的名称、大小等,由于这方面的数据量比较小,因此采用了VB所提供的WINSOCket类的串行化技术来实现。对于文件的传输,由于数据量相对来说比较大,所以用两个线程来实现文件的传输,一个线程用于发送,一个线程用于接收。3.2 模块设计(1)服务端模块服务端要与客户端进行通信,首先,必须知道客户端的域名或者IP地址(RemOteHoSt属性),就像要和某人打电话前,必须知道对方的电话号码;其次,还必须和客户端进行端口绑定,也就是端口号要匹配,这样传送的文件才干到达客户端。而且每一个文件都有自己文件的长度和大小等。且能传送任意磁盘中任意文件夹中的文件。(2)客户端模块同样地,客户端也需要有服务端的端口号和IP地址,而且还能把接收到的文件放到自己想要的磁盘中。3.3 创建窗体1) UdP聊天窗口Udp聊天窗口要有发送和接收窗口能要有远程IP端口地址、发送端口号、接收端口号、发送和接收文件所处位置、发送按键、WinSOCk等»)<>*/,-ix图3.12)发送窗体窗体要有选择文件的控件Commomdialog,要有返回聊天的功能1*4Y 1>4Y 1*4Vi14o i4oi144 Cunk «t t 13Z4byt 1。rhtv4r t, I 3Z4byt 1" CHVar c I 74byt l<bunk I V4Syr « rhnk lire I V4by* r>nk d” I Afyr IW chunk <r SW"MT 件*HM7图3.23)接收过程要有传送过程的可视化界面图3.33.4 程序设计在窗口建好的情况下相应的编写程序,在程序中关键是发送和接收,而数据传输过程关键方法是拆包,用VB可以写出拆包发送和接收程序段。I)UdP聊天程序段如下:PrivateSubCommand1_Click()Me.Winsockl.Protocol=sckUDPProtocolMe.Winsockl.LocalPort=Me.txtlocalportMc.Winsockl.BindMe-CommandLEnabled=FalseEndSubPrivateSubCommand2_CIick()Dimdata,a,bAsStringdata=Mc.Textl.Texta=Me.TxtIP.Textb=Me.txtremoteport.TextMe.Winsockl.RemoteHost=aMe.Winsockl.RemotePort=bOnErrorResumeNextMe.Winsockl.SendDatadataEndSubPrivateSubCommand3_Click()Form2.ShowEndSubPrivateSubCommand4_Click()EndEndSubPrivateSubWinsockl_DataArrival(ByValbytesTotalAsLong)DimdataAsStringDimipAsString,portAsLongOnErrorResumeNextMe.Winsockl.GetDatadataip=Me.Winsockl.RemoteHostIPport=Me-WinsockLRemotePortIfLen(Me.Text2)>100OThenEndIfEndSub2)文件选择上传界面程序如下:OptionExplicitPrivateTypebyte_fileindexAsLongarr_byte()AsByleEndTypePrivatearr_bytefile()Asbyte_filePrivateIfilesizeAsLongPrivateSubcmdback_Click()Form1.ShowEndSubPrivateSubCOmmand2_Click()应用程序cdg.ShowOpenEndSubPrivateSubCommand3_Click()Command2.Enabled=FalseCommand3.Enabled=FalseCallFileToArray(Cdg-FileName)Forn3.ShowCallSendFileEndSubPrivateSubFOrm_Load()Winsock1.RemoteHost=Forml.TxtIP.TextWinsockLRemotePort=10086WinsockLLocaIPort=10085WinsockLBindWinsock2.RemoteHost=Forml.TxtIP.TextWinsock2.RemotePort=100OWinsock2.Bind100lCommand3.Enabled=FalseEndSubPrivateSubFiIeToArray(ByValFileNameAsString)DimIChunckAsLongDim!RestAsLongDimindexAsLongIfilesize=CLng(FileLen(FileName)IRcst=FilcLcn(FileName)Mod1024OpenFileNameForBinaryAs#1Forindex=1ToIChunckReDimPreservearr_bytefile(index)arr_bytefile(index).index=indexRcDimarr_bytefile(index).arr_byte(1To1024)Get#1,arr_bytefile(index).arr_byteNextIfIRest>0ThenReDimPreSerVearr_bytefile(index)arr_bytcfile(index).index=indexReDimarr_bytefile(index).arr_byte(1To!Rest)Get#1,arr_bytefile(index).arr_byteEndIfCloseEndSubPrivateSubWait(ByValSecAsInteger)DimItickAsLongkick=GetTickCountDoDoEvents1.oopUntilGelTickCount-kick>=SecEndSubPrivateSubSendFile()Dim1AsLongDimiAsIntegerFor1=1ToUBound(arr_bytefile)WinSoCk2.SendDalaarr_bytefile(l).arr_byteWait(I)NextCommand2.Enabled=TrueEndSub3)文件接收程序如下OptionExplicitPrivateTypebyte_fileindexAsLongarr_byle()AsByleEndTypePrivatenAsLongPrivate!ReceivedAsLongPrivate!TotalAsLongPrivatea-bytefile()Asbyte_filePrivateSubForm_Load()WinsockLRemotcHost=Forml.TxtlP.TextWinsock2.RemoteHost=Forml.TxtIP.TextWinsockLRcmotcPort=10085

    注意事项

    本文(基于UDP的文件传输..docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开