优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx

上传人:b****6 文档编号:22371244 上传时间:2023-02-03 格式:DOCX 页数:79 大小:3MB
下载 相关 举报
优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx_第1页
第1页 / 共79页
优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx_第2页
第2页 / 共79页
优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx_第3页
第3页 / 共79页
优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx_第4页
第4页 / 共79页
优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx_第5页
第5页 / 共79页
点击查看更多>>
下载资源
资源描述

优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx

《优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx(79页珍藏版)》请在冰豆网上搜索。

优秀毕业设计精品 基于局域网的聊天软件的设计与实现 精品Word文档下载推荐.docx

Abstract

Today,withtherapiddevelopmentofthenetwork,thenetworkconceptisnolongernewtotheworld.Becauseofthebirthofinstantmessagingsoftware,precisely,theonlineworldwasbooming.Instantmessagingsoftwaretoprovidepeoplewithacommunicationplatformthatgraduallydevelopedintoaspecialkindofderivativeofcommunity,butfromsuchacommunitywillaffectpeople'

snormallife,workandstudyandsoon.Ascommunications,networkintegration,instantmessagingsoftwarewillbefurtherdevelopedintoanewgenerationofcommunicationssoftware,hasgreatprospectsfordevelopment.iMessagingbetweenLANchatsoftwareisdevelopedunderthebackgroundthatmadethedevelopmentoffollow-uptoexploremoreconvenient,morediversifiedchatmode,withthegradualimprovementoflate,willincreasepeopletostudy,office,communicationefficiencyprovideamoreintuitivewaytochat,andchatsoftwaremustbearriveatanewsituation.

Keywords:

instantmessaging

1引言

聊天工具的出现,促进了网络社会的形成,人们的生活世界也逐渐的划分为真实世界和虚拟世界。

这里的虚拟世界就是指以网络为载体的生活,人们通常并不需要知道对方是谁,也不需要了解网络上的资源是谁提供的,便可以遨游于这个虚拟的世界,寻找属于自己的天空。

虚拟世界从某种程度上促进了社会各个方面的发展,无论从经济上,文化上,教育上都有着举足轻重的地位。

而作为网络社会的交通工具之一聊天工具扮演着极为重要的角色,它促进了人们思想交流,加快了信息流通的速度,使这个信息化的世界高速的运转着。

在社会方面,聊天工具提供了一个交流的平台,就好比一个虚拟的社会,广大的使用者可以通过这个社会里畅所欲言,以特殊的方式营造出了一种社会属性。

在教育方面,聊天工具带给我们新式的教学体验,使在线文字,语音,视频教学成为了可能,更重要的是,人们可以分享彼此的思想和经验,促进精神和教育文化的发展。

在工作方面,人们利用聊天室和聊天群招开工作会议,利用聊天工具的文件服务实现文件共享和文件传输,提高了工作的效率。

综观聊天工具的发展史,从单一的一对一聊天,到多对多的互动式聊天,聊天工具正在进行了一场人类思想交流观的革命。

目前的主流聊天工具更是将工作、娱乐、购物整合在了一起,逐渐发展成了综合化的聊天软件。

人们对聊天工具的开发与研究将不会懈怠,反而会更深入的探索其意义。

在我看来,由于互联网的飞速发展,其必定会整合通信行业,而聊天工具将会取代电话,成为最流行普及的交流工具。

1.1开发背景

1970年早期,一种更早的即时通讯形式是柏拉图系统(PLATOsystem)。

在这之后在1980年,UNIX/Linux的交谈即时通讯被广泛的使用于工程师与学术界,1990年即时通讯更跨越了网际网路交流。

1996年11月,ICQ是首个广泛被非UNIX/Linux使用者用于网路的即时通讯软体。

在ICQ的介绍之后,同时在许多地方有一定数量的即时通讯方式发展,且各式的即时通讯程式有独立的协定,无法彼此互通。

这引导着使用者同时执行两个以上的即时通讯软体,或者他们可以使用支援多协定的终端软体,如Gaim、Trillian或Jabber。

在中国,QQ是目前最主流的聊天软件,具有庞大的用户群体,功能具有多样化。

1.2课题研究的意义

研究该课题,具有重大意义,这对于今后研究网络与通信融合具有指导作用。

虽然目前的聊天软件已经具备强大多种的功能,并且支持广域网的聊天,但是他们仍然存在各种各样的问题,如安全问题。

虽然该课题仅仅包含了即时通讯软件的简单的功能,但对于后续的研究与开发,有辅助作用。

