优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc

上传人:西安人 文档编号:3261023 上传时间:2019-08-06 格式:DOC 页数:100 大小:4.82MB
返回 下载 相关 举报
优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc_第1页
第1页 / 共100页
优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc_第2页
第2页 / 共100页
优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc_第3页
第3页 / 共100页
优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc_第4页
第4页 / 共100页
优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc_第5页
第5页 / 共100页
点击查看更多>>
资源描述

《优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc》由会员分享,可在线阅读,更多相关《优秀毕业设计精品]基于局域网的聊天软件的设计与实现.doc(100页珍藏版)》请在三一文库上搜索。

1、 基于局域网的聊天软件的设计与实现 编号 毕 业 设 计(论文)题目 基于局域网的聊天工具 的设计与实现 二级学院 专 业 班 级 学生姓名 学号 指导教师 职称 时 间 目 录摘 要IAbstractII1引 言11.1开发背景11.2课题研究的意义22 系统概述22.1国内外发展现状22.2系统实现技术32.2.1 MFC窗口控件重绘32.2.2 Winsock编程52.2.3基于UDP的文件传输62.2.4多线程编程72.2.5扩展功能广域网聊天83系统分析93.1需求分析93.2可行性分析103.2.1技术可行性103.2.2操作可行性103.2.3经济可行性103.2.4进度可行性1

2、13.3系统业务流程分析113.3.1会员处理业务流程图113.4系统数据流程分析123.4.1顶层数据流程图123.4.2第一层数据流程图123.4.3第二层数据流程图123.5系统数据模型163.5.1系统E-R图163.5.2 CDM图183.5.3 PDM图194系统详细设计204.1系统功能设计204.1.1主要功能模块204.1.2主要功能描述214.2重要模块的具体实现234.2.1网络通信的实现234.2.2登陆验证模块294.2.3添加好友和加入群模块314.2.4基于UDP的文件传输模块324.2.5群聊天模块364.2.6网络通信安全模块374.3数据设计374.3.1数

3、据库设计374.3.2数据结构394.4用户界面设计444.4.1 用户界面设计原则444.4.2 登陆会员界面484.4.3 登陆验证界面484.4.4 已登陆界面494.4.5 修改个人资料界面504.4.6 查找好友/群的界面514.4.7 好友聊天界面524.4.8 群聊天界面534.4.9 好友信息界面544.4.10 简洁模式界面554.5代码设计565系统实施675.1系统实施675.1.1软件开发工具的选择675.1.2开发平台675.1.3模式选择675.1.4程序设计与调试675.2系统测试685.3系统维护686总 结69致 谢70参考文献71文献综述72摘 要如今网络的

4、飞速发展,网络世界这一概念早已不再陌生,正是因为即时通讯软件的诞生,网络世界才蓬勃发展。即时通讯软件给人们提供了一个交流的平台,这种平台逐渐衍生发展成为一种特殊的社区,但是脱离这样的社区就会影响到人们的正常生活,工作和学习。随着通信,网络的整合,即时通讯软件将进一步发展成为新一代的通讯软件,有着巨大的发展前景。iMessaging局域网聊天软件正是介于这样的发展背景之下开发而成,后续将探索更为便捷,更多元化的聊天模式,随着后期的逐步完善,将会提高人们学习,办公,交流的效率,提供更为直观的聊天方式,开创聊天软件的新局面。关键词:聊天软件,即时通讯 AbstractToday, with the

5、rapid development of the network, the network concept is no longer new to the world. Because of the birth of instant messaging software, precisely, the online world was booming. Instant messaging software to provide people with a communication platform that gradually developed into a special kind of

6、 derivative of community, but from such a community will affect peoples normal life, work and study and so on. As communications, network integration, instant messaging software will be further developed into a new generation of communications software, has great prospects for development. iMessagin

7、g between LAN chat software is developed under the background that made the development of follow-up to explore more convenient, more diversified chat mode, with the gradual improvement of late, will increase people to study, office, communication efficiency provide a more intuitive way to chat, and

