收藏 分享(赏)

通信网原理课程设计报告.docx

上传人:dreamzhangning 文档编号:2703652 上传时间:2018-09-25 格式:DOCX 页数:29 大小:215.70KB
下载 相关 举报
通信网原理课程设计报告.docx_第1页
第1页 / 共29页
通信网原理课程设计报告.docx_第2页
第2页 / 共29页
通信网原理课程设计报告.docx_第3页
第3页 / 共29页
通信网原理课程设计报告.docx_第4页
第4页 / 共29页
通信网原理课程设计报告.docx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、中 南 大 学通信网原理课程设计报告 专业班级 电子信息 1002 班 姓名学号 指导教师 陈科文、支国明、周扬 设计时间 2013 年 7 月 电子信息工程系 信息科学与工程学院 目录 第一章 距离矢量路由算法实现 11.1、课程设计目的与主要任务 .11.1.1、课程设计目的 11.1.2、课程设计主要任务 11.2、课程设计题目和设计 .21.3、设计思想 .31.4、编程实现过程的详细说明 .51.4.1、程序界面设计 51.4.2、总体工作流程图 51.4.3、关键函数和语句的说明 61.4.4、设计结果的演示与分析等。 101.5、设计总结 .111.6、参考文献 .111.7、附

2、录:源程序代码 .12第二章 文件传输 192.1、课程设计目的与主要任务 .192.1.1、课程设计目的 192.1.2、课程设计主要任务 192.2、课程设计题目和设计 .202.3、设计思想 .212.4、编程实现过程的详细说明 .232.4.1、程序界面设计 232.4.2、总体工作流程图 232.4.3、设计结果的演示与分析 242.5、设计总结 .272.6、参考文献 .272.7、附录:源程序代码 .28第 1 章 距离矢量路由算法的实现1.1 课程设计目的及主要任务 本次课程设计的目的是通 过将理论与实践相结合,使学生进一步深入理解通信网的工作原理,掌握网络应 用开发技术,学会

3、应用所学理论知识来分析和解决实际问题,培养网络技术研究 与开发的基本能力以及创新精神。本课程设计的主要任务是在 掌握计算机网络 TCP/IP 等典型协议原理的基础上,通过编程设计对网络协议或 算法进行模拟实现,并应用相应网络协议来开发一个网络应用系统。1.2 课程设计要求(1)系统功能要求:编写距离矢量路由选择算法演示程序,能根据网络拓扑和线路延迟的变化自动更新路由表,并输出结果。可从文件(格式自定)中读取网络拓扑结 构,包括连通状态和直连两点间延迟,可输出任一点的邻接结点和对应的延迟。按照图的最短路径算法构造网络的初始路由表,能输出任意两点间的延迟 和最短路径;可以改变任一点邻接结点的路由表

4、和之间的延迟,按照距离矢 量路由选择算法计算出新的路由表。要求: 能正确的输出路由信息。(2)运行条件:基于 C_free 程序的平台(3)用户操作要求:能够输入相应路由值,并能继续或结束程序运行1.3 设计思想(1)实验原理:路由以矢量(距离、方向)的方式被通告出去的,其中距离是根据度量来定义的,方向是根据下一跳路由器定义的。被认为是“依照传闻进行路由选择” ,RIP 协议使用距离矢量算法,网络工作时路由器之间利用此协议更新路由表项,每隔 2 分钟更新一次。路由表项格式:(direction,jump,next)分别表示目的网络地址,跳数(距离) ,下一跳路由地址当某路由器 A 收到相邻路由

5、器 B发来的路由信息(D,J,N)后执行以下分析:首先修改(D,J,N)(D,J1,B)1 如果 A 没有到 D 的路由信息,则生成路由表项(D,J1,B) ;否则 22 A 有到 D 的路由信息(D,?,B)?就是 116 任意值,则将其更新为(D,J1,B) ;否则 33 A 有到 D 的路由信息(D,K,X)其中KJ1,X!B,则将其更新为(D,J1,B) ;否则 44 什么都不做。这是自己做本实验时总结的原理。(2)关键问题:要实现线路延迟的变化即时更新路由表;构造最短路径程序。1.4 程序设计(1)流程图接受到数据包广播帧?为本设备的帧?目的设备为本设备的子设备是否有路由能力为该目的

