局域网通信工具.docx

上传人:b****7 文档编号:8968576 上传时间:2023-02-02 格式:DOCX 页数:33 大小:262.41KB
下载 相关 举报
局域网通信工具.docx_第1页
第1页 / 共33页
局域网通信工具.docx_第2页
第2页 / 共33页
局域网通信工具.docx_第3页
第3页 / 共33页
局域网通信工具.docx_第4页
第4页 / 共33页
局域网通信工具.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

局域网通信工具.docx

《局域网通信工具.docx》由会员分享,可在线阅读,更多相关《局域网通信工具.docx(33页珍藏版)》请在冰豆网上搜索。

局域网通信工具.docx

局域网通信工具

第一章引言

1.1课题背景及意义

即时聊天工具是一种可以让使用者在网络上实时通讯的工具,大部分的即时通讯工具提供了状态信息的特性,如显示联络人名单,联络人是否在线及能否与联络人交谈等。

目前在互联网上受欢迎的即时通讯软件包括XXQQ、MSNMessenger、Yahoo!

Messenger、AOLInstantMessenger、NETMessengerService、Jabber、ICQ等。

在本文中将讨论一种基于MFCSocket的局域网通信工具的设计与实现方法。

基于MFCSocket的局域网通信软件可以为局域网提供一种良好、安全、快速的通信机制,在局域网内部通信、教学、讨论等应用中都具有一定的实用价值,它同时很好地诠释了MFCSocket通信的原理。

基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。

1.2课题现状

基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟,比如较早的ICQ、MSNMessenger、YAHOO通等国外开发的产品,还有国产的有名的QQ、新浪UC、LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等,而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。

这些软件,在使用方面各有特色,在实现方面也各有所长,但由于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不可能得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP/IP协议的软件产品。

在局域网内,这些功能的实现跟广域网相比更加简单,因为局域网的网络结构本身比广域网要简单,但是可以借此理解网络协议,以及网络通信工具的实现原理,所以仍然极具研究价值。

1.3开发平台、开发技术的介绍

1.3.1WindowsSocket网络编程简介

WindowsSockets规范以U.C.Berkeley大学BSDUNIX中流行的Socket接口为范例定义了一套开放的、支持多种协议的、MicrosoftWindows下的网络编程接口,并不是一种网络协议。

它不仅包含了人们所熟悉的BerkeleySocket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。

WindowsSockets规范本意在于提供给应用程序开发者一套简单的API,使应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。

现在的WindowsSockets已经基本上实现了与协议无关,你可以使用WindowsSockets来调用多种协议的功能,但较常使用的是TCP/IP协议。

Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。

应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。

微软为VC定义了WindowsSockets类如CAsyncSocket类和派生于CAsyncSocket的CSocket类,它们简单易用。

1.3.2VC++6.0简介

我们通常所说的VisualC++实际上是一个完善的、非常强大的C++程序开发环境,它的名字是MicrosoftDeveloperStudio。

二者之间的细小差别并不重要,通常这两个术语可以互换。

但如果你不围绕DeveloperStudio来进行学习,就不能有效地使用VisualC++(DeveloperStudio听起来很像VisualStudio,但它们之间没有关系)。

它包含:

C++编译器、调试器、应用程序框架生成器、项目管理器、设计和实现菜单等资源的编辑器等等

第二章需求分析及可行性研究

2.1需求分析

2.1.1功能需求分析

(1)用户端之间的信息发送,本程序需要实现的最基本的功能。

用户在界面上选择需要对话的IP,并将自己需要发送的信息填入相应的对话框中,点击发送按钮后,可以将信息正常的发送给相应的其它用户,这个过程中的客户端与客户端之间使用点对点发送信息,预计利用TCP/IP协议中的UDP协议,在本程序中共需要3个端口,此功能预计使用3号端口。

(2)在线用户主机IP列表的维护。

在用户发送信息之前,需要选择相应的目的地端IP,这也就需要客户端拥有在线用户主机的IP地址,这个在线主机列表的维护是需要客户端定时自动向服务器端发送信息,服务器端收集并维护在线用户列表,再发送回客户端。

