1、计算机网络课设 内蒙古科技大学 计算机网络课程设计报告 指导教师 学生姓名 学 号 班 级 内蒙古科技大学课程设计任务书课程名称计算机网络课程设计设计题目 交换机工作原理模拟程序指导教师时 间2013/1/5一、教学要求必修内容,要求所有学习计算机网络的同学参与,两个学分掌握课程设计的目标和详细要求;掌握实验环境的搭建和使用方法;完成实际方案的设计完成设计方案的环境搭建二、设计资料及参数Microsoft visual c+,MFC三、设计要求及成果交换机工作原理模拟程序 ,通过该程序可实现交换机工作的简单实现 ,主要是 调用消息,利用MFC做界面能够实现洪泛、地址学习、地址查找功能,能够显示
2、交换表内容独立完成课程设计题目,并进行问题的分析与解决;要求正确、完整地设计相关文档;完成设计报告的书写与提交。四、进度安排资料查阅与讨论(2天)案例分析(3天)系统分析(2天)方案制定(2天)网络具体配置与测试(3天)编写课程设计说明书和验收(2天)五、评分标准选题合理、目的明确(10分)设计方案正确,具有可行性创新性(20分)设计结果(20分)态度认真、学习刻苦、遵守纪律(15分)设计报告的规范化、参考文献充分(10分)答辩(25分)总分(100分)目录1.设计背景 12.需求分析 23. 系统功能 34.开发环境 45.开发背景 46.软件设计框图 66.1设计类图 66.1.1工程类图
3、 66.1.2资源视图 76.1.3文件视图 86.2界面试图 9界面 97源程序 147.1主界面源程序 147.2头文件 318.心得体会 369.参考文献 36 1.设计背景在计算机网络互连的时代,网络交互所提供的便利为所有用户所体会,作为一个资源共享的平台而逐步已趋丰富。 交换机在今天的信息时代,已经成为一个很主流的工具,无论普通用户的日常交流与娱乐,还是工作中所必须的功能,都已经是如火如荼。网络交换机除了能够连接同种类型的网络之外,还可以在不同类型的网络(如以太网和快速以太网)之间起到互连作用。如今许多交换机都能够提供支持快速以太网或FDDI等的高速连接端口,用于连接网络中的其它交换
4、机或者为带宽占用量大的关键服务器提供附加带宽。 一般来说,网络交换机的每个端口都用来连接一个独立的网段,但是有时为了提供更快的接入速度,我们可以把一些重要的网络计算机直接连接到交换机的端口上。这样,网络的关键服务器和重要用户就拥有更快的接入速度,支持更大的信息流量。在计算机网络系统中,交换概念的提出改进了共享工作模式。而HUB集线器就是一种共享设备,HUB本身不能识别目的地址,当同一局域网内的A主机给B主机传输数据时,数据包在以,HUB为架构的网络上是以广播方式传输的,由每一台终端通过验证数据包头的地址信息来确定是否接收。也就是说,在这种工作方式下,同一时刻网络上只能传输一组数据帧的通讯,如果
5、发生碰撞还得重试。这种方式就是共享共享宽带。通俗的说,普通交换机是不带管理功能的,一根进线,其他接口接到电脑上就可以了。因此,必须设计交换来连接网络,扩展网络的范围,连接多台PC机,基于这个目的,我设计了一个交换机工作原理的模拟程序,来实现交换机工作的基本原理。2.需求分析交换机工作有多个口,连接多台电脑,进行信息交换,通过每台PC机的MAC地址和相应的端口号来进行与其他电脑的连接,进行学习,泛洪等功能。本系统于前者,使用MFC界面实现。图2-1 设计原理图3.系统功能 交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。目前交换机还具备了一些新的功能,如对VLAN(虚拟局域
6、网)的支持、对链路汇聚的支持,甚至有的还具有防火墙的功能。 学习:以太网交换机了解每一端口相连设备的MAC地址,并将地址同相应的端口映射起来存放在交换机缓存中的MAC地址表中。 转发/过滤:当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口(如该数据帧为广播/组播帧则转发至所有端口)。 消除回路:当交换机包括一个冗余回路时,以太网交换机通过生成树协议避免回路的产生,同时允许存在后备路径。 交换机除了能够连接同种类型的网络之外,还可以在不同类型的网络(如以太网和快速以太网)之间起到互连作用。如今许多交换机都能够提供支持快速以太网或FDDI等的高速连接端口,
7、用于连接网络中的其它交换机或者为带宽占用量大的关键服务器提供附加带宽。 一般来说,交换机的每个端口都用来连接一个独立的网段,但是有时为了提供更快的接入速度,我们可以把一些重要的网络计算机直接连接到交换机的端口上。这样,网络的关键服务器和重要用户就拥有更快的接入速度,支持更大的信息流量。 客户端连接服务器,将服务器作为中转站,信息始终在客户端与服务器之间传送,若客户端请求与其他客户端通信,需要先将信息传到服务器再有服务器转发给客户端,采用TCP协议实现同信。4.开发环境Microsoft visual c+ 6.0 ,MFC5.开发背景MFC:微软基础类(Microsoft Foundation
8、 Classes),同VCL类似,是一种应用程序框架,随微软Visual C+ 开发工具发布。目前最新版本为10.0(截止2011年3月),并且发布了中文版。该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject 直接或间接派生,只有少部分类例外。 MFC 应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。 Windows 应用程序中,MFC 的主包含文件为Afxwin.h。 此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。
9、 由于它的易用性,初学者常误认为VC+开发必须使用MFC,这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。 MFC实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎。VC+是Windows下开发人员使用的专业C+ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。MFC作为与VC+血肉相连的部分(注意C+和VC+的区别:C+是一种程序设计语言,是一种大家都承认的软件编制的通用规范;而
10、VC+只是一个编译器,或者说是一种编译器+源程序编辑器的IDE( IDE的英文全称为“Integrated Development Environment”,即“集成开发环境”。 ),WSPlatForm,这跟Pascal和Delphi的关系一个道理。Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系。Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言)。MF
11、C同BC+集成的VCL一样是一个非外挂式的软件包类库,只不过MFC类是微软专配。MFC是Win API与C+的结合。API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB、VC+、Java、Delhpi。编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部
12、实现,这其实也是一种必要。微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾。上面说到MFC是微软对API函数的专用C+封装,这种结合一方面让用户使用微软的专业C+ SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C+ & MFC编制软件时的大量内节,如应用程序实现消息的处理、设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。 最后要明白MFC不只是
13、一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建、销毁),而是一些在Windows(用MFC编写的程序绝大部分都在Windows中运行)中实现内部处理的类,如数据库的管理类等。学习中最应花费时间的是消息和设备环境,对C+和MF。 MFC是微软封装了的API。什么意思呢?Windows作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的win32开发(直接使用Windows的接口函数API)对于程序员来说非常的困难,因为,API函数实在
14、太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。MFC是面向对象程序设计与Application framework的完美结合,它将传统的API进行了分类封装,并且为你创建了程序的一般框架。 MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。6.软件设计框图6.1设计类
15、图6.1.1工程类图 图6.1.1-1 工程视图6.1.2资源视图 图6.1.2-1 资源视图6.1.3文件视图 图6.1.3-2 文件视图6.2界面试图界面 图1 主界面输入各PC机IP、源MAC,并在PC-A上输入目的MAC,点击传送,弹出对话框,内容为要传送的目的MAC。 图2 PC-A传送点击MAC1表,显示记录信息(MAC地址和端口号),完成MAC地址学习。 图3 MAC1表学习在PC-A上输入目的MAC,点击传送,弹出对话框,内容为要传送的目的MAC。 图4 PC-B传送查看MAC表,此时MAC表学习,把PC-B的MAC地址和端口号加入MAC1表。 图5 MAC1表学习更改PC-A
16、的目的MAC地址,传送显示。 图6 PC-A传送点击MAC1表,由于MAC表中记录了目的MAC地址,所以进行特定端口转发。 图7 MAC1表转发查看MAC1表,此时不再学习目的MAC地址。图8 MAC1表记录填写PC-C的目的MAC,传送显示。 图9 PC-C传送查看PC-C传送结果。 图10 PC-C传送成功7源程序7.1主界面源程序/ kesheDlg.cpp : implementation file/#include stdafx.h#include keshe.h#include kesheDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef T
17、HIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic: CAboutDlg();/ Dialog Data /AFX_DATA(CAboutDlg) enum IDD = IDD_ABOUTBOX ; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAboutDlg) protected: virtual v
18、oid DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implementationprotected: /AFX_MSG(CAboutDlg) /AFX_MSG DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD) /AFX_DATA_INIT(CAboutDlg) /AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataE
19、xchange(pDX); /AFX_DATA_MAP(CAboutDlg) /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog) /AFX_MSG_MAP(CAboutDlg) / No message handlers /AFX_MSG_MAPEND_MESSAGE_MAP()/ CKesheDlg dialogCKesheDlg:CKesheDlg(CWnd* pParent /*=NULL*/) : CDialog(CKesheDlg:IDD, pParent) /AFX_DATA_INIT(CKesheDlg) / NOTE: the
20、ClassWizard will add member initialization here /AFX_DATA_INIT / Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CKesheDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CKesheDlg) / NOTE: the Cla
21、ssWizard will add DDX and DDV calls here /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CKesheDlg, CDialog) /AFX_MSG_MAP(CKesheDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_NOTIFY(IPN_FIELDCHANGED, IDC_IP1, OnIP1) ON_NOTIFY(IPN_FIELDCHANGED, IDC_IP2, OnIP2) ON_NOTIFY(IPN_FIELDCHANGED, IDC_IP3, OnIP
22、3) ON_NOTIFY(IPN_FIELDCHANGED, IDC_IP4, OnIP4) ON_NOTIFY(IPN_FIELDCHANGED, IDC_IP5, OnIP5) ON_BN_CLICKED(IDC_mac1, Onmac1) ON_BN_CLICKED(IDC_mac2, Onmac2) ON_EN_CHANGE(IDC_EDITmacA, OnChangeEDITmacA) ON_EN_CHANGE(IDC_EDITmacB, OnChangeEDITmacB) ON_EN_CHANGE(IDC_EDITmacC, OnChangeEDITmacC) ON_EN_CHAN
23、GE(IDC_EDITmacD, OnChangeEDITmacD) ON_EN_CHANGE(IDC_EDITmacE, OnChangeEDITmacE) ON_EN_CHANGE(IDC_EDITmacAA, OnChangeEDITmacAA) ON_EN_CHANGE(IDC_EDITmacBB, OnChangeEDITmacBB) ON_EN_CHANGE(IDC_EDITmacCC, OnChangeEDITmacCC) ON_EN_CHANGE(IDC_EDITmacDD, OnChangeEDITmacDD) ON_EN_CHANGE(IDC_EDITmacEE, OnCh
24、angeEDITmacEE) ON_BN_CLICKED(IDC_chuansongA, OnchuansongA) ON_BN_CLICKED(IDC_chuansongB, OnchuansongB) ON_BN_CLICKED(IDC_chuansongC, OnchuansongC) ON_BN_CLICKED(IDC_chuansongD, OnchuansongD) ON_BN_CLICKED(IDC_chuansongE, OnchuansongE) ON_BN_CLICKED(IDC_banben, Onbanben) /AFX_MSG_MAPEND_MESSAGE_MAP()
25、/ CKesheDlg message handlersBOOL CKesheDlg:OnInitDialog() CDialog:OnInitDialog(); / Add About. menu item to system menu. / IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM
26、_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon / TODO: Add extra initialization here return TRUE; / return TRUE unless
27、 you set the focus to a controlvoid CKesheDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); / If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC
28、 applications using the document/view model,/ this is automatically done for you by the framework.void CKesheDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); else /CDialog:OnPaint();/要禁止这个调用 CPaintDC dc
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1