6、路由广播帧将帧发送到其上层直接到目的设备路由沿树选择路由是否选择路由到下一跳路由 开始选择最短路由YESYESYESNONONONOYESNONO NOYES(2)关键函数说明:第一个是 INITDATA:void InitData(FILE *pfile)char num10;int i = 0;char c;int m, n;fseek(pfile, 0, 0); /文件指针从距 0 位置 0 距离开始读取for (m = 0; !feof(pfile) elseprintf(“ %d“, dataij.dis);if (dataij.from 0) /如果 send 节点到 i 号节点有

7、路线if (datarecvi.dis datasendi.dis + datarecvsend.dis)/第二种 recv 与 i 相连,且直接相连值大于间接到 i 的延迟/如果现有路径比新路径远datarecvi.dis = datasendi.dis + datarecvsend.dis; /将recv 到 i 的延迟改为间接延迟的值datarecvi.from = send; /下一跳改为 send void Exchange() /实现所有相连的两路由进行数据交换并计算最短数值int i, j;for (i = 0; i 0) /如果两个节点之间有路径Communication(j,

8、 i); /将 i 号节点的路由表发送给 j 号节点 第三个是主函数:main() int start, end, i, j;FILE *pfile;pfile = fopen(“1.txt“, “r“);if (pfile = NULL)printf(“文件打开错误,按任意键退出.n“);getch();return 0;elseprintf(“n 路由表初始:n“);InitData(pfile);fclose(pfile);for (i = 0; i 0)printf(“ “, j + 65, dataij.dis);printf(“n“); /显示各路由的路由表Exchange();

9、/更新路由表 printf(“n 路由表交换:n“);OutputRoutData();printf(“输入起始路由节点数字(%d-%d)0 代表 A,1 代表 B. : “, 0, MAX_ROUTES - 1);scanf(“%d“, printf(“输入终点路由节点数字(%d-%d)0 代表 A,1 代表 B. : “, 0, MAX_ROUTES - 1);scanf(“%d“, if (start = end | start 6 | end 6)printf(“n 输入错误,请按任意键退出n“);getch();return 0;elseint cur = start;int tot

10、al = 0;if (datastartend.dis “, cur + 65);while (datacurend.from = 0) /起始点与终点不相连。0 是 Atotal += datacurdatacurend.from.dis; /total 变成 cur 与下一跳的延迟printf(“%c-“, datacurend.from + 65);cur = datacurend.from; /起始路由变成下一跳 total += datacurend.dis;printf(“%cn 总的路由距离 = %d“, end + 65, total);getch();return 0; (3

11、)设计结果演示:运行程序后,显示初始认为设计的路由表的各项权值,设计思想是-1 代表无穷。出现路由表的交换,路径权值。如图(1)所示:图(1)输入始末路由节点后,程序会计算出最短路径,并显示出来,还会自动计算最短路径的权值。如图(2)所示:图(2)(4)网络拓扑图1.5 参考文献1(美)Larry L.Peterson,Bruce S.Davie 著,薛静锋,等译.计算机网络:系统方法 (第 4 ).北京:机械工业出版社.2 吴英编著.计算机网络应用软件编程技术.北京:机械工业出版社,2010ABC DEFG2 584 5 19373 谭浩强著C 程序设计(第四版) 清华大学出版社第 2 章

12、文件传输程序2.1 课程设计目的及主要任务 本次课程设计的目的是通 过将理论与实践相结合,使学生进一步深入理解通信网的工作原理,掌握网络应 用开发技术,学会应用所学理论知识来分析和解决实际问题,培养网络技术研究 与开发的基本能力以及创新精神。本课程设计的主要任务是在 掌握计算机网络 TCP/IP 等典型协议原理的基础上,通过编程设计对网络协议或 算法进行模拟实现,并应用相应网络协议来开发一个网络应用系统。2.2 课程设计要求(1)系统功能要求:包括客户端和服务器程序,应实现以下功能:(1)客户端既能上 传文件到服务器,也能从服务器下载文件;(2)在客户端上可显示文件基本信息 和传输状态信息,可

13、浏览服务器上供下载的文件列表,选择某文件下载到本地某 目录下;(3)服务器端能接收客户端上传的文件,并保存在某一目录下;也能响 应客户端的文件浏览与下载请求;(4)增加其它附加创新功能。程序应具有图形 化界面,美观友好。 (2)运行条件:基于 Microsoft Visual Basic 6.0 软件与 WINSOCK 控件。(3)用户操作要求:能显示出文件传输设计界面,能运行界面上的操作按钮,并能即时开启和关闭程序。(4)2.3 设计思想(1)实验原理:FTP 的主要功能是在主机间高速可靠地传输文件。目前 FTP仍然保持其可靠性,即使在今天,它还允许文件远程存取。这使得用户可以在某个系统上工

14、作,而将文件存贮在别的系统。例如,如果某用户运行 Web 服务器,需要从远程主机上取得 HTML 文件和 CGI 程序在本机上工作,他需要从远程存储站点获取文件(远程站点也需安装 Web 服务器)。当用户完成工作后,可使用 FTP 将文件传回到 Web 服务器。采用这种方法,用户无需使用 Telnet 登录到远程主机进行工作,这样就使 Web 服务器的更新工作变得如此的轻松。 FTP 是 TCP/IP 的一种具体应用,它工作在 OSI 模型的第七层,TCP 模型的第四层上,即应用层,使用 TCP 传输而不是 UDP,这样 FTP 客户在和服务器建立连接前就要经过一个被广为熟知的“三次握手“ 的

15、过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。而设计本实验的时候,利用 VB 程序设计,是运用 Winsock 控件来进行两台计算间的文件传输。随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以 TCP/IP 协议最为流行。本文讨论的 Winsock 控件,提供了访问 TCP/IP 网络的捷径,使用它可以不必了解TCP/IP 的细节和调用 Winsock API,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信.Winsock 即 Windows Soc

16、kets 规范的简称,是目前最流行的网络通信应用程序接口之一。所谓 Socket,通常也称作“套接字“ ,用于描述 IP 地址和端口,是一个通信链的句柄。应用程序通常通过 “套接字”向网络发出请求或者应答网络请求。Socket 是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock 控件工作在传输层上,在这一层上,目前主要流行的协议包括 TCP和 UDP 两种:TCP 协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于 TCP 协议的(例如常用的HTTP、FTP、SMTP、POP3 等协

17、议) ;UDP 协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的.Winsock 控件是基于Socket 规范创建的,所以其通信的实质是对 Socket 接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用 Socket 类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户” ,被呼叫者则称为“服务器” ,而号码则为“IP 地址+端口” ,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。因此,基于 TCP/IP 协议的通信,

18、需要分别建立客户端应用程序和服务器端应用程序。2.4 程序设计(1)流程图主程序流程图 发送数据流程图 接受处理流程图(2)关键函数说明:Option ExplicitDim FilePath As String, FileSend As BooleanDim filename As String, FileLen As LongConst Text = “文件名: 未选择文件“ & vbCrLf & vbCrLf & “文件长度: 未选择文件“Private Declare Function GetCursorPos Lib “user32“ (lpPoint As POINTAPI) As

19、 LongPrivate Declare Function WindowFromPoint Lib “user32“ (ByVal xPoint As 开始操作系统初始化创建任务开始任务接受数据任务发送延迟?发送数据任务开始 开始建立连接查看连接状态与服务器 IP 地址或端口号进行 TCP 连接发送数据信息发送完毕休眠或关闭连接查询 TCP SOCKET 是否连接在 TCP 通道上收到数据?解码收到的数据进行相应的操作YNYNLong, ByVal yPoint As Long) As LongPrivate Type POINTAPIX As LongY As LongEnd TypeDim

20、 MousePos As POINTAPIDim FileByt() As BytePrivate Sub Com_OK_Click()On Error GoTo ErrIf Com_OK.Caption = “侦听“ ThenWinsock1.CloseWinsock1.RemotePort = 0Winsock1.LocalPort = Val(T_Prot)Winsock1.ListenCenterPrint Pic_Connect, “正在侦听“ElseWinsock1.CloseWinsock1.RemoteHost = T_PCIPWinsock1.LocalPort = 0Win

21、sock1.RemotePort = Val(T_Prot)Winsock1.ConnectCenterPrint Pic_Connect, “正在连接“End IfExit SubErr:MsgBox Err.Description, 16, Err.NumberEnd SubPrivate Sub Com_Close_Click()Dim Temp As ByteIf FileSend = True ThenTemp = MsgBox(“当前正在传输文件,确定要中断连接?“, 289, “提示“)ElseTemp = 1End IfIf Temp = 1 Then Winsock1_Clo

22、seEnd SubPrivate Sub Com_Send_Click()If Com_Send.Caption = “发送文件“ ThenIf Winsock1.State = 7 ThenIf FileLen 0 And FilePath 1 ThenMe.Height = Frame1.Height + Frame2.Height + 120 + 615Me.Width = Frame2.Width + 330End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer)If Winsock1.State = 7 ThenMsgBox “检

23、测到尚有未关闭的连接,请先关闭连接。“, 64, “提示“Cancel = 2ElseClose #1End IfEnd SubPrivate Sub Option_Click(Index As Integer)On Error Resume NextIf Index = 0 ThenT_PCIP = Winsock1.LocalIPT_PCIP.Enabled = FalseCom_OK.Caption = “侦听“T_Prot.SelStart = Len(T_Prot)T_Prot.SetFocusElseT_PCIP = “T_PCIP.Enabled = TrueCom_OK.Cap

24、tion = “连接“T_PCIP.SetFocusEnd IfWinsock1.CloseCenterPrint Pic_Connect, “已准备就绪“End SubPrivate Sub Picture2_Click()End SubPrivate Sub T_File_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)On Error GoTo ErrFilePath = Data.Files(1)filename =

25、 Mid(FilePath, InStrRev(FilePath, “) + 1)Close #1Open FilePath For Binary As #1FileLen = LOF(1)T_File = “文件名:“ & filename & vbCrLf & vbCrLf & “文件长度:“ & FileLenExit SubErr:If Err.Number = 75 ThenMsgBox “文件打开错误,无法发送!“, 4096 + 16, “提示“ElseMsgBox Err.Description, 4096 + 16, Err.NumberEnd IfEnd SubPrivat

26、e Sub Timer1_Timer()GetCursorPos MousePosIf Picture2.hwnd “N = N + 1filename = LName & “(“ & N & “)“ & RNameLoopClose #2Open filename & “.XFRJ“ For Binary Lock Read Write As #2Winsock1.SendData UTF8_Encode(“203“)Winsock1.SendData UTF8_Encode(CStr(LOF(2)Received = LOF(2)T_File = “文件名:“ & filename & v

27、bCrLf & vbCrLf & “文件长度:“ & FileLenCom_Send.Caption = “取消接收“SendFile.Text = “正在接收文件“-对方接受请求发送文件长度Case Is = 201If FileSend ThenSendFile.Text = “正在发送文件“Label4 = “工作状态:正在发送数据.“Winsock1.SendData UTF8_Encode(“102“)Winsock1.SendData UTF8_Encode(FileLen)End If-对方拒绝请求初始化Case Is = 202MsgBox “对方拒绝接收文件“ & filen

28、ame & “!“, 4096 + 64, “提示“Com_Send.Caption = “发送文件“FileSend = FalseSendFile.Text = “文件传输进度“-对方断点位置发送文件Case Is = 203If FileSend ThenOn Error GoTo SendErr:Received = Val(Mid(UTF8_Decode(DataByt), 4)Temp = IIf(PACKSIZE + Received LOF(1), LOF(1) - Received - 1, PACKSIZE - 1)If Temp = LOF(1) ThenFileSend

29、 = FalseSendFile.Text = “文件传输进度“Label4 = “工作状态:空闲“Com_Send.Caption = “发送文件“MsgBox “发送完成!“, 4096 + 64, “提示“End IfOn Error GoTo 0End If-接收错误终止初始化Case Is = 253MsgBox “文件接收端错误,接收!“, 4096 + 16, “错误“FileSend = FalseSendFile.Text = “文件传输进度“Label4 = “工作状态:空闲“Com_Send.Caption = “发送文件“-发送错误终止初始化Case Is = 254M

30、sgBox “文件发送端发生错误,发送终止!“, 4096 + 16, “错误“FileSend = FalseSendFile.Text = “文件传输进度“Label4 = “工作状态:空闲“Com_Send.Caption = “发送文件“-对方取消传输初始化Case Is = 255FileSend = FalseMsgBox “文件“ & filename & “的传输已被对方取消!“, 4096 + 64, “提示“Com_Send.Caption = “发送文件“Label4 = “工作状态:空闲“FileSend = False-正在传输文件写入文件Case ElseOn Er

31、ror GoTo SaveErr:If FileSend ThenTemp = LOF(2) 保存写入前文件长度ReDim FileByt(bytesTotal)For J = 1 To UBound(FileByt)FileByt(J) = DataByt(J - 1)NextFor J = Received + 1 To Received + UBound(FileByt)Put #2, J, FileByt(J - Received)DoEventsNextTemp = LOF(2) 保存写入后文件长度If Err.Number = FileLen ThenFileSend = Fals

32、eClose #2SendFile.Text = “文件传输进度“Label4 = “工作状态:空闲“Com_Send.Caption = “发送文件“Name filename & “.XFRJ“ As filenameMsgBox “接收完毕!“, 4096 + 64, “提示“End IfEnd IfOn Error GoTo 0End Select-发送错误处理Exit SubSendErr:If Err.Number = 6 ThenWinsock1.SendData UTF8_Encode(“224“)MsgBox “文件发送错误,已终止发送!“, 16, “提示“FileSend

33、 = FalseSendFile.Text = “文件传输进度“Label4 = “工作状态:空闲“Com_Send.Caption = “发送文件“End If-接收错误处理Exit SubSaveErr:Debug.Print Err.DescriptionDoEventsExit SubOpenErr:Winsock1.SendData UTF8_Encode(“253“)DoEventsMsgBox “无法打开临时文件“ & filename & “.XFRJ” ,接收终止!“, 4096 + 16, “错误“FileSend = FalseSendFile.Text = “文件传输进

34、度“Label4 = “工作状态:空闲“Com_Send.Caption = “发送文件“End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)MsgBox Description, 16, NumberWinsock1_CloseCenter

35、Print Pic_Connect, “已准备就绪“End Sub模块一代码:Public Sub CenterPrint(PictureBox As PictureBox, Text As String)PictureBox.ClsPictureBox.AutoRedraw = TrueW = PictureBox.TextWidth(Text)x = (PictureBox.ScaleWidth - W) / 2y = PictureBox.TextHeight(Text)y = (PictureBox.ScaleHeight - y) / 2PictureBox.CurrentX = x

36、PictureBox.CurrentY = yPictureBox.Print TextEnd Sub模块二代码:Private Declare Function WideCharToMultiByte Lib “kernel32“ (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As

37、 String, ByVal lpUsedDefaultChar As Long) As LongPrivate Declare Function MultiByteToWideChar Lib “kernel32“ (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As LongPrivate Const CP_UTF8

38、= 65001Private Declare Sub MoveMemory Lib “kernel32“ Alias “RtlMoveMemory“ (Destination As Any, Source As Any, ByVal Length As Long)Public Function UTF8_Encode(ByVal strUnicode As String) As Byte()UTF-8 编码Dim TLen As LongDim lngBufferSize As LongDim lngResult As LongDim bytUtf8() As ByteTLen = Len(s

39、trUnicode)If TLen = 0 Then Exit FunctionlngBufferSize = TLen * 3 + 1ReDim bytUtf8(lngBufferSize - 1)lngResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(strUnicode), TLen, bytUtf8(0), lngBufferSize, vbNullString, 0)If lngResult 0 ThensBuffer = Left(sBuffer, lRet)End IfUTF8_Decode = sBufferEnd Function

40、Public Function CreateStringFromByte(ByRef byteArray() As Byte, ByVal ByteLength As Long) As String字节数组中的数据连接成字符串Dim StringData As String* 分配字符串空间StringData = Space(ByteLength)* 复制字符数组地址内容到字符串地址MoveMemory ByVal StringData, ByVal VarPtr(byteArray(0), ByteLength* 返回字符串CreateStringFromByte = StringData

41、End FunctionPublic Function SaveStringToByteArry(ByRef strString As String) As Byte()把字符串存入字节数组Dim BytArray() As Byte, lngStrLen As Long* 获取字符串的长度(字节)lngStrLen = LenB(StrConv(strString, vbFromUnicode)* 分配数组空间ReDim BytArray(lngStrLen - 1)* 将字符串地址中的内容拷贝到数组MoveMemory ByVal VarPtr(BytArray(0), ByVal str

42、String, lngStrLenSaveStringToByteArry = BytArrayEnd Function模块三代码:Option ExplicitPrivate Declare Function DrawIcon Lib “user32“ (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As LongPrivate Declare Function GetModuleHandle Lib “kernel32“ Alias “GetModuleHandleA“ (ByVal lp

43、ModuleName As String) As LongPrivate Declare Function ExtractIcon Lib “shell32.dll“ Alias “ExtractIconA“ (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As LongPrivate Declare Function SendMessage Lib “user32“ Alias “SendMessageA“ (ByVal hwnd As Long, ByVal wMsg As L

44、ong, ByVal wParam As Long, lParam As Any) As LongPrivate Const WM_SETICON = &H80Private Const ICON_SMALL = 0Private Const ICON_BIG = 1Public Sub SetWindowIcon(FormName As Object, RES_NUM As Long)Dim m_Icon As Long, hModule As LongDim filename As StringSet FormName.Icon = Nothingfilename = Replace(En

45、viron(“temp“) & “ & App.EXEName & “.ICO“, “, “)Dim DataFile() As ByteDataFile = LoadResData(RES_NUM, “CUSTOM“)CloseOpen filename For Binary As #1Put #1, , DataFileClose #1hModule = GetModuleHandle(filename)m_Icon = ExtractIcon(hModule, filename, 0)SendMessage FormName.hwnd, WM_SETICON, 0, ByVal m_IconKill filenameEnd Sub窗口界面:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报