8、 chat software must be arrive at a new situation.Key words: instant messaging1引 言聊天工具的出现,促进了网络社会的形成,人们的生活世界也逐渐的划分为真实世界和虚拟世界。这里的虚拟世界就是指以网络为载体的生活,人们通常并不需要知道对方是谁,也不需要了解网络上的资源是谁提供的,便可以遨游于这个虚拟的世界,寻找属于自己的天空。虚拟世界从某种程度上促进了社会各个方面的发展,无论从经济上,文化上,教育上都有着举足轻重的地位。而作为网络社会的交通工具之一聊天工具扮演着极为重要的角色,它促进了人们思想交流,加快了信息流通的速度,

9、使这个信息化的世界高速的运转着。在社会方面,聊天工具提供了一个交流的平台,就好比一个虚拟的社会,广大的使用者可以通过这个社会里畅所欲言,以特殊的方式营造出了一种社会属性。在教育方面,聊天工具带给我们新式的教学体验,使在线文字,语音,视频教学成为了可能,更重要的是,人们可以分享彼此的思想和经验,促进精神和教育文化的发展。在工作方面,人们利用聊天室和聊天群招开工作会议,利用聊天工具的文件服务实现文件共享和文件传输,提高了工作的效率。综观聊天工具的发展史,从单一的一对一聊天,到多对多的互动式聊天,聊天工具正在进行了一场人类思想交流观的革命。目前的主流聊天工具更是将工作、娱乐、购物整合在了一起,逐渐发

10、展成了综合化的聊天软件。人们对聊天工具的开发与研究将不会懈怠,反而会更深入的探索其意义。在我看来,由于互联网的飞速发展,其必定会整合通信行业,而聊天工具将会取代电话,成为最流行普及的交流工具。1.1开发背景1970年早期,一种更早的即时通讯形式是柏拉图系统(PLATO system)。在这之后在1980年,UNIX/Linux的交谈即时通讯被广泛的使用于工程师与学术界,1990年即时通讯更跨越了网际网路交流。1996年11月,ICQ是首个广泛被非UNIX/Linux使用者用于网路的即时通讯软体。在ICQ的介绍之后,同时在许多地方有一定数量的即时通讯方式发展,且各式的即时通讯程式有独立的协定,无

11、法彼此互通。这引导着使用者同时执行两个以上的即时通讯软体,或者他们可以使用支援多协定的终端软体,如Gaim、Trillian或Jabber。 在中国,QQ是目前最主流的聊天软件,具有庞大的用户群体,功能具有多样化。1.2课题研究的意义研究该课题,具有重大意义,这对于今后研究网络与通信融合具有指导作用。虽然目前的聊天软件已经具备强大多种的功能,并且支持广域网的聊天,但是他们仍然存在各种各样的问题,如安全问题。虽然该课题仅仅包含了即时通讯软件的简单的功能,但对于后续的研究与开发,有辅助作用。2 系统概述iMeassaging即时通讯程序是基于windows下的聊天程序,采用Winsock实现网络通

12、讯,其设计架构为集中式的P2P,即服务器为中心,所有相关的核心数据全部存放在服务器上,客户端只能按照规定的方式读取其数据。该软件主要采用UDP协议,但某些特殊情况也采用了TCP协议。比如,命令消息和聊天消息均基于UDP协议,而获取用户列表则采用的是TCP协议,两种协议的混用更能保证客户端与服务器通讯时的效率和准确性。iMessaging实现了在局域网下进行个人聊天,群聊天,文件发送等的功能,其组成部份是客户端和服务器两大部分。其中服务器部分进行对会员,群数据的增添,删除,存储,查询等,并即时相应客户端发送而来的命令,进行相关的数据读写,并返回客户端相应的命令消息。客户端部分则是实现用户的操作界