需要在客户端和服务器端都使用定时器来完成此功能。

此功能预计使用1、2号端口。

(3)在C/S模式中,服务器与客户端是相互依赖的。

在客户端启用以后,需要查看服务器端是否在线,服务器在线才能正常使用客户端,如果服务器不在线,则在检测一定次数以后自动退出客户端程序。

在使用过程中,客户端在指定时间内未向服务器端发送信息的,服务器认为客户端下线;客户端在一定时间内未收到服务器端信息的,认为服务器已经下线,则提示用户并建议退出,在用户一定时间后没有退出的则自动关闭客户端程序。

2.1.2数据需求分析

(1)客户端之间聊天信息。

在控件上显示时格式化,更易于用户的查看自己发送或接收到的信息。

(2)在线用户列表信息。

服务器端存放在适当的空间中,在发送给客户端时,对信息列表进行格式化,便于客户端提取信息。

(3)客户端向服务器端发送的确认在线信息。

包括客户端刚刚启动时的初始化信息和在使用过程中的确认在线信息。

(4)其它程序内部可能需要设计的数据结构体。

2.1.3性能需求分析

(1)可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失败、服务器不在线等,可以提示用户安全退出本程序,在出现不可知的错误以后,可以尽量安全的退出程序。

在程序的设计过程中,要求能尽可能多的设想到用户使用过程中可能发生的事件,并能在判断事件后做出相应的处理,使程序具有较高的容错性能。

(2)宜操作性,程序简单易懂,容易上手使用。

设计界面是,简化界面的复杂性,模拟QQ等现有即时通讯工具的界面,使用户能很容易看懂并使用。

(3)开发文档易理解,保证以后自己二次开发或他人接手开发时,能够清晰的理解整个系统的设计思路和实现细节。

(4)模块化设计此软件的功能,不同的模块实现不同的功能,使得软件易于以后的维护与扩展,在以后可以更好的完善本软件的功能,更方便于在工作中的应用。

2.1.4运行需求分析

(1)用户界面

程序较小,启动速度快,无启动界面。

在本地局域网中使用,所以无需进行用户登录,无需认证界面,启动后的应用界面要清爽,设计要简单明了,要具有较高的易用性。

(2)故障处理

在遇到可预知的故障与情况时,能提示用户并自动退出;在遇到不可预知的故障时能安全退出。

2.2可行性研究

2.2.1成本可行性

学习研究性开发,暂不考虑成本。

2.2.2技术可行性

已有搭建好的基于Windows的软硬件平台,本人对VC开发环境有一定的了解,需继续深入学习VC和Windowssocket编程。

第三章相关开发技术的原理性说明

3.1Win32编程(即SDK程序设计原理)

所谓的Win32开发,就是在C语言的层面上,直接使用Win32API(ApplicationProgrammingInterface:

系统开放出来,给程序员使用的接口。

)开发Windows应用程序或者系统程序。

虽然现在直接用Win32API开发应用程序的人已经不多了,但是深入理解Windows系统程序设计原理,仍然是成为Windows开发高手的良好途径。

所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是相对应的。

下面是进行直接的WIN32SDK方式编程的基本思路或者说是一个框架。

一个WINDOWS程序分为程序代码和UI(UserInterface用户接口)资源两大部分,两部分最后以RC编译程序编译为一个完整的EXE文件。

所谓UI资源是指功能菜单、对话框外貌、程序图标、光标形状等等。

这些UI资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico.bmp.cur等等。

程序员必须在一个所谓的资源描述档(.rc)中描述它们。

RC编译器(RC.EXE)读取RC文件的描述后将所有UI资源文件集中制作出一个.RES文件,再与程序代码结合在一起,这才是一个完整的Windows可执行文件。

如下图所示:

(附件—图1)

Windows程序将会调用许多的函数,来实现其一定的功能,这些函数可分为CRuntimes以及WindowsAPI两大部分,而API由操作系统本身来提供,包括GDI32.LIB、USER32.LIB、KERNEL32.LIB、COMDLG32.LIB、TH32.LIB等等,前三个为Windows的三大模块所对应的import函数库。

