基于UDP的文件传输._第1页
基于UDP的文件传输._第2页
基于UDP的文件传输._第3页
基于UDP的文件传输._第4页
基于UDP的文件传输._第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机网络综合课程设计报告基于UDP协议的文件传输系统的设计与实现学生姓名:_指导教师:所在系: 电子信息系所学专业:电子信息工程年 级:2013年6月目录基于 UDP 的文件传输的系统的设计与实现 3一、实验的相关知识 31.1 通信的模式 31.2 UDP 协议 41.3 Winsock 控件 41.4 Winsock 控件重要属性、方法和事件 41.6 commomdialog 控件 61.7 timer 控件 7三、实验步骤 73.1 总体规划 73.2 模块设计 83.3 创建窗体 83.4 程序设计 93.5 系统运行 14四、实验结论 15五、参考文献 1517基于 UDP 的文

2、件传输的系统的设计与实现摘要:该实验的任务是实现文件的传输,并且是基于 UDP协议的。 所有文件在该协议下可以实现发送并正确接收。此时需要了解的是 UDP勺数据包一次最多只能发送8K,所以我们想到通过拆包和创建窗 体的方法来实现文件的传输。 拆包主要是规定每个数据包的大小, 然 后计算具体的文件所需要的包数, 创建窗体的目的是编写程序来进行 分包发送和接收。通过系统运行窗体我们可以知道 UDF不仅可以传送 和接收小文件,还可以传输和接收较大的文件。通过实验可知UDP是 不可靠的无连接传输, 所以在传输过程中会发生丢包的情况, 但大部 分情况下传输还是比较好的。关键词:UDP协议;发送文件;接收

3、文件;拆包;Win sock控件一、实验的相关知识C/S 的模式来实现通1.1 通信的模式 由于是实现点对点的文件传输,因此在程序中我们使用的是信。对于C/S的模式,即分为客户端和服务端。服务端用来接收客户端的连接,实现两端之间互相传输文件。采用C/S的模式可以更好的体现程序的功能设计思想,充分调用在LAN中的server和client两方面的处理能力,极大的减少网络上的信息流通量。C/S 体系结构有可能提供一种开放式的、易伸缩扩展的分布式计算机环境,并保护硬件等投资。1.2 UDP协议该实验文件传输是在UDP协议下进行的,UDP提供无连接不可靠的用户 数据包传输。其中每一个数据段只有 8By

4、te相对于TCP传输开销较少,且无 须对发送速率进行管理。UDP发送数据的速率仅仅受限于程序产生数据的速 率,信源主机的性能及in ternet上可以利用的宽带。并且与 TCP不同的是 UDP不需要连接,可直接发送,传输数据较快,但同时其稳定性不好,易丢 包。1.3 Win sock 控件Win sock即Win dows Sockets规范的简称,是目前最流行的网络通信应 用程序接口之一。所谓Socket,通常也称作套接字,用于描述IP地址和 端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求 或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受

5、请求,也可以发送请求,利用它可以较为方便的编写网络上数据 的传递。Win sock控件工作在传输层上,在这一层上,目前主要流行的协议 包括TCP和UDF两种:TCP协议适用于那些对于数据的可靠性要求比较高的 情况,目前大多数的网络应用层协议都是基于 TCP协议的(例如常用的HTTP FTP SMTP POP3等协议);UDP协议适用于对数据可靠性要求不高而对速度 要求较高的情况,这里主要包括一些需要大流量的(例如 Real公司的RTSP 协议,腾讯公司的QQ协议等)。1.4 Win sock控件重要属性、方法和事件(1)属性Protocol :通过Protocol属性可以设置Win Sock控

6、件连接远程计算机使用的协议。 可选的协议是 TCP和UDP对应的 VB中常量分别是 sckTCPProtocol和 sckUDPProtocol,Win sock 控件默认协议是 UDPRemoteHostIP:返回远程计算机的IP地址。本实验使用的是UDP协议,那么当DataArrival事件后,发送UDFP报文的计算机的IP才赋给了这个属性。如果 是TCP协议,在客户端,当使用了控件的Connect方法后,远程计算机的IP 地址就赋给了 RemoteHostIP属性,而在服务器端,当 Conn ectRequest事件 后,远程计算机(客户端)的IP地址就赋给了这个属性。ByteRecei