13、面,实现用户间的聊天或者文件发送,以及群聊天等功能。2.1国内外发展现状随着移动互联网的发展,互联网即时通信也在向移动化扩张。目前,微软、AOL、Yahoo、UcSTAR等重要即时通信提供商都提供通过手机接入互联网即时通信的业务,用户可以通过手机与其他已经安装了相应客户端软件的手机或电脑收发消息。 即时聊天软件最早的创始人是三个以色列青年,是他们在1996年做出来的,取名叫ICQ。1998年当ICQ注册用户数达到1200万时,被AOL看中,以2.87亿美元的天价买走。目前ICQ有1亿多用户,主要市场在美洲和欧洲,已成为世界上最大的即时通信系统。 现在国内的即时通信工具按照使用对象分为两类:一类

14、是个人IM,如:QQ,百度hi,网易泡泡,盛大圈圈,淘宝旺旺等等。QQ的前身OICQ在1999年2月第一次推出,目前几乎接近垄断中国在线即时通讯软件市场。百度Hi具备文字消息、音视频通话、文件传输等功能,您可通过它找到志同道合的朋友,并随时与好友联络感情;另一类是企业用IM,简称EIM,如:E话通,UC,EC企业即时通信软件,UcSTAR、商务通等。 即时通信最初是由AOL、微软、雅虎、腾讯等独立于电信运营商的即时通信服务商提供的。但随着其功能日益丰富、应用日益广泛,特别是即时通信增强软件的某些功能如IP电话等,已经在分流和替代传统的电信业务,使得电信运营商不得不采取措施应对这种挑战。2006

15、年6月,中国移动已经推出了自己的即时通信工具Fetion,中国联通也将推出即时通讯工具“超信”,但由于进入市场较晚,其用户规模和品牌知名度还比不上原有的即时通信服务提供商。2.2系统实现技术2.2.1 MFC窗口控件重绘MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C+类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。的确,MFC给我们提供了很便捷的编程方式,我们几乎可以不需要

16、写任何代码就能生成一个带有菜单,工具栏和视图的窗口,MFC也提供了丰富的控件类,在设计对话框的时候,我们也只需要直接将控件拖进对话框里,而不用写任何代码。 iMessaging就是典型的应用程序,采用了对话框设计框架,但是为了设计一个友好美观的操作界面,仅用微软提供的控件类库达不到预期的效果,因此,就必须重新绘制其对话框和控件的界面。而正由于微软将这些控件封装得很好,对于要修改它的属性,派生一些美观的子控件难度就显得比较大。一般来说,实现对控件的重绘技术主要有子类化,自绘和重绘技术,由于框架太过于标准化,因此实现这些技术也是有一定的难度,这必须要对框架的结构有一定的了解。iMessaging采

17、用了的窗体背景重绘,listctrl自绘,按钮贴图等方式实现了操作界面的美观。主要核心技术是双缓冲绘图。双缓冲绘图就是将待绘制的图片保存到内存里,当需要绘制到屏幕上时,再一次性投递到设备描述表里,这样既避免了窗口重绘时的闪烁,又提高了绘制的速度和效率。BOOL CDC:CreatieCompatibleDC(CDC* pDC)函数用来创建一个兼容DC,即在内存里创建一个DC,以后的任何绘图所需的操作,如选用何种画笔,画刷,字体等,都将在内存中进行,而不是在真实设备上下文里。随后可以创建一张兼容位图,需要绘制的图像将,函数原型如下BOOL CBitmap:CreateCiompatibleBit

18、map(CDC* pDC,int nWidth,int nHeight)。最后需要将兼容DC里的东西投射到真实的DC里, BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc,DWORD dwRop )函数可以实现该功能,具体用法可参考MSDN。对话框的绘制比较容易,MFC为对话框提供了OnPaint消息相应函数,但是在该函数下绘制并不能从根本上重绘对话框,因为该函数还会调用CDialog:OnPaint函数,在内部还会再去重绘背景,因

19、此要实现完全意义上的重绘背景,就必须响应WM_ERASEBKGND消息,在消息响应函数里实现我们自己的绘制方法,然后直接返回TRUE,不再调用CDialog:OnEraseBkgnd()函数。为了实现像QQ那样的界面,必须将对话框的属性设置为None属性,即没有标题栏,因此只有自己去实现标题栏的功能。CListCtrl重绘的方法有两种,一种是采用微软提供的OWNERDRAW属性,通过重载DrawItem虚函数来进行重绘。另外一种就是Custom-draw属性,通过定义自绘消息响应函数来进行重绘。两种方式有不同之处,前者需要对整个ListCtrl绘制,必须考虑到每一个item项的绘制情况。而后者