“以消息为基础,以事件为驱动。

”Windows程序依靠外部发生的事件来驱动,也就是说:

程序不断的等待消息,外部事件以消息的形式进入系统后放入相应的队列,然后程序调用GetmessageAPI取得相应的消息并做出相应的处理。

窗口是用来接受并处理消息的,每个窗口都对应一个函数来处理消息,程序员必须设计这个窗口函数(windowsprocedure)。

如下图所示,Windows程序与OS之间的关系是:

(附件—图2)

一、WinMain函数

main()函数是C程序的进入点,而WinMain函数是Windows程序的进入点,

二、MSG结构体

定义了一个MSG结构体,是Windows内设的一种数据格式:

三、注册窗口

RegisterClass()完成注册窗口类的功能,设定窗口的属性:

边框、颜色、标题、位置等等。

四、创建窗口

CreateWindow函数可以用于创建父窗口、弹出窗口以及子窗口,在创建窗口时它可以确定窗口类、窗口标题、窗口风格、大小以及初始化位置。

五、显示窗口

创建窗口后需要使用ShowWindow用于显示窗口。

六、刷新窗口

调用UpdateWindow函数来刷新窗口。

七、消息循环

初始化工作完成后,WinMain进入所谓的消息循环,使用while循环,不断的GetMessage,再使用TranslateMessage将消息转化,用DispatchMessage将消息传递给窗口函数去处理。

八、获取消息

GetMessage功能函数从消息队列中获取消息,如果消息队列中没有消息,此功能函数则会一直等得消息。

九、转换消息

将特定的消息转换为不同的消息,例如消息队列中同时有WM_KEYDOWN和WM_KEYUP消息时,意味着用户同时按下了键盘上的某几个键,此时TranslateMessage将其转换为一个WM_CHAR消息。

十、将消息发送到回调函数

DispatchMessage通过USER模块的协助将消息送到该窗口的窗口函数去了,但是DispatchMessage并没有指定函数名,却可以将消息传送过去,这是因为消息发生的时候,OS已经根据当时状态,为它标明了所属窗口,而窗口所属的窗口类亦是明确的。

十一、WinMain函数返回值

returnmsg.wParam;//返回结构体变量msg中的wParam的值。

十二、WindowProc窗口函数

窗口中的生命枢纽:

窗口函数WindowProc。

WindowProc是一个callback函数,常利用switch/case方式判断消息的种类,以决定处理方式。

3.2MFC(MicrosoftFoundationClass)

3.2.1简介

MFC是在1992年随微软的MicrosoftC/C++7.0编译器发布的,是建立在WindowsAPI之上的C++类库(C++ClassLibrary),意图是使Windows程序设计过程更有效率,更符合面向对象的精神。

现在MFC已经成为了Windows环境上标准的C++API。

MFC使得开发Windows应用程序变得简单容易,将很多应用程序开发中常用的功能自动化,并且提供了文档框架视图结构和活动文档这样的便于自定义的应用程序框架。

同时,在VisualC++内部也内建了很多对MFC的非常实用的东西,例如类向导这样的支持,减少软件开发的时间,使用类向导可以生成从helloworld这样的简单程序到活动文档服务器这样的复杂程序。

MFC的消息映射机制也避免了使用性能较低的庞大虚函数表。

MFC在整个Windows家族中都是兼容的。

3.2.2MFC与C语言API的关系

设置Microsoft基本类库与其它Windows类库所不同的唯一特征就是它与C语言编写的WindowsAPI的紧密的映射关系。

而且,可以将直接调用WindowsAPI与调用类库自由地混合起来使用。

这种直接访问并不意味着类可以完全取代API。

开发者有时必须直接调用一些Windows函数,例如,SetCursor和GetSystemMetrics。

只有在有明显优势时,一个Windows函数才被一个类成员函数所替代。

3.2.3MFC类库

MFC类库是一个很大的、扩展了的C++类层次结构,与传统上使用C语言直接访问WindowsAPI相反,MFC已经包含和压缩了所有标准的“样板文件”代码,这些代码是所有用C编写的Windows程序所必需的,因此用MFC编写的程序要比用C语言编写的程序小得多,当然MFC所编写的程序的性能也毫无损失。