7、ved :返回当前接收缓冲区中的字节数。State :用于返回当前 Win Sock控件的状态。常数值描述sckClosed0缺省值,关闭SckOpe n1打开SckListe ning2侦听(TCP)sckC onnectionPending3连接挂起(TCP)sckResolv in gHost4识别主机sckHostResolved5已识别主机sckC onnecting6正在连接(TCF)sckC onn ected7已连接(TCP)sckClos ing8冋级人员正在关闭 连接(TCP)sckError9错误表1-1方法Bi nd :用Bind方法可以把一个端口号固定为本控件使用,使

8、得别的应用程序能再 使用这个端口。Listen :只在使用TCP协议时有用。它将应用程序置于监听检测状态。Conn ect:当本地计算机希望和远程计算机建立连接时,就可以调用Connect方法。Accept:当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的 请求。Sen dData:当连接建立后,要发送数据就可以调用Sen dData方法,该方法只有一个参数,就是要发送的数据。GetData:当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓 冲区中取出数据,可以使用 GetData方法。PeekData:和GetData方法类似,但PeekData在取得数据后并

9、不把缓冲区清空。(3)事件Conn ectRequest: ( TCP当本地计算机接收到远程计算机发送的连接请求时,控件的Conn ectRequest 事件将会被触发。SendProgress :当一端的计算机正在向另一端的计算机发送数据时,SendProgress事件将被触发。SendProgress事件记录了当前状态下已发送的字节数和剩余字节 数。Sen dComplete:当所有数据发送完成时,被触发。DataArrival :当建立连接后,接受到了新数据就会触发这个事件。注意:如果在接受到新数据前,缓冲区中非空,就不会触发这个事件。Error :当在工作中发生任何错误都会触发这个事件

10、。1.5 Winsock 控件通信的工作原理Winsock 控件是基于 Socket 规范创建的,所以其通信的实质是对 Socket 接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用 Socket 类来建立套接字连接, 可以将这个过程想象为一次电话呼叫过程: 呼 叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只 不过这里的呼叫者被称为“客户” ,被呼叫者则称为“服务器” ,而号码则为 “IP 地址 +端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的 “服务器”正在监听。注意端口号被规定在 065535 范围内的某一个整数, 其中 01023 被预先

11、定义的服务器通信所占用(如 telnet 占用 23,http 占 用端口 80),所以最好使用 102465535这些端口中的某一个, 以免发生端口 冲突。1.6 commomdialog 控件Com mon Dialog控件提供一组标准的操作对话框,进行诸如打开和保存文 件,设置打印选项,以及选择颜色和字体等操作。通过运行 Windows 帮助 引擎控件还能显示帮助。语法CommonDialog控件在 Visual Basic 和 Microsoft Windows 动态链接 库 ommdlg.dll. 的例程之间提供了一个接口。 为了用这个控件创建一个对话 框,ommdlg.dll. 必

12、须在 Microsoft Windows 的 SYSTEM!录下。 在应用程序中要使用Com mon Dialog控件,可将其添加到窗体中并设置其属 性。控件所显示的对话框由控件的方法确定。在运行时,当相应的方法被调 用时,将显示一个对话框或是执行帮助引擎;在设计时,CommonDialog 控件是以图标的形式显示在窗体中。该图标的大小不能改变。如果该控件不在 “工具箱”中,请按 CTRL+T 键或使用菜单:工程 -部件,显示“部件”对 话框。 在这个“部件”对话框中, 选择 Microsoft CommonDialog Control “ 。使用指定的方法,Commo nDialog控件能够

13、显示下列对话。方法 所显示的对话框ShowOper显示“打开”对话框 ShowSave显示“另存为”对话框ShowColor 显示“颜色”对话框 ShowFont 显示“字体”对话框ShowPrinter 显示“打印”或“打印选项”对话框ShowHelp 调用 Windows 帮助引擎在对话框接口上单击,Com mon Dialog控件将自动提供与上下文有关的帮 助: 单击标题栏中的“这是什么?”帮助按钮,然后单击想详细信息的项 目。 将鼠标放在想进一步详细信息的项目上,单击右键,然后在所显示的上下文 菜单中选择这是什么命令。 操作系统提供在 Windows 95帮助弹出中显示的 文本。也可以

14、通过设置 Flags属性,在带有CommonDialog控件的对话框中 显示一个帮助按钮,但是,必须在这个位置提供帮助主题。1.7 timer 控件Timer控件(最主要的就是enabled属性,和Interval 属性,下面有详 细介绍)通过引发Timer事件,Timer控件可以有规律地隔一段时间执行 一次代码。Enabled 属性返回或设置一个值,该值用来确定一个窗体或控件是否能够对用户产生的事 件作出反应。In terval属性返回或设置对Timer控件的计时事件各调用间的毫秒数。说明:可以在设计时或在运行时设置Timer控件的Interval 属性。使用In terval属性时,请记住

15、:Timer控件的Enabled属性决定该控件是否对时间的推移做响应。将Enabled设置为False 会关闭Timer控件,设置为 True则打开它。当 Timer控件置为有效时,倒计时总是从其Interval属性的设置值开始。创建Timer事件程序用以告诉Visual Basic 在每次Interval到时该做什么。、实验原理实验设计过程中主要是通过 Win sock控件进行UDP文件传输。分别在发 送端和接收端建立控件 Win sock,经过对 Win sock控件程序的写入,然后通 过端口号和IP地址的绑定来建立联系,而无需像 TCP样建立连接,直接 可以传送文件,而且能较准确的发送和

16、接收。下图是 UDP数据报的封装:UDP封装IP包Bl* U D展根 IP头UDP头载荷数据三、实验步骤3.1总体规划根据该实验的要求在UDP协议下实现文件的传输。本程序的文件传输系 统的实现应包含udp聊天,上传文件,接收文件等几个部分,整个程序采用VB完成程序使用流式套接字。在设计时设计选中文件界面中,传输并接收完成界面 一个客户端即可用于用于发送文件,也可用于接收文件。在通信的时候主要可以分为两个部分,一个部分是控制信息的传输部分, 而另一个部分就是文件的传输部分。传送的控制信息可以包含发送文件的请 求,文件的名称、大小等,由于这方面的数据量比较小,因此采用了VB所提供的WINSocke

17、t类的串行化技术来实现。对于文件的传输,由于数据量相 对来说比较大,所以用两个线程来实现文件的传输,一个线程用于发送,一 个线程用于接收。3.2模块设计(1)服务端模块服务端要与客户端进行通信,首先,必须知道客户端的域名或IP地址(RemoteHost属性),就像要和某人打电话前,必须知道对方的电话号码; 其次,还必须和客户端进行端口绑定,也就是端口号要匹配,这样传送的文 件才能到达客户端。而且每个文件都有自己文件的长度和大小等。且能传送 任意磁盘中任意文件夹中的文件。(2)客户端模块同样地,客户端也需要有服务端的端口号和IP地址,而且还能把接收到 的文件放到自己想要的磁盘中。3.3创建窗体1

18、)Udp聊天窗口Udp聊天窗口要有发送和接收窗口能要有远程IP端口地址、发送端口号、接收端口号、发送和接收文件所处位置、发送按键、Win sock等- F”才巨J叵区1返田 oo-oaooaoooooooJO 1-0 3C2 事3 直件怯检1234哇爲妤了阿4044叫41T43H3M:y*33E 2 2 2 s22 21 m 1 i 113:3:3:3:3:3:3: gsQ-MgT吕!a图3.12)发送窗体窗体要有选择文件的控件commomdialog要有返回聊天的功能index: H4 index :1415146 ind: 17 index:1 1000 ThenMe.Text2 = En