20、相对比较简便,系统会在四个状态的时候通知重绘,这四个状态分别是绘制前,绘制后,擦除前,擦除后,我们就可以按照自己的需要去绘制,并且我们只用考虑其中一项item的绘制方法,就可以应用于所有项。iMessaging采用了后者进行对列表控件的重绘,实现了好友列表控件,群列表控件类。对于VC6开发环境,微软提供的通用button控件的外观从现在看来的确不太美观,无法实现动态状态的效果。那么因此就必须重新创建一个派生于CButton的按钮类,由于该类将应用于本软件的所有按钮控件,因此做成可贴状态图的按钮控件最为合适。状态分为移出按钮,悬浮按钮,按下按钮,禁用按钮四种状态,我们只需要提供相应的状态的Bit

21、map就可以。具体重绘方法就是采用前面提到的OWNERDRAW属性,重载虚函数DrawItem。而捕获鼠标的移入移出消息可以使用_TrackMouseEvent函数,通过设置TRACEMOUSEEVENT结构体的值来捕捉该消息。其移出消息对应的是WM_MOUSELEAVE,移入按钮消息是WM_MOUSEHOVER,分别定义其消息相应函数,这样就能实现状态的更替,再进行相应的绘制。2.2.2 Winsock编程Windows下网络编程的规范Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。它实现了标准socket编成的函数,提供了一套属于wind

22、ows下的套接子API。其通信的基础是套接字(Socket),一个套接字是通讯的一端。在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接字都有它的类型和与其相关的进程。套接字存在于通讯域中。通讯域是为了处理一般的线程通过套接字通讯而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。Windows Sockets规范支持单一的通讯域,即Internet域。各种进程使用这个域互相之间用Internet协议族来进行通讯(Windows Sockets 1.1以上的版本支持其他的域,例如Windows Sockets 2)

23、。套接字可以根据通讯性质分类;这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间通讯。不过只要底层的通讯协议允许,不同类型的套接字间也照样可以通讯。用户目前可以使用两种套接字,即流套接字和数据报套接字。流套接字提供了双向的,有序的,无重复并且无记录边界的数据流服务。数据报套接字支持双向的数据流,但并不保证是可靠,有序,无重复的。也就是说,一个从数据报套接字接收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。数据报套接字的一个重要特点是它保留了记录边界。对于这一特点,数据报套接字采用了与现在许多包交换网络(例如以太网)非常类似的模型。其中TCP协议就是基于流套接字,而UDP协议基

24、于数据报套接字,iMessaing聊天程序主要基于UDP协议,而在特殊操作下又采用TCP协议保证其数据的可靠性。在设计阶段,需分析该软件适用于什么样的地协议进行通讯,还必须分析该系统应该适合于何种套接字IO操作。目前,windows提供了多种套接字IO模型,如阻塞式IO,非阻塞式IO,事件IO,重叠IO(可提醒IO),完成端口等,每一种IO模型都具有自身的优势和缺陷,其中完成端口可以达到目前windows平台下最高IO性能。由于是基于UDP协议,并且考虑到在同一时间处理得命令并不会很大的情况,服务器和客户端均采用基于非阻态的IO模型实现命令的传输。windows提供了一个CAysncSocke

25、异步套接字类,它是基于非阻塞模型,对Socket函数进行了良好的封装,CAsyncSocket:Create()有一个参数指明了你想要处理哪些Socket事件,你关心的事件被指定以后,这个Socket默认就被用作了异步方式。CAsyncSocket的Create()函数,除了创建了一个SOCKET以外,还创建了个CSocketWnd窗口对象,并使用WSAAsyncSelect()将这个SOCKET与该窗口对象关联,以让该窗口对象处理来自Socket的事件(消息),然而CSocketWnd收到Socket事件之后,只是简单地回调CAsyncSocket:OnReceive()等虚函数。所以CAs

