多功能聊天系统的设计与实现.docx
《多功能聊天系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《多功能聊天系统的设计与实现.docx(57页珍藏版)》请在冰豆网上搜索。
![多功能聊天系统的设计与实现.docx](https://file1.bdocx.com/fileroot1/2022-10/13/6fef1a73-e6ca-4244-94d7-849b636b0501/6fef1a73-e6ca-4244-94d7-849b636b05011.gif)
多功能聊天系统的设计与实现
多功能聊天系统的设计与实现
摘要:
随着互联网技术的飞速发展,基于网络的即时通信给人们带来诸多便利,也成为当今网络应用的主流。
聊天工具作为当今使用最为广泛的通信工具之一,可以方便人们随时随地进行在线交流,发挥了即时性通信的特点。
它不仅可以让用户进行文字聊天,而且还增添语音功能。
这样可以让网上的好友身临其境的面对面的聊天,让彼此之间更为深入的了解。
人性化的设计让每个用户都可以得心应手的使用,从而获得更多人的青睐。
本毕业设计就是模拟QQ聊天软件,采用C/S模式,用利用VisualC++作为开发工具来实现这个聊天程序,先将文字聊天、文件传输、语音聊天三个模块设计成可执行文件,然后进行调用。
关键字:
互联网;聊天软件;C/S模式;VisualC++
ChatMultifunctionSystemDesignandImplementation
ABSTRACT:
WiththerapiddevelopmentofInternettechnology,theinstantcommunicationbasedonthenetworkbringslotsofconvenient,andbecomesthemainstreamofnetworkapplication.Asthemostwidelyusedcommunicationtools,chattoolscanmakepeopleonlinecommunicationconvenientlyanytime;playafeatureoftheinstantcommunication.Thosetoolsnotonlycanletuserschatwithtext,butalsoaddspeechfunction.Thiscanmakeonlinefriendsface-to-facechatpersonally;makeeachothermorein-depthunderstanding.Thishumanizationdesignmakeseachuserhandyuses,thusobtainsmorefavor.
ThegraduationdesignsimulatedthechatusingQQsoftware,usedtheC/Smode,realizedthisprogramwithVisualC++tool.Firstly,madethemodulesdesignedwhichconcludetextschat,texttransfer,andvoicechat,andthencallit.
Keywords:
Internet;Chatsoftware;C/Smode;VisualC++
前言
21世纪是信息的时代,随着互联网技术的发展,信息在传递方面也有了崭新的一面。
现今聊天软件成为信息传递最为广泛的应用工具,它发挥了即时性通信的特点,可以让用户在第一时间内得到信息的交流,它不仅可以让用户进行文字聊天,而且还增添语音、视频功能。
这样可以让网上的好友身临其境的面对面的聊天,让彼此之间更为深入的了解。
人性化的设计让每个用户都可以得心应手的使用,从而获得更多人的青睐。
Internet的出现连通了整个世界,而聊天软件的出现则连通了每一位网上的用户。
随着网络应用的发展,聊天软件已经成为最热门的网络应用之一。
经历了近几年突飞猛进的发展之后,即时通讯工具早已不再是简单的互联网通讯工具,它已经成为一个集互动交流、休闲娱乐、信息管理为一体的多元化互联网应用平台。
总之,聊天软件的出现给人们彼此之间的沟通带来了无比的方便,人们可以通过聊天软件建立深刻的友情,让人们在互联网上的交流更加充满活力与生机。
Windows环境下多功能聊天程序的总体设计思路和设计方法如下:
程序采用C/S模式进行设计,先将文字聊天、文件传输、语音聊天三个模块设计成可执行文件,然后进行调用。
用CSocket编程设计网络通讯。
界面设计部分采用WindowsMFC框架。
这样做的优点在于三个模块都可以独立实现,避免复杂的线程设计,线程操作而由操作系统实现,可同时进行的操作的数量大大增加。
又撇去C/S模式中的每个客户端的信息需要通过服务器中转的弊端,使得每个用户面对的界面不受其是服务器还是客户端的影响,把主界面做成服务器,而对于相关的功能做成客户端,用其他的.exe文件处理发送给对方的服务器。
多功能聊天系统的设计与实现要解决的问题主要是完成添加好友、文字聊天、文件传输、语音聊天几个主要功能模块。
第1章多功能聊天系统的总体设计
1.1软件功能需求分析
文字聊天、文件传输和语音聊天这三个功能都可以独立为一个MFC工程;增加实现类似QQ主界面的主程序工程,添加好友功能可在主程序中实现,同时主程序还负责两端通信,协调调用相应模块。
软件模块结构如图1.1所示。
图1.1软件模块结构
总体来说软件采用C/S结构进行设计,但是将文字聊天、文件传输、语音聊天三个模块设计成可执行文件进行调用,一个原因是这三个模块都可以独立实现,另一个原因就是为了实现三个模块可同时被调用,如果将三个模块都在主程序中实现,那么就需要进行复杂的线程设计,并且每个模块都通过主程序进行通信,就会严重限制同时可进行的操作。
例如如果将三个模块都在主程序中实现,只能同一好友进行语音聊天,同另一个好友进行文件传输等少量的操作,因为对于线程的操作将要求在主程序中实现,而如果将三个模块独立成可执行文件,则可以线程操作而由操作系统实现,可同时进行的操作的数量大大增加。
同时这样设计撇去C/S模式中的每个客户端的信息需要通过服务器中转的弊端,使得每个用户面对的界面不受其是服务器还是客户端的影响,把主界面做成服务器,而对于相关的功能做成客户端,用其他的.exe文件处理发送给对方的服务器。
主界面主要处理系统相关简单的消息:
添加好友,同意身份验证,同时调度所有的可执行文件处理相关事务。
采用C/S结构进行设计的优缺点:
(1)优点:
①客户端占用服务器的监听端口时间短,不会出现客户端因为服务器监听事件数量不够而造成的连接不上的问题;
②调用每个可执行文件,目的明确,容易实现分工,同时容易调试和测试;
③每个可执行文件容易改写成.dll的文件(腾讯公司的产品就是利用动态连接库实现消息通信的),文件之间相对独立减轻服务器的负担;
④在软件编辑过程中没有使用太多的线程,思路清晰,有利于代码的读写,同时也减轻了程序员的负担。
(2)缺点:
程序之间通过文件显式通信,文件内容未经加密,容易被加以利用。
如果不改变使用中转文件的方法,最好是对程序加以改进,对写入文件的内容进行加密。
1.2主程序与功能模块之间进行沟通的原理
主程序使用WinExec()函数调用其他可执行文件,但是此函数只单纯调用,功能模块与主程序之间的如何进行沟通是一个必须解决的问题。
在这里,我们使用一种简单的方法:
即主程序与其他模块之间通过文件进行交流,主程序将模块所需信息写入文件中,然后调用功能模块的可执行文件,功能模块的可执行文件启动后从此文件中读取信息,这样就完成了两者之间的沟通。
这是主程序与功能模块之间进行沟通的原理,但在具体实现的时候,文件中存储的信息必须遵循一定的格式,在这里我们设计双方进行交流的信息格式为:
事件类型#对方IP#对方用户名#数据#
并且在程序序中定义结构体Message来存储此信息,Message结构体的定义如下:
structMessage//主界面之间的信息体
{intsign;//事件类型
charmsg[1000];//存储该格式中后面的所有信息
}msg;
信息格式如下:
(1)事件类型:
文字聊天,文件传输,好友添加和语音聊天这4个功能都包括有两种状态——接受信息或者主动发送信息,在事件类型中通过一个数字来表示这些不同状态。
4个功能总共有八种状态,因此事件类型的取值为0-7,其代表的状态如表1.1所示。
表1.1事件状态及取值
取值
状态
0
发送文字信息
1
接收到文字信息
2
发送语音聊天请求
3
应答语音聊天请求
4
发送传输文件请求
5
应答传输文件请求
6
请求添加好友
7
接收到添加好友请求
(2)对方IP和对方用户名:
是指主程序通过这两部分将通信对象传递给功能模块,然后此功能模块可直接跟对方进行通信,不必经过本方的主程序。
对方IP和对方用户名可通过两种途径得到:
一种是主动与对方通信,则主程序从好友列表中获取IP地址和用户名;另一种是对方请求通信,发送的请求信息中包含有对方IP地址和用户名,则主程序从对方传递的信息中解析出IP地址和用户名。
(3)数据:
这是一个可选项。
这个部分只在进行文字聊天的时候存储聊天内容,在进行其他操作的时候则省略。
1.3主程序与三个模块之间交流过程
主机A与主机B是通信双方,网络设置如图1.2所示。
图1.2网络设置
(1)添加好友。
此功能在主程序中实现,因此不需要中转文件。
图1.3描述了主机A将主机B添加为好友的全部过程。
图1.3添加好友的过程
由以上过程可以看出,主机A向主机B提出请求,成功后,主机A存储了主机B的信息,但是主机B并没有主机A的信息,因此还要主机B向主机A提出申请才能得到主机A的信息。
所以图1-3所示的添加好友的过程序要进行两次。
双方成为好友后,就可以开始进行其他的操作了。
(2)文字聊天。
中转文件为“msg.txt”。
图1.4描述了主机A向主机B发送文字消息“aaa”的完整过程。
文字聊天过程中,聊天内容的发送由Talk.exe进行发送,但是聊天内容的接收由主程序进行接收,因此Talk.exe在实现时只需确定发送信息的端口,不需要接收信息的端口。
(3)传送文件。
中转文件为“file.txt”。
图1.5描述了主机A向主机B请求发送文件的过程。
从图1.5可以看到,在进行文件传输时,请求和回复请求阶段的信息传递是在两端的主程序之间进行,同意发送文件后,则由两端的文件传输模块实现文件的发送和接收,不需要再经过主程序。
图1.4主机A向主机B发送文字消息的过程
图1.5主机A向主机B请求发送文件的过程
(4)语音聊天。
中转文件为“voice.txt”。
图1.6描述了主机A向主机B请求语音聊天的过程。
图1.6主机A向主机B请求语音聊天的过程
同文件传输一样,进行语音聊天时也只是在请求和回复请求阶段使用主程序进行通信,然后交由两端的语音聊天程序进行通信。
上面的例子描述了软件各个功能的工作原理与流程。
主程序间需要通信,各个模块之间也需要通信,这就需要使用不同的端口,并且根据功能的不同,所使用的网络协议也有可能不同,为了方便理解,在这里规定各工程的通信协议及使用端口,如表1.2所示。
表1.2各工程的通信协议及使用端口
工程名
实现功能
使用协议
接收信息端口
发送信息端口
MainBord
主界面
Tcp/IP协议
8001
8001
Speak
语音聊天
UDP协议
5171
5172
Talk
对话
Tcp/IP协议
8001
FileTransfer
传送文件
Tcp/IP协议
800
800
第2章文字聊天模块的分析与设计
在前面已介绍过文字聊天程序一般实现原理与过程,使用CSocket类进行编程,Send函数发送数据,Receive函数接收数据。
此程序与其他程