必要时,也可以MFC可以用面向对象的方法来调用WindowsAPI,因为MFC不修改也不隐藏Windows程序的基本结构。

MFC是很庞大的。

例如,版本4.0中包含了大约200个不同的类。

事实上,你可能只需要使用其中的十多个不同的类,就可以建立一个非常漂亮的程序。

MFC层次结构大约可分为几种不同的类型的类:

(1)根类:

Cobject

Microsoft基本类库中的大多数类都是由在类层次表中根上的唯一的一个基类派生而来的。

(2)MFC应用结构类

MFC应用构造类有助于一个框架应用的构造。

它们对大多数应用提供了通用功能。

可以在框架中填写对于应用特定的功能。

(3)窗口、对话和控件类

类CWnd和它的派生类封装了HWND,它是一个Windows窗口。

CWnd可被自己使用,也可以作为派生新类的基类。

类库提供的派生类表示各种窗口。

CWnd是所有窗口的基类。

可以使用CWnd派生出来的一个类,也可以从其中派生出自己的类。

(4)绘画和打印类

在Windows中,所有的图形输出都是在一个可视的绘图区上。

这叫作一个设备上下文(或DC)。

MFC提供了封装不同DC类型的类,也提供了对Windows绘图工具,例如位图、刷子、调色板和笔的封装。

(5)文件和数据库类

这些类允许将信息存储在一个数据库或一个磁盘文件中。

有两个数据库类的集合──DAO和ODBC──它们提供了相似的功能。

(6)Internet和网络类

这些类允许和其它使用ISAPI的计算机或一个WindowsSocket交换信息。

还有创建ISAPI扩展DLL的类的集合和操作Windows套接字的类的集合。

支持连接的类的分类:

ISAPI类、Windows套接字类、Win32Internet类。

(7)其它还有简单的数据类型类、OLE类、调试和异常类、数组列表和映射类。

3.3TCP/IP协议及WINDOWSSOCKETS网络编程接口

3.3.1TCP/IP协议简介

(1)TCP/IP协议

通常包含了一系列与“TCP(传输控制协议)”和“IP(网际协议)”有联系的网络协议,它包括其它的协议,应用软件,甚至网络媒介。

这些协议的示例是:

UDP(UserDatagramProtocol)协议、ICMP(InternetControlMessageProtocol)协议、ARP(地址解析协议)和其他一些协议的协议组。

应用的示例:

telnet(远程登录)、ftp(文件传递协议)、http等。

这其中一些协议最早发源于美国国防部的ARPA网项目。

(2)逻辑结构:

(附件—图3)

这是TCP/IP协议的分层结构在互连网计算机上的表示,用互连网技术互相通信的每台计算机都有这样的分层结构。

这样的分层结构决定了计算机在internet上互相通信的方式。

数据通过这样的分层结构从上层传到底层,然后通过网线把数据传送出去。

底层的水平线代表以太网网线,“O”代表收发器,“*”代表IP地址,“@”代表网址,理解这样的分层结构是理解INTERNET技术的基础。

(3)本论文涉及到的协议:

IP、UDP

IP(InternetProtocol)是TCP/IP的心脏,也是网络层中最重要的协议。

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。

IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。

IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

UDP(IP协议号17)是一个无连结的数据报协议。

它是一个“besteffort”或者“不可靠”协议——不是因为它特别不可靠,而是因为它不检查数据包是否已经到达目的地,并且不保证它们按顺序到达。

UDP的典型性应用是如流媒体(音频和视频等)这样按时到达比可靠性更重要的应用,或者如DNS查找这样的简单查询/响应应用,如果需要建立可靠的连结,哪么所作的额外工作将是不成比例地大。

本程序只应用于局域网中,局域网中的数据流传输的可靠性高,故选择UDP协议。

3.3.2WINDOWSSOCKETS网络编程接口概述

(1)WINDOWSSOCKETS简介

WindowsSockets:

用于MicrosoftWindows环境下的网络计算的开放接口。