26、yncSocket的派生类,只需要在这些虚函数里添加发送和接收的代码。因此介于微软提供的强大类方法,就很容易实现数据的通信。2.2.3基于UDP的文件传输要实现文件传输的方式有很多种,常用的方式就是像MSN那样基于TCP的文件传输,这样的传输很稳定,可靠,容易实现,但传输的速度和效率会比较慢。为了提高传输速度,我们可以采用UDP协议来传输文件,由于UDP协议传输的数据不具有可靠性,在网络环境差的地方很容易出现丢包,乱序等现象,直接采用UDP来传输文件是不行的,那么就必须采用某种算法对其传输的可靠性进行保证。我们可以模仿TCP的通讯机制来实现可靠的UDP传输。实际上,TCP的三次握手的确让通讯数

27、据得到了有序,有效地保证,但是正是因为这样繁琐的数据验证,导致它传输大量数据效率低下,在TCP实现内部,实际上是采用了窗口大小为1的滑动窗口算法进行数据验证,因此,UDP可以借于此思想,采用滑动窗口算法和CRC冗余效验来保证数据的有效性,同时也会提高传输的速度。由于基于UDP的文件传输在网络环境差的情况下可能会大量丢包,因此不断重复发包会导致网络拥塞(TCP在内部实现了流量控制,因此发生网络拥塞可能性很小),这是其最大的缺陷。为了保证速度,就会造成网络拥塞,为了网络的畅通,就不能保证速度,两种传输方式的各据优劣势。2.2.4多线程编程多线程编成是网络编成的基础,几乎所有的网络编程都将涉及到多个

28、线程的数据传输,并且还要实现界面和数据处理互不影响。多线程编成虽说是基础,但是却是一个难点,因为线程同步的确比我们想象的复杂得多。要理解多线程编成就必须从以下几个方面理解:一、操作系统多任务概念;二、线程和进程的联系与区别;三、如何创建并管理销毁一个线程;四、何谓线程同步,怎样同步。什么是多任务概念?用通俗易懂的话就是几个运行的任务“同时”进行,比如Windows就是典型的多任务操作系统,我们可以同时进行听歌,打游戏,聊QQ,在基于这种理念的系统感觉就像所有的程序在同时运行一样。但实际上在单CPU的机子上,这些程序并不是同时在运行(即便是在多CPU的电脑上,也不可能所有程序同时运行),所有的程

29、序都以某种调度算法,按照优先级,依次获取CPU时间,每当一个程序获得CPU时间后,它就会得到运行,而当运行一段时间后,操作系统会将其暂停,再接换新的线程来运行。由于电脑的速度很快,这种非并发的模式却可以达到类似并发的效果。实际上,正如前面所说,操作系统并非是给某一程序分配时间片,准确的说是给这个程序里的某一线程分配了时间片。因此,在多任务操作系统中(若有线程的话),线程将是运行的最小单位。在windows系统中,进程和线程是最为重要的两个概念,因为整个系统就是基于进程和线程的。那么进程和线程有什么区别和联系呢?进程实际就是一个运行的程序,该程序有自己的堆栈空间,有自己的线程(至少有一个主线程)

30、,并且可以创建其它进程或线程。有一个概念容易搞错,就是进程是否能获得CPU时间片?实际上,进程是无法获取CPU时间片,只有该进程里的线程才能,所以说,真正执行代码的是线程,而进程只能管理线程,管理内存等。在iMessaging程序里,涉及了诸多对线程的创建,管理和销毁工作,特别是在服务器部分,为了保证数据响应的即时性,必须对每一个处理创建一个线程。常用的创建线程函数为CreateThread和_beginthreadex,两函数功能几乎一样(在某些特殊地方,两者用法需注意,推荐用后者),在创建前必须定义一个按照线程函数原型的函数,将其地址传给创建线程函数,让操作系统知道即将从哪个地方运行线程。

