计算机网络课设.docx

上传人:b****0 文档编号:12457146 上传时间:2023-04-19 格式:DOCX 页数:51 大小:2.06MB
下载 相关 举报
计算机网络课设.docx_第1页
第1页 / 共51页
计算机网络课设.docx_第2页
第2页 / 共51页
计算机网络课设.docx_第3页
第3页 / 共51页
计算机网络课设.docx_第4页
第4页 / 共51页
计算机网络课设.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

计算机网络课设.docx

《计算机网络课设.docx》由会员分享,可在线阅读,更多相关《计算机网络课设.docx(51页珍藏版)》请在冰豆网上搜索。

计算机网络课设.docx

计算机网络课设

内蒙古科技大学

 

计算机网络课程设计报告

 

指导教师

学生姓名

学号

班级

 

内蒙古科技大学课程设计任务书

课程名称

计算机网络课程设计

设计题目

交换机工作原理模拟程序

指导教师

时间

2013/1/5

一、教学要求

必修内容,要求所

有学习《计算机网络》的同学参与,两个学分

掌握课程设计的目标和详细要求;

掌握实验环境的搭建和使用方法;

完成实际方案的设计

完成设计方案的环境搭建

二、设计资料及参数

Microsoftvisualc++,MFC

三、设计要求及成果

交换机工作原理模拟程序,通过该程序可实现交换机工

作的简单实现,主要是调用消息,利用MFC做界面

能够实现洪泛、地址学习、地址查找功能,

能够显示交换表内容

独立完成课程设计题目,并进行问题的分析与解决;

要求正确、完整地设计相关文档;

完成设计报告的书写与提交。

四、进度安排

资料查阅与讨论(2天)

案例分析(3天)

系统分析(2天)

方案制定(2天)

网络具体配置与测试(3天)

编写课程设计说明书和验收(2天)

五、评分标准

选题合理、目的明确(10分)

设计方案正确,具有可行性创新性(20分)

设计结果(20分)

态度认真、学习刻苦、遵守纪律(15分)

设计报告的规范化、参考文献充分(10分)

答辩(25分)总分(100分)

目录

1.设计背景1

2.需求分析2

3.系统功能3

4.开发环境4

5.开发背景4

6.软件设计框图6

6.1设计类图6

6.1.1工程类图6

6.1.2资源视图7

6.1.3文件视图8

6.2界面试图9

界面9

7.源程序14

7.1主界面源程序14

7.2头文件31

8.心得体会36

9.参考文献36

1.设计背景

在计算机网络互连的时代,网络交互所提供的便利为所有用户所体会,作为一个资源共享的平台而逐步已趋丰富。

交换机在今天的信息时代,已经成为一个很主流的工具,无论普通用户的日常交流与娱乐,还是工作中所必须的功能,都已经是如火如荼。

网络交换机除了能够连接同种类型的网络之外,还可以在不同类型的网络(如以太网和快速以太网)之间起到互连作用。

如今许多交换机都能够提供支持快速以太网或FDDI等的高速连接端口,用于连接网络中的其它交换机或者为带宽占用量大的关键服务器提供附加带宽。

一般来说,网络交换机的每个端口都用来连接一个独立的网段,但是有时为了提供更快的接入速度,我们可以把一些重要的网络计算机直接连接到交换机的端口上。

这样,网络的关键服务器和重要用户就拥有更快的接入速度,支持更大的信息流量。

在计算机网络系统中,交换概念的提出改进了共享工作模式。

而HUB集线器就是一种共享设备,HUB本身不能识别目的地址,当同一局域网内的A主机给B主机传输数据时,数据包在以,HUB为架构的网络上是以广播方式传输的,由每一台终端通过验证数据包头的地址信息来确定是否接收。

也就是说,在这种工作方式下,同一时刻网络上只能传输一组数据帧的通讯,如果发生碰撞还得重试。

这种方式就是共享共享宽带。

通俗的说,普通交换机是不带管理功能的,一根进线,其他接口接到电脑上就可以了。

因此,必须设计交换来连接网络,扩展网络的范围,连接多台PC机,基于这个目的,我设计了一个交换机工作原理的模拟程序,来实现交换机工作的基本原理。

 

2.需求分析

交换机工作有多个口,连接多台电脑,进行信息交换,通过每台PC机的MAC地址和相应的端口号来进行与其他电脑的连接,进行学习,泛洪等功能。

本系统于前者,使用MFC界面实现。

 

 

图2-1设计原理图

 

3.系统功能

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。

目前交换机还具备了一些新的功能,如对VLAN(虚拟局域网)的支持、对链路汇聚的支持,甚至有的还具有防火墙的功能。

  

学习:

以太网交换机了解每一端口相连设备的MAC地址,并将地址同相应的端口映射起来存放在交换机缓存中的MAC地址表中。

  

转发/过滤:

当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口(如该数据帧为广播/组播帧则转发至所有端口)。

 

 

消除回路:

当交换机包括一个冗余回路时,以太网交换机通过生成树协议避免回路的产生,同时允许存在后备路径。

  

交换机除了能够连接同种类型的网络之外,还可以在不同类型的网络(如以太网和快速以太网)之间起到互连作用。

如今许多交换机都能够提供支持快速以太网或FDDI等的高速连接端口,用于连接网络中的其它交换机或者为带宽占用量大的关键服务器提供附加带宽。

  一般来说,交换机的每个端口都用来连接一个独立的网段,但是有时为了提供更快的接入速度,我们可以把一些重要的网络计算机直接连接到交换机的端口上。

这样,网络的关键服务器和重要用户就拥有更快的接入速度,支持更大的信息流量。

客户端连接服务器,将服务器作为中转站,信息始终在客户端与服务器之间传送,若客户端请求与其他客户端通信,需要先将信息传到服务器再有服务器转发给客户端,采用TCP协议实现同信。

 

4.开发环境

Microsoftvisualc++6.0,MFC

5.开发背景

 MFC:

微软基础类(MicrosoftFoundationClasses),同VCL类似,是一种应用程序框架,随微软VisualC++开发工具发布。

目前最新版本为10.0(截止2011年3月),并且发布了中文版。

该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject直接或间接派生,只有少部分类例外。

  MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。

MFC提供了MFCAppWizard自动生成框架。

  Windows应用程序中,MFC的主包含文件为"Afxwin.h"。

  此外MFC的部分类为MFC/ATL通用,可以在Win32应用程序中单独包含并使用这些类。

  由于它的易用性,初学者常误认为VC++开发必须使用MFC,这种想法是错误的。

作为ApplicationFramework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32程序设计。

MFC实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。

VC++是Windows下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。

MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:

C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范;而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE(IDE的英文全称为“IntegratedDevelopmentEnvironment”,即“集成开发环境”。

),WSPlatForm,这跟Pascal和Delphi的关系一个道理。

Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系。

Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言)。

MFC同BC++集成的VCL一样是一个非外挂式的软件包类库,只不过MFC类是微软专配。

  MFC是WinAPI与C++的结合。

API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB、VC++、Java、Delhpi。

编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,这其实也是一种必要。

微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾。

上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C++&MFC编制软件时的大量内节,如应用程序实现消息的处理、设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。

  最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建、销毁),而是一些在Windows(用MFC编写的程序绝大部分都在Windows中运行)中实现内部处理的类,如数据库的管理类等。

学习中最应花费时间的是消息和设备环境,对C++和MF。

  MFC是微软封装了的API。

什么意思呢?

Windows作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的win32开发(直接使用Windows的接口函数API)对于程序员来说非常的困难,因为,API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。

MFC是面向对象程序设计与Applicationframework的完美结合,它将传统的API进行了分类封装,并且为你创建了程序的一般框架。

MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。

应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。

如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。

 

6.软件设计框图

6.1设计类图

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。

图2PC-A传送

点击MAC1表,显示记录信息(MAC地址和端口号),完成MAC地址学习。

图3MAC1表学习

在PC-A上输入目的MAC,点击传送,弹出对话框,内容为要传送的目的MAC。

图4PC-B传送

查看MAC表,此时MAC表学习,把PC-B的MAC地址和端口号加入MAC1表。

图5MAC1表学习

更改PC-A的目的MAC地址,传送显示。

图6PC-A传送

点击MAC1表,由于MAC表中记录了目的MAC地址,所以进行特定端口转发。

图7MAC1表转发

查看MAC1表,此时不再学习目的MAC地址。

图8MAC1表记录

填写PC-C的目的MAC,传送显示。

图9PC-C传送

查看PC-C传送结果。

图10PC-C传送成功

 

7.源程序

7.1主界面源程序

//kesheDlg.cpp:

implementationfile

//

#include"stdafx.h"

#include"keshe.h"

#include"kesheDlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CAboutDlgdialogusedforAppAbout

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//DialogData

//{{AFX_DATA(CAboutDlg)

enum{IDD=IDD_ABOUTBOX};

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//Nomessagehandlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CKesheDlgdialog

CKesheDlg:

:

CKesheDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CKesheDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CKesheDlg)

//NOTE:

theClassWizardwilladdmemberinitializationhere

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCKesheDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CKesheDlg)

//NOTE:

theClassWizardwilladdDDXandDDVcallshere

//}}AFX_DATA_MAP

}

BEGIN_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,OnIP3)

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_CHANGE(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,OnChangeEDITmacEE)

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_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CKesheDlgmessagehandlers

BOOLCKesheDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

//TODO:

Addextrainitializationhere

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCKesheDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

voidCKesheDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

}

else

{

//CDialog:

:

OnPaint();//要禁止这个调用

CPaintDCdc

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

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1