19、d IfEnd Sub2)文件选择上传界面程序如下:Option ExplicitPrivate Type byte_fileindex As Longarr_byte() As ByteEnd TypePrivate Declare Function GetTickCount Lib kernel32 () As Long Private arr_bytefile() As byte_filePrivate lfilesize As LongPrivate Sub cmdback_Click()Form1.ShowEnd SubPrivate Sub Command2_Click()cdg.

20、Filter = 应用程序 |*.exe cdg.ShowOpenIf cdg.FileName Then: Command3.Enabled = TrueEnd SubPrivate Sub Command3_Click()Command2.Enabled = FalseCommand3.Enabled = FalseCall FileToArray(cdg.FileName)Form3.ShowWinsock1.SendData #File# & Str(lfilesize) & |10Call SendFileEnd SubPrivate Sub Form_Load()Winsock1.

21、RemoteHost = Form1.TxtIP.Text Winsock1.RemotePort = 10086Winsock1.LocalPort = 10085Winsock1.BindWinsock2.RemoteHost = Form1.TxtIP.TextWinsock2.RemotePort = 1000Winsock2.Bind 1001Command3.Enabled = FalseEnd SubPrivate Sub FileToArray(ByVal FileName As String)Dim lChunck As LongDim lRest As LongDim in

22、dex As Longlfilesize = CLng(FileLen(FileName) lChunck = FileLen(FileName) 1024 lRest = FileLen(FileName) Mod 1024Open FileName For Binary As #1For index = 1 To lChunckReDim Preserve arr_bytefile(index) arr_bytefile(index).index = indexReDim arr_bytefile(index).arr_byte(1 To 1024) Get #1, , arr_bytef

23、ile(index).arr_byteNextIf lRest 0 ThenReDim Preserve arr_bytefile(index) arr_bytefile(index).index = indexReDim arr_bytefile(index).arr_byte(1 To lRest)Get #1, , arr_bytefile(index).arr_byteEnd IfCloseEnd SubPrivate Sub Wait(ByVal Sec As Integer)Dim ltick As Longltick = GetTickCountDoDoEventsLoop Un

24、til GetTickCount - ltick = SecEnd SubPrivate Sub SendFile()Dim l As LongDim i As IntegerFor l = 1 To UBound(arr_bytefile)Winsock2.SendData arr_bytefile(l).arr_byteWait (1)Text1.SelText = index: & Str(l) & chunk size: & _UBound(arr_bytefile(l).arr_byte) & byte & vbCrLfNextCommand2.Enabled = TrueEnd S

25、ub3)文件接收程序如下Option ExplicitPrivate Type byte_fileindex As Longarr_byte() As ByteEnd TypePrivate n As LongPrivate lReceived As LongPrivate lTotal As LongPrivate arr_bytefile() As byte_filePrivate Sub Form_Load()Winsock1.RemoteHost = Form1.TxtIP.TextWinsock2.RemoteHost = Form1.TxtIP.TextWinsock1.Remot