31、除此之外,还可以传递参数,供线程使用。若创建成功,该函数会返回一个HANDLE,这个句柄标示了刚创建的线程内核对象,当线程创建成功后,必须调用CloseHandle函数将其关闭,这是因为如果不关闭该内核句柄,当线程退出后,操作系统并没有销毁该线程,造成资源浪费,这是因为获取一个实内核句柄都会增加内核使用计数,只有当该内核对象的使用计数为0时,才会销毁该内核对象,线程也是如此。常用的销毁线程函数是ExitThread,TermelateThread函数,但推荐使用函数返回的方式结束进程,因为操作系统会自动调用ExitThread函数,并回收分配的内存资源。由于多个线程在同时运行的时候,会对共享数

32、据进行访问或修改,那么就必须要注意数据同步,windows给我们提供了多种数据同步的方法,比如基于用户模式的原子锁,临界区,Slim读写锁等,还有基于内核模式的内核对象,如互斥对象,事件对象,信号量,条件变量等。在iMessaging聊天程序中,最常用的是临界区,原因是基于用户模式,同步效率快,服务器可以进行更多的操作,其次还用到了事件对象,由于临界区太过单一的功能,并不能满足有些数据同步的需要,因此用到了功能强大的事件对象,在MFC中,事件对象被封装成了CEvent类,在SDK下,可以用调用CreateEvent API函数创建一个事件对象。2.2.5扩展功能广域网聊天由于该课题是基于局域网

33、的聊天软件,那如何实现广域网的聊天呢?实际上,在广域网中实现基于UDP的聊天功能几乎不可能,那是因为大多数的电脑用户在其小型网内都会有一道NAT屏障挡住,由于UDP是不可靠的,NAT发现当前IP和端口是不可信任的,那么就会将该数据包挡在墙外,这样就无法实现聊天功能。那么为了解决这个问题,就必须了解何谓信任的IP和端口。一般来讲,只要发现该主机曾经主动向该IP发送过信息,那么NAT会纪录下来,并添加到任信列表里面去。由于iMessaging聊天程序的服务器是所有客户端的受信任者,因此,服务器可以发送任何信息给客户端。借于此功能,若某一客户端要与另一客户端进行聊天通讯,若发现无法PING通对方,就

34、可以借助服务器的功能让双方正常通信,这就是UDP打洞技术。原理可以简述为,若客户端A无法与另一客户端B通讯,A可以向服务器发送打洞请求,让服务器告知B客户端A此时要与你进行通讯,你必需将其A添加到你的受信任列表里。随后,B就会发送一个消息到A,NAT发现此行为,自动将A添加到B的受信列表中,这样就可以实现正常的通讯了。iMessaging在客户端聊天模块部分添加了该功能,但由于服务器环境的限制,暂时没有测试环境。3系统分析3.1需求分析根据现目前聊天软件的普遍功能优势和缺点,以及用户体验所反映的情况,总结归纳出以下几点需求分析。1 注册会员。任何非会员都可以登陆注册界面注册一个自己的iMess

35、aging账号,今后就可以通过该帐号登陆iMessaging进行聊天。注册时填写基本信息,注册成功后服务器会返回一个唯一的iM账号。2 添加好友。会员可以通过查询iM会员,添加自己的好友,成为好友后,两会员便可以自由的通讯,还可以实现后续的多种功能。3 好友聊天。会员可以与自己所有的好友进行聊天,同时可以打开多个好友的对话框窗口进行文本聊天。4 文件传输。好友与好友之间可以互相传送文件,同时可以发送多个文件。5 创建新群。会员有创建新群的功能,创建新群后,自身默认为该群的管理员。6 加入群。非群会员可以申请加入某个已存在的群,若该群的管理员批准了该申请,该会员便成为该群的一员。7 群聊天。群里

36、的所有成员的聊天都是公开的,即该群所有成员能看到群里所有的发送的消息。8 发送离线消息。若发送的好友当时处于离线状态,发送的内容或请求将保存在服务器里,待该好友登陆后,再发送过去。3.2可行性分析3.2.1技术可行性iMessaging聊天软件是基于windows平台下的应用软件。开发该软件,应具备一定的windows编成基础,熟悉常用的API函数,深入了解MFC框架和窗口重绘技术。除此之外,必须深入理解socket编程,能熟练编写基于tcp,udp的网络通信。另外,还应具备多线程编程,线程同步,数据库操作的基本知识和技术。本人在大一时开始学习windows编程,大二时做过网络通信演示的项目,