WindowsSockets规范为Microsoft定义了一个二进制兼容网络编程接口,基于BerkeleySoftwareDistribution中的UNIX套接字实现,通过使用WindowsSockets,应用程序能够在任何符合WindowsSocketsAPI的网络上通信。

许多网络软件供应商支持网络协议下的WindowsSockets,这些协议包括:

传输控制协议/网际协议(TCP/IP)和NovellCorporation的互联网包交换协议/顺序分组报文交换协议(IPX/SPX)等。

虽然目前的WindowsSockets规范定义了TCP/IP的套接字抽象化,但任何网络协议都可以通过提供自己版本的、实现WindowsSockets的动态链接库(DLL)来满足WindowsSockets。

因为套接字使用网际协议组,所以它们对于支持“信息高速公路”上Internet通信的应用程序是首选方式。

套接字是一个通信终结点,它是WindowsSockets应用程序用来在网络上发送或接收数据包的对象。

套接字具有类型,与正在运行的进程相关联,并且可以有名称。

目前,套接字一般只与使用网际协议组的同一“通信域”中的其他套接字交换数据。

可用的套接字类型有以下两种:

流式套接字,提供没有记录边界的数据流,即字节流;数据文报套接字,支持面向记录的数据流,但不能确保能被送达,也无法确保按照发送顺序或不重复,可靠性在局域网(LAN)上往往很好,但在广域网(WAN)上却不太好。

数据文报为“无连接”的,也就是不建立显式连接。

可将数据文报消息发送到指定的套接字,然后从指定的套接字接收消息。

(2)相关MFC类

MFC为使用WindowsSockets编写网络通信程序提供了两种模型,内嵌在两个MFC类中。

CAsyncSocket

该类封装WindowsSocketsAPI。

CAsyncSocket是为那些了解网络编程并希望能够灵活地对套接字API直接编程,同时还希望方便地使用回调函数以进行网络事件通知的程序员提供的。

除了将套接字打包为面向对象的形式以用于C++外,此类提供的唯一附加抽象化是将某些与套接字相关的Windows消息转换为回调。

CSocket

从CAsyncSocket派生出的高水平抽象概念,它通过MFCCArchive对象提供与套接字一起使用的更高级的抽象化。

使用带存档的套接字与使用MFC的文件序列化协议非常相似。

这使它比CAsyncSocket模型更易于使用。

它是同步运行的。

(3)WinSocket编程一般流程(基于UDP)

本程序选择使用CSocket类,基于UDP的编程。

对于在一个无连接套接字上接收数据的进程来说,步骤并不复杂。

先用WSAStartup来加载WinscockDLL相应版本,然后用socket或WSASocket建立套接字。

再把这个套接字和准备接收数据的接口绑定在一起。

这是通过bind函数来完成的。

最后在使用完WinscockDLL需要调用WSACleanup,将资源释放。

和面向连接会话不同的是,我们不必调用listen和accept。

①Winsock的初始化

每个Winsock应用都必须加载WinsockDLL的相应版本。

如果调用Winsock之前,没有加载Winsock库,这个函数就会返回一个SOCKET_ERR,错误信息是WSANOTINITIALISED。

加载Winsock库是通过调用WSAStartup函数实现的。

这个函数的定义如下:

intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);

②创建套接字

SOCKETsocket(intaf,inttype,intprotocol);

③把套接字和准备接收数据的地址、接口绑定在一起

intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);

④发送数据

intsendto(

SOCKETs,//一个可用的SOCKET

constcharFAR*buf,//需要传输的数据

intlen,//传输数据的长度

intflags,//标记

conststructsockaddrFAR*to,//指向存有目的ip和端口的结构体

inttolen//目的地址的长度

);

⑤接收数据

intrecvfrom(SOCKETs,charFAR*buf,intlen,intflags,structsockaddrFAR*from,intFAR*fromlen);

⑥事例:

详见附录

3.4多线程技术

3.4.1进程及线程概述

进程和线程都是操作系统的概念。

每个进程是由一个或多个线程、私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进

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

当前位置:首页 > 考试认证 > 财会金融考试

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

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