2系统概述

iMeassaging即时通讯程序是基于windows下的聊天程序,采用Winsock实现网络通讯,其设计架构为集中式的P2P,即服务器为中心,所有相关的核心数据全部存放在服务器上,客户端只能按照规定的方式读取其数据。

该软件主要采用UDP协议,但某些特殊情况也采用了TCP协议。

比如,命令消息和聊天消息均基于UDP协议,而获取用户列表则采用的是TCP协议,两种协议的混用更能保证客户端与服务器通讯时的效率和准确性。

iMessaging实现了在局域网下进行个人聊天,群聊天,文件发送等的功能,其组成部份是客户端和服务器两大部分。

其中服务器部分进行对会员,群数据的增添,删除,存储,查询等,并即时相应客户端发送而来的命令,进行相关的数据读写,并返回客户端相应的命令消息。

客户端部分则是实现用户的操作界面,实现用户间的聊天或者文件发送,以及群聊天等功能。

2.1国内外发展现状

随着移动互联网的发展,互联网即时通信也在向移动化扩张。

目前,微软、AOL、Yahoo、UcSTAR等重要即时通信提供商都提供通过手机接入互联网即时通信的业务,用户可以通过手机与其他已经安装了相应客户端软件的手机或电脑收发消息。

即时聊天软件最早的创始人是三个以色列青年,是他们在1996年做出来的,取名叫ICQ。

1998年当ICQ注册用户数达到1200万时,被AOL看中,以2.87亿美元的天价买走。

目前ICQ有1亿多用户,主要市场在美洲和欧洲,已成为世界上最大的即时通信系统。

现在国内的即时通信工具按照使用对象分为两类:

一类是个人IM,如:

QQ,XXhi,网易泡泡,盛大圈圈,淘宝旺旺等等。

QQ的前身OICQ在1999年2月第一次推出,目前几乎接近垄断中国在线即时通讯软件市场。

XXHi具备文字消息、音视频通话、文件传输等功能,您可通过它找到志同道合的朋友,并随时与好友联络感情;

另一类是企业用IM,简称EIM,如:

E话通,UC,EC企业即时通信软件,UcSTAR、商务通等。

即时通信最初是由AOL、微软、雅虎、腾讯等独立于电信运营商的即时通信服务商提供的。

但随着其功能日益丰富、应用日益广泛,特别是即时通信增强软件的某些功能如IP电话等,已经在分流和替代传统的电信业务,使得电信运营商不得不采取措施应对这种挑战。

2006年6月,中国移动已经推出了自己的即时通信工具——Fetion,中国联通也将推出即时通讯工具“超信”,但由于进入市场较晚,其用户规模和品牌知名度还比不上原有的即时通信服务提供商。

2.2系统实现技术

2.2.1MFC窗口控件重绘