37、大四实习时也是做的windows项目,通过三年的学习与积累对MFC框架设计有深入认识,并熟悉windows内存管理结构,DLL编程,网络编程,多线程编程等,能熟练编写基于windows下的应用程序,能够独立完成iMessaging的设计和编码。因此,在技术上是可行的。3.2.2操作可行性iMessaging的操作界面是借鉴QQ界面设计而成,操作习惯完全符合于现在的网络聊天用户。界面简洁,大方,美观,操作简单,便捷。在查看好友发送得消息上,创建了信息提示栏面板,给用户更友好的操作方式,具有操作可行性。3.2.3经济可行性在开发成本上,除了在设计界面上,制作图片上可能需要专业的人士进行制作,会造成

38、一定的经济开销。后期服务器升级,维护需要一定的资金。若仅局限在局域网里使用本软件,那经济成本较低,具有经济可行性。3.2.4进度可行性鉴于本软件的目标要求和特点,以及工作量评估,能够保证在预期的时间内完成该聊天软件的设计和开发。3.3系统业务流程分析业务流程图的图形表示的意义:3.3.1会员处理业务流程图图3.1会员处理业务流程图3.4系统数据流程分析3.4.1顶层数据流程图图3.2数据总流程图3.4.2第一层数据流程图 图3.3 iMessaging会员操作数据流程图3.4.3第二层数据流程图1.会员登陆数据流程图 图3.4会员登陆数据流程图2.注册会员数据流程图 图3.5注册会员数据流程图

39、3.添加好友数据流程图 图3.6添加好友数据流程图4.加入群数据流程图 图3.7加入群数据流程图5.查询好友数据流程图 图3.8查询好友数据流程图6.查询群数据流程图 图3.9查询群数据流程图7.创建群数据流程图图3.10创建群数据流程图8.更新信息数据流程图图3.11更新会员信息数据流程图9.群聊天数据流程图图3.12群聊天数据流程图3.5系统数据模型3.5.1系统E-R图E-R图的图形表示的意义:图3.13会员E-R图图3.14群E-R图图3.15群关系E-R图图3.16好友关系E-R图图3.17离线消息E-R图图3.18总体E-R图3.5.2 CDM图图3.19 CDM图3.5.3 PD

40、M图图3.20 PDM图4系统详细设计4.1系统功能设计4.1.1主要功能模块1服务器功能模块框架图图4.1服务器功能模块框架图2客户端功能模块图4.2客户端功能模块框架图4.1.2主要功能描述1服务器功能描述(1)登陆验证功能:当客户端发送了登陆验证命令后,服务器会验证传入的帐号和密码是否为已注册的会员,并返回验证后的信息。(2)注册会员:当客户端发送了注册会员命令后,服务器会添加注册的信息到会员表里,并更新在线会员列表,同时返回会员帐号给客户端。(3)获取好友或群信息:服务器可以查询会员表和群表信息,返回指定ID的信息。该功能主要用于获取好友列表和群成员列表信息。(4)添加好友:服务器提供

41、添加好友功能,主要启到一个中介的功能,实现添加命令的转发。若添加成功,还会更新好友关系表。(5)加入群:该功能同添加好友功能类似,服务器会将加入请求发送到群管理员处,管理员的回应也将被服务器转发回客户端。若成功加入该群,还会更新群成员表。(6)发送离线消息:当客户端给未在线的好友发送消息或请求时,会将该消息或请求保存到数据库里,待下次该好友上线后,将消息一次性发送过去。(7)心跳功能:为了防止客户端因非正常退出而导致服务器误认为其还在线,客户端会每隔一段时间向服务器发送心跳命令,因此服务器也会每隔一段时间检测各在线会员是否按时发送心跳事件。若发现某会员超时,强迫其下线,并通知他的所有好友。(8

42、)UDP打洞服务:当客户端无法正常与好友进行通讯时,会请求服务器进行UDP打洞服务,即是通知另一会员向该申请的好友IP和端口发生一个数据包,使其成为信任IP和端口。(9)创建IM群:客户端发送创建信息,服务器负责对群表进行修改。(10)登陆离线日志功能:服务器可以将所有用户的登陆和离线的信息记录到数据库里,便于管理员进行信息察看 2客户端功能描述(1)会员登陆:要想使用iMessaging进行聊天,就必须在登陆界面进行会员登陆,客户端会发送验证的帐号和密码给服务器,若验证通过,就能登陆进该帐号,进行后续的服务功能。(2)注册会员:若第一次使用iMessaging,没有iM帐号的话,可以在登陆界

