




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中 南 大 学通信网原理课程设计报告 专业班级 电子信息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、附录:源程序代码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 课程设计目的及主要任务 本次课程设计的目的是通 过将理论与实践相结合,使学生进一步深入理解通信网的工作原理,掌握网络应 用开发技术,学会应用所学理论知识来分析和解决实际问题,培养网络技术研究 与开发的基本能力以及创新精神。本课程设计的主要任务是在 掌握计算机网络TCP/IP等典型协议原理的基础上,通过编程设计对网络协议或 算法进行模拟实现,并应用相应网络协议来开发一个网络应用系统。1.2 课程设计要求(1)系统功能要求:编写距离矢量路由选择算法演示程序,能根据网络拓扑和线路延迟的变化自动更新路由表,并输出结果。可从文件(格式自定)中读取网络拓扑结 构,包括连通状态和直连两点间延迟,可输出任一点的邻接结点和对应的延迟。按照图的最短路径算法构造网络的初始路由表,能输出任意两点间的延迟 和最短路径;可以改变任一点邻接结点的路由表和之间的延迟,按照距离矢 量路由选择算法计算出新的路由表。要求: 能正确的输出路由信息。 (2)运行条件:基于C_free程序的平台(3)用户操作要求:能够输入相应路由值,并能继续或结束程序运行1.3 设计思想 (1)实验原理:路由以矢量(距离、方向)的方式被通告出去的,其中距离是根据度量来定义的,方向是根据下一跳路由器定义的。被认为是“依照传闻进行路由选择”,RIP协议使用距离矢量算法,网络工作时路由器之间利用此协议更新路由表项,每隔2分钟更新一次。路由表项格式:(direction,jump,next)分别表示目的网络地址,跳数(距离),下一跳路由地址当某路由器A收到相邻路由器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)流程图接受到数据包YES广播帧广播帧?NOYES将帧发送到其上层为本设备的帧?NO目的设备为本设备的子设备YES直接到目的设备路由NONO是否有路由能力NONONO是否选择路由为该目的路由沿树选择路由YESYES开始选择最短路由到下一跳路由(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) & m 7; m+) /feof(pfile),文件尾返回1,不是返回0.即不是文件尾部且m7循环.for (n = 0; !feof(pfile) & n = 0 & c = 9) | c = -) /*如果读到数字或符号.本题路由权值只能0到9*/numi+ = c; /*end of else if*/ /*end of while*/ /*end of for (n = 0*/ /*end of for (m = 0*/第二个是Outputroutdata: void OutputRoutData()int i, j;printf( );for (i = 0; i MAX_ROUTES; i+)printf( %c , i + 65);printf(n);for (i = 0; i MAX_ROUTES; i+)printf(%c , i + 65);for (j = 0; j MAX_ROUTES; j+)if (dataij.dis =10)printf( %d, dataij.dis);elseprintf( %d, dataij.dis);if (dataij.from 0)/如果未经过其它节点 所以直接相连的路由下一跳为-1printf( - );elseprintf( %c , dataij.from + 65); /输出下一跳路由 printf(n); void Communication(int recv, int send) /相连的两路由recv和send交换数据计算一次得到暂时最短距离int i;for (i = 0; i 0)/如果send节点到i号节点有路线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 MAX_ROUTES; i+)for (j = 0; j 0)/如果两个节点之间有路径Communication(j, 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; iMAX_ROUTES; i+)printf(%c|, i + 65);for (j = 0; j 0)printf( , j + 65, dataij.dis);printf(n); /显示各路由的路由表 Exchange(); /更新路由表 printf(n路由表交换:n);OutputRoutData();printf(输入起始路由节点数字(%d-%d)0代表A,1代表B. : , 0, MAX_ROUTES - 1);scanf(%d, &start);printf(输入终点路由节点数字(%d-%d)0代表A,1代表B. : , 0, MAX_ROUTES - 1);scanf(%d, &end);if (start = end | start 6 | end 6)printf(n输入错误,请按任意键退出n);getch();return 0;elseint cur = start;int total = 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) 设计结果演示:运行程序后,显示初始认为设计的路由表的各项权值,设计思想是-1代表无穷。出现路由表的交换,路径权值。如图(1)所示:图(1)输入始末路由节点后,程序会计算出最短路径,并显示出来,还会自动计算最短路径的权值。如图(2)所示:图(2)A(4) 网络拓扑图5287GBE1543DC9F1.5 参考文献1(美)Larry L.Peterson,Bruce S.Davie 著,薛静锋,等译.计算机网络:系统方法 (第4 ).北京:机械工业出版社.2 吴英编著.计算机网络应用软件编程技术.北京:机械工业出版社,20103 谭浩强著C程序设计(第四版) 清华大学出版社第2章 文件传输程序2.1 课程设计目的及主要任务 本次课程设计的目的是通 过将理论与实践相结合,使学生进一步深入理解通信网的工作原理,掌握网络应 用开发技术,学会应用所学理论知识来分析和解决实际问题,培养网络技术研究 与开发的基本能力以及创新精神。本课程设计的主要任务是在 掌握计算机网络TCP/IP等典型协议原理的基础上,通过编程设计对网络协议或 算法进行模拟实现,并应用相应网络协议来开发一个网络应用系统。2.2 课程设计要求(1)系统功能要求:包括客户端和服务器程序,应实现以下功能:(1)客户端既能上 传文件到服务器,也能从服务器下载文件;(2)在客户端上可显示文件基本信息 和传输状态信息,可浏览服务器上供下载的文件列表,选择某文件下载到本地某 目录下;(3)服务器端能接收客户端上传的文件,并保存在某一目录下;也能响 应客户端的文件浏览与下载请求;(4)增加其它附加创新功能。程序应具有图形 化界面,美观友好。 (2)运行条件:基于Microsoft Visual Basic 6.0软件与WINSOCK控件。(3) 用户操作要求:能显示出文件传输设计界面,能运行界面上的操作按钮,并能即时开启和关闭程序。(4)2.3 设计思想 (1)实验原理:FTP的主要功能是在主机间高速可靠地传输文件。目前FTP仍然保持其可靠性,即使在今天,它还允许文件远程存取。这使得用户可以在某个系统上工作,而将文件存贮在别的系统。例如,如果某用户运行Web服务器,需要从远程主机上取得HTML文件和CGI程序在本机上工作,他需要从远程存储站点获取文件(远程站点也需安装Web服务器)。当用户完成工作后,可使用FTP将文件传回到Web服务器。采用这种方法,用户无需使用Telnet登录到远程主机进行工作,这样就使Web服务器的更新工作变得如此的轻松。 FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的三次握手的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。而设计本实验的时候,利用VB程序设计,是运用Winsock控件来进行两台计算间的文件传输。随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。本文讨论的Winsock控件,提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用Winsock API,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信.Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协议的(例如常用的HTTP、FTP、SMTP、POP3等协议);UDP协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的.Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和服务器端应用程序。2.4 程序设计(1) 流程图 主程序流程图 发送数据流程图 接受处理流程图开始开始开始建立连接操作系统初始化查询TCP SOCKET是否连接创建任务查看连接状态与服务器IP地址或端口号进行TCP连接开始任务在TCP通道上收到数据?接受数据任务发送数据信息NN解码收到的数据发送延迟?发送完毕YY进行相应的操作休眠或关闭连接发送数据任务 (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 LongPrivate Declare Function WindowFromPoint Lib user32 (ByVal xPoint As Long, ByVal yPoint As Long) As LongPrivate Type POINTAPI X As Long Y As LongEnd TypeDim MousePos As POINTAPIDim FileByt() As BytePrivate Sub Com_OK_Click()On Error GoTo ErrIf Com_OK.Caption = 侦听 Then Winsock1.Close Winsock1.RemotePort = 0 Winsock1.LocalPort = Val(T_Prot) Winsock1.Listen CenterPrint Pic_Connect, 正在侦听Else Winsock1.Close Winsock1.RemoteHost = T_PCIP Winsock1.LocalPort = 0 Winsock1.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 Then Temp = MsgBox(当前正在传输文件,确定要中断连接?, 289, 提示)Else Temp = 1End IfIf Temp = 1 Then Winsock1_CloseEnd SubPrivate Sub Com_Send_Click()If Com_Send.Caption = 发送文件 Then If Winsock1.State = 7 Then If FileLen 0 And FilePath Then Winsock1.SendData UTF8_Encode(101) Winsock1.SendData UTF8_Encode(filename) Com_Send.Caption = 取消发送 SendFile.Text = 正在等待对方响应 FileSend = True Else MsgBox 尚未选择文件或文件长度为零, 64, 提示 End If Else MsgBox 请先建立连接!, 64, 提示 End IfElse Winsock1.SendData UTF8_Encode(255) FileSend = False Com_Send.Caption = 发送文件 Label4 = 工作状态:空闲End IfEnd SubPrivate Sub command4_click()EndEnd SubPublic filename1 As String 定义变量,存放文件名Public filenum As Integer 定义变量,设置文件号Private Sub command1_click()filenum = FreeFile() 求空闲的文件号Open filename1 For Input As filenum 以文件号打开文件MsgBox 文件 & filename1 & 已打开End SubPrivate Sub command2_click()While Not EOF(filenum) 取文件内容Input #filenum, str1T_File.Text = T_File.Text & Chr(10) & Chr(13) & str1 & Chr(10) & Chr(13)Wend 显示到文本框中Close 关闭文件End SubPrivate Sub dir1_change()File1.Path = Dir1.Path 改变目录列表框时,文件列表框的副目录也改变End SubPrivate Sub drive1_change() Dir1.Path = Drive1.Drive 改变磁盘时,目录列表框的根发生变化 End Sub Private Sub file1_click() filename1 = File1.Path & & File1.filename 取得文件名 End SubPrivate Sub Form_Load()SetWindowIcon Me, 101Form_ResizeCenterPrint Pic_IP, PCIP:CenterPrint Pic_Prot, Prot:CenterPrint Pic_Connect, 已准备就绪Option_Click (0)T_Prot.SelStart = Len(T_Prot)T_File = TextEnd SubPrivate Sub Form_Resize()If Me.WindowState 1 Then Me.Height = Frame1.Height + Frame2.Height + 120 + 615 Me.Width = Frame2.Width + 330End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer)If Winsock1.State = 7 Then MsgBox 检测到尚有未关闭的连接,请先关闭连接。, 64, 提示 Cancel = 2Else Close #1End IfEnd SubPrivate Sub Option_Click(Index As Integer)On Error Resume NextIf Index = 0 Then T_PCIP = Winsock1.LocalIP T_PCIP.Enabled = False Com_OK.Caption = 侦听 T_Prot.SelStart = Len(T_Prot) T_Prot.SetFocusElse T_PCIP = T_PCIP.Enabled = True Com_OK.Caption = 连接 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 = 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 Then MsgBox 文件打开错误,无法发送!, 4096 + 16, 提示Else MsgBox Err.Description, 4096 + 16, Err.NumberEnd IfEnd SubPrivate Sub Timer1_Timer()GetCursorPos MousePosIf Picture2.hwnd WindowFromPoint(MousePos.X, MousePos.Y) Then Picture2.Visible = False Timer1.Enabled = False Frame1.Enabled = True Frame2.Enabled = True Frame3.Enabled = TrueEnd IfEnd SubPrivate Sub Winsock1_Close()Winsock1.CloseCenterPrint Pic_Connect, 连接已被中断Frame1.Enabled = TrueLabel3 = 建立连接:尚未连接Label4 = 工作状态:尚未连接Com_Send.Caption = 发送文件Com_Send.Enabled = TrueFileSend = FalseSendFile.Value = 0SendFile.Text = 文件传输进度End SubPrivate Sub Winsock1_Connect()CenterPrint Pic_Connect, 已建立连接Frame1.Enabled = FalseT_PCIP = Winsock1.RemoteHostIPLabel3 = 建立连接: & TimeLabel4 = 工作状态:空闲End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)Winsock1.CloseWinsock1.Accept requestIDCenterPrint Pic_Connect, 已建立连接Frame1.Enabled = FalseLabel3 = 建立连接: & TimeLabel4 = 工作状态:空闲End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim ComByte As Long, Temp As Long, J As LongStatic DataByt() As ByteStatic FileByt() As ByteStatic Received As LongConst PACKSIZE = 8192 65536ReDim DataByt(bytesTotal)Winsock1.GetData DataByt, vbArray + vbByte-获取指令ComByte = Val(Left(UTF8_Decode(DataByt), 3) Select Case ComByte-文件请求发送接收或拒绝 Case Is = 101 filename = Mid(UTF8_Decode(DataByt), 4) If MsgBox(对方请求发送文件 & filename & 是否接收?, vbYesNo + 32 + 4096, 提示) = 6 Then Label4 = 工作状态:正在接收数据. Winsock1.SendData UTF8_Encode(201) 同意请求 FileSend = True Else Winsock1.SendData UTF8_Encode(202) 拒绝请求 End If-文件长度发送断点位置 Case Is = 102 On Error GoTo OpenErr: Dim N As Long Dim LName As String, RName As String FileLen = Val(Mid(UTF8_Decode(DataByt), 4) LName = Left(filename, InStrRev(filename, .) - 1) RName = Mid(filename, InStrRev(filename, .) Do While Dir(filename) N = N + 1 filename = LName & ( & N & ) & RName Loop Close #2 Open filename & .XFRJ For Binary Lock Read Write As #2 Winsock1.SendData UTF8_Encode(203) Winsock1.SendData UTF8_Encode(CStr(LOF(2) Received = LOF(2) T_File = 文件名: & filename & vbCrLf & vbCrLf & 文件长度: & FileLen Com_Send.Caption = 取消接收 SendFile.Text = 正在接收文件-对方接受请求发送文件长度 Case Is = 201 If FileSend Then SendFile.Text = 正在发送文件 Label4 = 工作状态:正在发送数据. Winsock1.SendData UTF8_Encode(102) Winsock1.SendData UTF8_Encode(FileLen) End If-对方拒绝请求初始化 Case Is = 202 MsgBox 对方拒绝接收文件 & filename & !, 4096 + 64, 提示 Com_Send.Caption = 发送文件 FileSend = False SendFile.Text = 文件传输进度-对方断点位置发送文件 Case Is = 203 If FileSend Then On 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) Then FileSend = False SendFile.Text = 文件传输进度 Label4 = 工作状态:空闲 Com_Send.Caption = 发送文件 MsgBox 发送完成!, 4096 + 64, 提示 End If On Error GoTo 0 End If-接收错误终止初始化 Case Is = 253 MsgBox 文件接收端错误,接收!, 4096 + 16, 错误 FileSend = False SendFile.Text = 文件传输进度 Label4 = 工作状态:空闲 Com_Send.Caption = 发送文件-发送错误终止初始化 Case Is = 254 MsgBox 文件发送端发生错误,发送终止!, 4096 + 16, 错误 FileSend = False SendFile.Text = 文件传输进度 Label4 = 工作状态:空闲 Com_Send.Caption = 发送文件-对方取消传输初始化 Case Is = 255 FileSend = Fa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师师德网络知识竞赛考试题库及答案
- 2025年初中美术学业水平检测试题(含答案)
- 2025年全国教师师德网络培训考试题库及答案
- 摄影留学培训课件
- 辽宁省营口市2024-2025学年七年级下学期期末语文试题(解析版)
- 摄影入门基础知识培训课件
- 纳米技术期末试题及答案
- 2025会议设备租赁合同样本
- 2025股权转让合同书文本
- 搭配培训课件
- 牛的品种-培训课件
- 未缴纳社保劳动仲裁申请书范本
- 油田安全生产管理培训课件
- 房屋市政工程生产安全重大事故隐患排查表(2024版)
- Nginx基础知识单选题100道及答案
- 临床技术操作规范与诊疗指南
- 私有云平台搭建项目实施方案
- DB43-T 3111-2024分布式光伏接入配电网技术导则改
- 《高速公路边坡光伏交通安全性评价方法》
- 电力生产典型事故案例汇编
- DB32-T 4174-2021 城市居住区和单位绿化标准
评论
0/150
提交评论