优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

VC003局域网即时聊天程序的设计与实现C++

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

第三章 总体设计

经过了需求分析阶段的工作,系统必须“做什么”的问题已经清楚了,现在是决定“怎么做”的时候了。总体设计的基本目的就是回答“系统应该如何实现?”这个问题。在这里要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
在需求分析里也已经说明了对于局域网即时聊天程序的设计过程主要由在线朋友文本聊天功能和语音聊天功能。由于语言聊天是发送声音的一端将硬件接口采集到的声音数据通过Socket发送到另外一端,另外一端根据得到的声音数据调用硬件接口播放声音,所以其核心是声音数据的采集、播放和声音数据的网络传输。
一、 层次图 【买计算机毕业论文就到计算机毕业论文网】
根据本次设计需要,把整个即时聊天系统分成文本聊天部分和语音聊天部分。
文本聊天部分主要由文字输入及发送、聊天记录保存、接收文字信息等三个模块分成。语音聊天部分则由四个模块分成。即通信模块、声源采集模块、声音数据传输、音频再生模块。 [来源:http://think58.com]



think58好,好think58 [资料来源:http://THINK58.com]

本文来自think58 [来源:http://think58.com]

copyright think58

[资料来源:http://think58.com]

[资料来源:http://THINK58.com]

[来源:http://think58.com]


[图2] 本次设计的层次图 think58 [资料来源:http://www.THINK58.com]

二、 各模块功能及相互关系
由于设计本身着重于语音聊天部分,所以在这里就针对这部分进行说明。
1. 通信模块:主要功能是接收并连接服务器端和客户端接口,负责作为服务器 时的网络端口监听,并且为客户端接口的发送数据和接收数据进行消息处理。为文本发送与接收及语音交互奠定了基础。
2. 声源采集模块:主要功能为负责采集客户端发出的声源,把采集到的声源放到缓冲区里,为语音传送建立了基础。
3. 声音数据传输模块:主要功能是把采集到的声源进行保存及传送,一旦传送到就把内存置空,返还到录音设备进行录音,它为音频再生模块提供语音数据。
4. 音频再生模块;主要功能是接收声音数据传输模块传送过来的语音数据进行放音并且释放内存以便于保存采集到的声源。这模块为接收方的客户端提供了音频数据,使语音交互顺利进行。
5. 至于文字输入模块及输出模块是为通行模块提供了文本数据,并通过通信模块进行两个客户端之间的文本交互。 内容来自think58 [来源:http://think58.com]

在这里特别要注意的是录音和播放的程序处理中要特别注意分配内存的大小和数量,一定要保证在录音过程中录音设备至少有一块内存可供录音,使得循环能够顺利进行。

think58 [资料来源:www.THINK58.com]

[来源:http://www.think58.com]

think58.com

[资料来源:http://www.THINK58.com]

think58.com

[资料来源:http://THINK58.com]

[资料来源:http://THINK58.com]

[资料来源:THINK58.com]

think58

[资料来源:www.THINK58.com]

think58

[来源:http://think58.com]

[资料来源:http://THINK58.com]

内容来自think58 [来源:http://www.think58.com]

think58好,好think58

[版权所有:http://think58.com]

think58好,好think58

[资料来源:http://www.THINK58.com]

think58.com

[资料来源:http://THINK58.com]

[资料来源:www.THINK58.com]

think58好,好think58 [版权所有:http://think58.com]

本文来自think58

[来源:http://www.think58.com]

think58

[资料来源:THINK58.com]

[来源:http://www.think58.com]

copyright think58

[版权所有:http://think58.com]

[来源:http://www.think58.com]

think58好,好think58

[资料来源:THINK58.com]

第四章 详细设计

copyright think58 [来源:http://www.think58.com]

[资料来源:http://www.THINK58.com]

详细设计阶段的根本任务是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
系统运用共享数据结构技术及多线程技术,通过I/O端口与用户端连接,实现了数据转发功能。首先,程序初始化网络,接着客户端连接到服务器时,创建接收线程和发送线程,这样就可以实现数据转发。最后,当用户断开连接时,服务器关闭与他的连接,并结束相应的线程。
在开始进行聊天通信前得先把系统初始化,系统的初始化过程为: think58

[资料来源:http://www.THINK58.com]



[来源:http://think58.com]


N


Y


[图3] 系统初始化流程图 think58

[资料来源:http://THINK58.com]

当系统完成初始化过程以后就可以进行具体聊天通信了(即文本交互和语音交互)。
一、各个模块的具体流程
当用户登陆到系统后会出现一个聊天窗口,建立服务器端和客户端连接以后就可以开始进行文本聊天了,用户把聊天内容输入到聊天信息输入框以后发送聊天内容,这时系统会自动把聊天内容保存起来并显示在聊天记录窗口中,聊天记录包括发送和接收的聊天信息。
以下则是语音聊天的几个模块具体流程。
(一) 通信模块
进行聊天需要建立服务器端Socket和客户端Socket,并且要连接上,这样才能进行信息的传送,通信模块主要定义的就是这部分Socket建立和连接。 think58.com [资料来源:http://think58.com]

think58好,好think58 [资料来源:http://THINK58.com]

[资料来源:http://www.THINK58.com]

内容来自think58 [资料来源:www.THINK58.com]

[资料来源:www.THINK58.com]

[来源:http://www.think58.com]

N [资料来源:THINK58.com]

Y [版权所有:http://think58.com]

think58.com

[资料来源:http://www.THINK58.com]

N
Y 本文来自think58 [资料来源:THINK58.com]

think58.com

[资料来源:www.THINK58.com]

本文来自think58 [来源:http://www.think58.com]

copyright think58 [资料来源:http://www.THINK58.com]

[资料来源:http://THINK58.com]

[图4] 服务器端的Socket建立和连接 [图5] 客户端的Socket建立和连接 think58.com [资料来源:http://think58.com]

(二) 声源采集模块
用户按语音聊天开始键以后,就开始音频聊天,要进行语音数据传送,就得有声源采集模块。声源采集模块的主要流程为采集到声源以后把语音数据放到缓冲区里。
(三) 声音数据传输模块
声源采集模块放到缓冲区里的语音数据经过这个模块以后到达音频再生模块。在这里采集到的声源数据并不能保证完全被保存并进行传送,因为可能会出现声源数据量如果多于录音内存量的话就不能进行保存,而要等待经过音频再生模块并释放出来的内存,然后再进行保存。 copyright think58

[资料来源:http://www.THINK58.com]

[资料来源:http://THINK58.com]

[资料来源:THINK58.com]

think58.com [来源:http://think58.com]

[资料来源:http://THINK58.com]


N think58好,好think58

[资料来源:http://THINK58.com]

Y think58.com

[来源:http://think58.com]


N

think58.com [来源:http://think58.com]

[来源:http://www.think58.com]

Y 内容来自think58 [来源:http://www.think58.com]


[图6] 声音数据传输模块流程图 think58好,好think58

[资料来源:http://think58.com]

(四) 音频再生模块
经过处理过的语音数据通过音频处理模块传送到这个模块,当接收到语音数据以后它将经过录音的语音数据进行放音,然后把内存释放出来以备保存其他缓冲区里保存的声源信息。
为什么要释放内存呢?那是因为声音数据具有很强的前后相关性,数据量大、实时性强,又由于声音是连续的,通常把其称之为连续型时基媒体类型。当缓冲区接收到声源以后要是内存不够的话就不能及时把全部语音数据保存并传送,所以经过这个模块以后就得把录音内存释放掉,好让上一个模块及时得到完成。

copyright think58 [版权所有:http://think58.com]

[资料来源:http://THINK58.com]

[资料来源:THINK58.com]

内容来自think58

[资料来源:www.THINK58.com]

[资料来源:THINK58.com]

[资料来源:http://www.THINK58.com]


think58

[资料来源:THINK58.com]

think58

[来源:http://www.think58.com]

[资料来源:http://www.THINK58.com]

copyright think58

[资料来源:http://THINK58.com]

[来源:http://think58.com]

think58好,好think58 [来源:http://think58.com]

think58好,好think58 [资料来源:http://think58.com]

[资料来源:THINK58.com]

think58好,好think58

[资料来源:http://www.THINK58.com]

think58.com [来源:http://think58.com]

[来源:http://think58.com]


[图7] 音频再生模块流程图 think58.com [来源:http://think58.com]

经过这个模块才能算是真正完成了语音聊天了,如果想结束聊天只要断开与对方的连接即可。 内容来自think58

[版权所有:http://think58.com]

[资料来源:http://THINK58.com]

think58

[资料来源:http://think58.com]

think58

[来源:http://www.think58.com]

[版权所有:http://think58.com]

think58好,好think58

[资料来源:http://www.THINK58.com]

think58好,好think58

[资料来源:THINK58.com]

本文来自think58

[资料来源:THINK58.com]

[来源:http://think58.com]

copyright think58

[资料来源:http://www.THINK58.com]

内容来自think58

[资料来源:http://think58.com]

[资料来源:www.THINK58.com]

[资料来源:http://think58.com]

copyright think58

[资料来源:THINK58.com]

think58.com [资料来源:http://www.THINK58.com]



第五章 关键代码分析 本文来自think58 [资料来源:www.THINK58.com]

经过总体分析和详细分析,整个设计有了大概的框图之后就可以进行编程了。编程的质量直接影响到运行结果,所以要做到远程序代码的逻辑简明清晰、易读易懂是程序好坏的一个重要标准,其中适当的注解是非常重要的。
本次设计的特点是一个用户端既是服务器端也是客户端,所以针对一个用户端作为服务器端或者作为客户端的时候的代码进行分析。
一、 服务器端对客户端Socket的处理代码
void CChatDlg::ProcessPendingAccept()
{
CclientSocket* pSocket=new CclientSocket();
If (m_pListenSocket.Accept(*pSocket))
{
Cmessg msg;
Msg.m_strText=“一个游客进入聊天室了”;
M_sShowString+=“一个游客进入聊天室了\n”;
POSITION pos;
For(pos=m_connectionList.GetHeadPosition();pos!=NULL;)
{
CclientSocket * t=(CclientSocket *)m_connectionList.GetNext(pos);
t->SendMessage(&msg);
}
pSocket->Init(this);
m_connectionList.AddTail(pSocket);
}
else
delete pSocket;
}
think58.com

[资料来源:www.THINK58.com]