26、ePort = 10085Winsock1.LocalPort = 10086Winsock1.BindWinsock2.RemotePort = 1001Winsock2.LocalPort = 1000Winsock2.BindlblProg.Caption = 0.0%lblSpeed.Caption = 速度 : & 0KB/SlblTime.Caption = 剩余时间 : 计算中 . lReceived = 0lTotal = 0Timer2.Enabled = False n = 0Me.Enabled = FalseEnd SubPrivate Sub lblProg_Chan

27、ge()lblProg.Left = (picProg.ScaleWidth - lblProg.Width) / 2End SubPrivate Sub WriteFile(ByVal Path As String)Dim l As LongOpen Path For Binary As #1For l = 1 To UBound(arr_bytefile)Put #1, , arr_bytefile(l).arr_byteNextCloseEnd SubPrivate Sub Timer2_Timer()Dim Sec As IntegerDim Min As IntegerDim lRe

28、st As LongIf lTotal = 0 ThenCall WriteFile(d:download.exe)MsgBox download.exe 传送完毕! , vbInformationUnload MeShell explorer.exe d:, vbNormalFocusEnd IflblSpeed.Caption = 速度 : & Int(lTotal / 1024) & KB/SlRest = picProg.ScaleWidth - lReceivedIf lTotal = 0 Then Exit SubSec = Int(lRest / 1024) / (lTotal

29、/ 1024)If Sec 0 ThenlblTime.Caption = 剩余时间 : & Format(Str(Min), 00) & 分 & Format(Str(Sec), 00) & 秒ElselblTime.Caption = 剩余时间 : & Format(Str(Sec), 00) & 秒 End If lTotal = 0End SubPrivate Sub Win sock1_DataArrival(ByVal bytesTotal As Long)Dim strData As Stri ngWin sock1.PeekData strData, vbStri ngWin

30、sock1.GetData strDataText1.SelText = strDataIf Left(UCase(strData), 6) = #FILE# The npicProg.ScaleWidth = Val(Mid(strData, I nStr(strData, ) + 1)End IfEnd SubPrivate Sub Win sock2_DataArrival(ByVal bytesTotal As Long)Dim arr_byte() As ByteReDim arr_byte(bytesTotal - 1)n = n + 1Win sock2.PeekData arr

31、_byteReDim Preserve arr_bytefile( n)arr_bytefile( n).i ndex = nReDim arr_bytefile( n).arr_byte(1 To bytesTotal)arr_bytefile (n ).arr_byte = arr_byteWin sock2.GetData arr_byteTimer2.E nabled = TruelTotal = lTotal + bytesTotallReceived = lReceived + bytesTotalText1.SelText = index: & n & size: & Str(bytesTotal) & byte & vbCrLfpicProg.Li ne (0, 0)-(lReceived,

温馨提示

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

评论

0/150

提交评论