43、面下进行注册,客户端会将待注册的信息发送给服务器处理,若注册成功,用户会得到一个iM帐号。(3)创建IM群:在客户端下,iM会员可以创建多个iM群,客户端将待创建的信息发送给服务器,服务器返回创建信息。若创建成功,客户端能获得一个唯一的iM群号。(4)添加好友:iM会员能够添加其他用户为好友,通过对该用户发送添加请求,若该会员统一添加,两会员便成为好友,更新好友列表,可以进行好友间的功能。(5)加入群:iM会员可以选择加入任意的iM群,客户端会发送请求给该群的管理员进行验证,若验证通过,该会员便成为该群的一员,并更新群成员列表。(6)文件传输:好友与好友之间可以任意互相传输文件,并且同时支持多

44、个文件的高速传输。(7)好友聊天:好友与好友之间可以进行基于文本的文字聊天。(8)群聊天:好友能在自己所加的群里,进行群聊天,其它人在群里的任何对话均能被接受到。(9)退出登陆:iM会员退出登陆时将发送命令给服务器,服务器获得退出命令后将更新在线列表,并通知所有该会员的好友,更新他们的好友在线列表。(10)查询会员或群信息:iM会员可以通过查询界面,查询指定会员或群的信息。(11)UDP打洞请求:客户端无法与另一客户端进行UDP通讯时,将向服务器发送打洞请求。服务器将打洞的结果返回给客户端。(12)更改会员资料:可以更新自己的基本信息。(13)心跳功能:在线的客户端能定期的向服务器发送心跳命令

45、,避免非正常结束iMessaging后导致的非法的登出。4.2重要模块的具体实现4.2.1网络通信的实现1基于UDP的数据发送与接收图4.3服务器与客户端通信模型图图4.4服务器与客户端的通信图(1)服务器端的数据接收服务器基于UDP的数据发送与接受主要采用的是MFC提供的CAsyncSocket类,该类提供了基于异步非阻塞式的IO操作。iMessaging程序里根据CAsyncSocket派生了一个CIMSocket类,服务器用该类进行数据的发送与接收,并将接收后的数据按照命令类型分发给各处理子模块。创建该类在CIMessageDlg对话框类(服务器运行的主窗口)的OnInitDialog函

46、数里,每当程序运行时都将自动调用该函数,进行对话框的初始化操作,这是将是创建CIMSocket类的最佳场所。该对话框类提供一个内部接口函数BOOL CIMessageDlg:CreateUDPSocket(),用于创建CIMSocket类。当CIMSocket类创建成功后,将其指针保存在对话框里保护类型成员变量里CIMSocket* m_pSocket,方便以后的使用。CIMSocket类重载了虚函数OnReceive用来接收网络信息,该函数是一个系统自动调用的消息相应函数,每当系统发现该套接字的接收缓冲区里有数据的时候,将调用该函数,那么我们就可以在该函数里,调用RecvFrom或Recv来获取数据。由于正是考虑到基于命令的信息传输,接收缓冲区里不一定时刻都有数据到来,那么采用了基于消息响应的异步套接字类。在OnRecevie函数里,可能同时会有多个数据包到来,若按照每到一个数据包进行解析和分发,将可能延误整个接收处理过程,造成接收缓冲区溢出,丢失大量数据包,因此iMessaging在处理接收来的数据时,会

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

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1