MFC(MicrosoftFoundationClasses),是一个微软公司提供的类库(classlibraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。

其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

的确,MFC给我们提供了很便捷的编程方式,我们几乎可以不需要写任何代码就能生成一个带有菜单,工具栏和视图的窗口,MFC也提供了丰富的控件类,在设计对话框的时候,我们也只需要直接将控件拖进对话框里,而不用写任何代码。

iMessaging就是典型的MFC应用程序,采用了MFC对话框设计框架,但是为了设计一个友好美观的操作界面,仅用微软提供的控件类库达不到预期的效果,因此,就必须重新绘制其对话框和控件的界面。

而正由于微软将这些控件封装得很好,对于要修改它的属性,派生一些美观的子控件难度就显得比较大。

一般来说,实现对控件的重绘技术主要有子类化,自绘和重绘技术,由于MFC框架太过于标准化,因此实现这些技术也是有一定的难度,这必须要对框架的结构有一定的了解。

iMessaging采用了的窗体背景重绘,listctrl自绘,按钮贴图等方式实现了操作界面的美观。

主要核心技术是GDI双缓冲绘图。

双缓冲绘图就是将待绘制的图片保存到内存里,当需要绘制到屏幕上时,再一次性投递到设备描述表里,这样既避免了窗口重绘时的闪烁,又提高了绘制的速度和效率。

BOOLCDC:

:

CreatieCompatibleDC(CDC*pDC)函数用来创建一个兼容DC,即在内存里创建一个DC,以后的任何绘图所需的操作,如选用何种画笔,画刷,字体等,都将在内存中进行,而不是在真实设备上下文里。

随后可以创建一张兼容位图,需要绘制的图像将,函数原型如下BOOLCBitmap:

CreateCiompatibleBitmap(CDC*pDC,intnWidth,intnHeight)。

最后需要将兼容DC里的东西投射到真实的DC里,BOOLBitBlt(HDChdcDest,intnXDest,intnYDest,intnWidth,intnHeight,HDChdcSrc,intnXSrc,intnYSrc,DWORDdwRop)函数可以实现该功能,具体用法可参考MSDN。

对话框的绘制比较容易,MFC为对话框提供了OnPaint消息相应函数,但是在该函数下绘制并不能从根本上重绘对话框,因为该函数还会调用CDialog:

OnPaint函数,在内部还会再去重绘背景,因此要实现完全意义上的重绘背景,就必须响应WM_ERASEBKGND消息,在消息响应函数里实现我们自己的绘制方法,然后直接返回TRUE,不再调用CDialog:

OnEraseBkgnd()函数。

为了实现像QQ那样的界面,必须将对话框的属性设置为None属性,即没有标题栏,因此只有自己去实现标题栏的功能。

CListCtrl重绘的方法有两种,一种是采用微软提供的OWNERDRAW属性,通过重载DrawItem虚函数来进行重绘。

另外一种就是Custom-draw属性,通过定义自绘消息响应函数来进行重绘。

两种方式有不同之处,前者需要对整个ListCtrl绘制,必须考虑到每一个item项的绘制情况。

而后者相对比较简便,系统会在四个状态的时候通知重绘,这四个状态分别是绘制前,绘制后,擦除前,擦除后,我们就可以按照自己的需要去绘制,并且我们只用考虑其中一项item的绘制方法,就可以应用于所有项。

iMessaging采用了后者进行对列表控件的重绘,实现了好友列表控件,群列表控件类。

对于VC6开发环境,微软提供的通用button控件的外观从现在看来的确不太美观,无法实现动态状态的效果。

那么因此就必须重新创建一个派生于CButton的按钮类,由于该类将应用于本软件的所有按钮控件,因此做成可贴状态图的按钮控件最为合适。

状态分为移出按钮,悬浮按钮,按下按钮,禁用按钮四种状态,我们只需要提供相应的状态的Bitmap就可以。

具体重绘方法就是采用前面提到的OWNERDRAW属性,重载虚函数DrawItem。

而捕获鼠标的移入移出消息可以使用_TrackMouseEvent函数,通过设置TRACEMOUSEEVENT结构体的值来捕捉该消息。

其移出消息对应的是WM_MOUSELEAVE,移入按钮消息是WM_MOUSEHOVER,分别定义其消息相应函数,这样就能实现状态的更替,再进行相应的绘制。

2.2.2Winsock编程

Windows下网络编程的规范-WindowsSockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。

它实现了标准socket编成的函数,提供了一套属于windows下的套接子API。

其通信的基础是套接字(Socket),一个套接字是通讯的一端。

在这一端上你可以找到与其对应的一个名字。

一个正在被使用的套接字都有它的类型和与其相关的进程。

套接字存在于通讯域中。

通讯域是为了处理一般的线程通过套接字通讯而引进的一种抽象概念。

套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。

WindowsSockets规范支持单一的通讯域,即Internet域。

各种进程使用这个域互相之间用Internet协议族来进行通讯(WindowsSockets1.1以上的版本支持其他的域,例如WindowsSockets2)。

套接字可以根据通讯性质分类;

这种性质对于用户是可见的。

应用程序一般仅在同一类的套接字间通讯。

不过只要底层的通讯协议允许,不同类型的套接字间也照样可以通讯。

用户目前可以使用两种套接字,即流套接字和数据报套接字。

流套接字提供了双向的,有序的,无重复并且无记录边界的数据流服务。

数据报套接字支持双向的数据流,但并不保证是可靠,有序,无重复的。

也就是说,一个从数据报套接字接收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。

数据报套接字的一个重要特点是它保留了记录边界。

对于这一特点,数据报套接字采用了与现在许多包交换网络(例如以太网)非常类似的模型。

其中TCP协议就是基于流套接字,而UDP协议基于数据报套接字,iMessaing聊天程序主要基于UDP协议,而在特殊操作下又采用TCP协议保证其数据的可靠性。

在设计阶段,需分析该软件适用于什么样的地协议进行通讯,还必须分析该系统应该适合于何种套接字IO操作。

目前,windows提供了多种套接字IO模型,如阻塞式IO,非阻塞式IO,事件IO,重叠IO(可提醒IO),完成端口等,每一种IO模型都具有自身的优势和缺陷,其中完成端口可以达到目前windows平台下最高IO性能。

由于是基于UDP协议,并且考虑到在同一时间处理得命令并不会很大的情况,服务器和客户端均采用基于非阻态的IO模型实现命令的传输。

windows提供了一个CAysncSocke异步套接字类,它是基于非阻塞模型,对Socket函数进行了良好的封装,CAsyncSocket:

Create()有一个参数指明了你想要处理哪些Socket事件,你关心的事件被指定以后,这个Socket默认就被用作了异步方式。

CAsyncSocket的Create()函数,除了创建了一个SOCKET以外,还创建了个CSocketWnd窗口对象,并使用WSAAsyncSelect()将这个SOCKET与该窗口对象关联,以让该窗口对象处理来自Socket的事件(消息),然而CSocketWnd收到Socket事件之后,只是简单地回调CAsyncSocket:

OnReceive()等虚函数。

所以CAsyncSocket的派生类,只需要在这些虚函数里添加发送和接收的代码。

因此介于微软提供的强大类方法,就很容易实现数据的通信。

2.2.3基于UDP的文件传输

要实现文件传输的方式有很多种,常用的方式就是像MSN那样基于TCP的文件传输,这样的传输很稳定,可靠,容易实现,但传输的速度和效率会比较慢。

为了提高传输速度,我们可以采用UDP协议来传输文件,由于UDP协议传输的数据不具有可靠性,在网络环境差的地方很容易出现丢包,乱序等现象,直接采用UDP来传输文件是不行的,那么就必须采用某种算法对其传输的可靠性进行保证。

我们可以模仿TCP的通讯机制来实现可靠的UDP传输。

实际上,TCP的三次握手的确让通讯数据得到了有序,有效地保证,但是正是因为这样繁琐的数据验证,导致它传输大量数据效率低下,在TCP实现内部,实际上是采用了窗口大小为1的滑动窗口算法进行数据验证,因此,UDP可以借于此思想,采用滑动窗口算法和CRC冗余效验来保证数据的有效性,同时也会提高传输的速度。

由于基于UDP的文件传输在网络环境差的情况下可能会大量丢包,因此不断重复发包会导致网络拥塞(TCP在内部实现了流量控制,因此发生网络拥塞可能性很小),这是其最大的缺陷。

为了保证速度,就会造成网络拥塞,为了网络的畅通,就不能保证速度,两种传输方式的各据优劣势。

2.2.4多线程编程

多线程编成是网络编成的基础,几乎所有的网络编程都将涉及到多个线程的数据传输,并且还要实现界面和数据处理互不影响。

多线程编成虽说是基础,但是却是一个难点,因为线程同步的确比我们想象的复杂得多。

要理解多线程编成就必须从以下几个方面理解:

一、操作系统多任务概念;

二、线程和进程的联系与区别;

三、如何创建并管理销毁一个线程;

四、何谓线程同步,怎样同步。

什么是多任务概念?

用通俗易懂的话就是几个运行的任务“同时”进行,比如Windows就是典型的多任务操作系统,我们可以同时进行听歌,打游戏,聊QQ,在基于这种理念的系统感觉就像所有的程序在同时运行一样。

但实际上在单CPU的机子上,这些程序并不是同时在运行(即便是在多CPU的电脑上,也不可能所有程序同时运行),所有的程序都以某种调度算法,按照优先级,依次获取CPU时间,每当一个程序获得CPU时间后,它就会得到运行,而当运行一段时间后,操作系统会将其暂停,再接换新的线程来运行。

由于电脑的速度很快,这种非并发的模式却可以达到类似并发的效果。

实际上,正如前面所说,操作系统并非是给某一程序分配时间片,准确的说是给这个程序里的某一线程分配了时间片。

因此,在多任务操作系统中(若有线程的话),线程将是运行的最小单位。

在windows系统中,进程和线程是最为重要的两个概念,因为整个系统就是基于进程和线程的。

那么进程和线程有什么区别和联系呢?

进程实际就是一个运行的程序,该程序有自己的堆栈空间,有自己的线程(至少有一个主线程),并且可以创建其它进程或线程。

有一个概念容易搞错,就是进程是否能获得CPU时间片?

实际上,进程是无法获取CPU时间片,只有该进程里的线程才能,所以说,真正执行代码的是线程,而进程只能管理线程,管理内存等。

在iMessaging程序里,涉及了诸多对线程的创建,管理和销毁工作,特别是在服务器部分,为了保证数据响应的即时性,必须对每一个处理创建一个线程。

常用的创建线程函数为CreateThread和_beginthreadex,两函数功能几乎一样(在某些特殊地方,两者用法需注意,推荐用后者),在创建前必须定义一个按照线程函数原型的函数,将其地址传给创建线程函数,让操作系统知道即将从哪个地方运行线程。

除此之外,还可以传递参数,供线程使用。

若创建成功,该函数会返回一个HANDLE,这个句柄标示了刚创建的线程内核对象,当线程创建成功后,必须调用CloseHandle函数将其关闭,这是因为如果不关闭该内核句柄,当线程退出后,操作系统并没有销毁该线程,造成资源浪费,这是因为获取一个实内核句柄都会增加内核使用计数,只有当该内核对象的使用计数为0时,才会销毁该内核对象,线程也是如此。

常用的销毁线程函数是ExitThread,TermelateThread函数,但推荐使用函数返回的方式结束进程,因为操作系统会自动调用ExitThread函数,并回收分配的内存资源。

由于多个线程在同时运行的时候,会对共享数据进行访问或修改,那么就必须要注意数据同步,windows给我们提供了多种数据同步的方法,比如基于用户模式的原子锁,临界区,Slim读写锁等,还有基于内核模式的内核对象,如互斥对象,事件对象,信号量,条件变量等。

在iMessaging聊天程序中,最常用的是临界区,原因是基于用户模式,同步效率快,服务器可以进行更多的操作,其次还用到了事件对象,由于临界区太过单一的功能,并不能满足有些数据同步的需要,因此用到了功能强大的事件对象,在MFC中,事件对象被封装成了CEvent类,在SDK下,可以用调用CreateEventAPI函数创建一个事件对象。

2.2.5扩展功能——广域网聊天

由于该课题是基于局域网的聊天软件,那如何实现广域网的聊天呢?

实际上,在广域网中实现基于UDP的聊天功能几乎不可能,那是因为大多数的电脑用户在其小型网内都会有一道NAT屏障挡住,由于UDP是不可靠的,NAT发现当前IP和端口是不可信任的,那么就会将该数据包挡在墙外,这样就无法实现聊天功能。

那么为了解决这个问题,就必须了解何谓信任的IP和端口。

一般来讲,只要发现该主机曾经主动向该IP发送过信息,那么NAT会纪录下来,并添加到任信列表里面去。

由于iMessaging聊天程序的服务器是所有客户端的受信任者,因此,服务器可以发送任何信息给客户端。

借于此功能,若某一客户端要与另一客户端进行聊天通讯,若发现无法PING通对方,就可以借助服务器的功能让双方正常通信,这就是UDP打洞技术。

原理可以简述为,若客户端A无法与另一客户端B通讯,A可以向服务器发送打洞请求,让服务器告知B客户端A此时要与你进行通讯,你必需将其A添加到你的受信任列表里。

随后,B就会发送一个消息到A,NAT发现此行为,自动将A添加到B的受信列表中,这样就可以实现正常的通讯了。

iMessaging在客户端聊天模块部分添加了该功能,但由于服务器环境的限制,暂时没有测试环境。

3系统分析

3.1需求分析

根据现目前聊天软件的普遍功能优势和缺点,以及用户体验所反映的情况,总结归纳出以下几点需求分析。

1.注册会员。

任何非会员都可以登陆注册界面注册一个自己的iMessaging账号,今后就可以通过该帐号登陆iMessaging进行聊天。

注册时填写基本信息,注册成功后服务器会返回一个唯一的iM账号。

2.添加好友。

会员可以通过查询iM会员,添加自己的好友,成为好友后,两会员便可以自由的通讯,还可以实现后续的多种功能。

3.好友聊天。

会员可以与自己所有的好友进行聊天,同时可以打开多个好友的对话框窗口进行文本聊天。

4.文件传输。

好友与好友之间可以互相传送文件,同时可以发送多个文件。

5.创建新群。

会员有创建新群的功能,创建新群后,自身默认为该群的管理员。

6.加入群。

非群会员可以申请加入某个已存在的群,若该群的管理员批准了该申请,该会员便成为该群的一员。

7.群聊天。

群里的所有成员的聊天都是公开的,即该群所有成员能看到群里所有的发送的消息。

8.发送离线消息。

若发送的好友当时处于离线状态,发送的内容或请求将保存在服务器里,待该好友登陆后,再发送过去。

3.2可行性分析

3.2.1技术可

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

当前位置:首页 > 高等教育 > 农学

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

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