局域网即时聊天程序的设计及实现.docx

上传人:b****0 文档编号:17113787 上传时间:2023-07-22 格式:DOCX 页数:27 大小:138.69KB
下载 相关 举报
局域网即时聊天程序的设计及实现.docx_第1页
第1页 / 共27页
局域网即时聊天程序的设计及实现.docx_第2页
第2页 / 共27页
局域网即时聊天程序的设计及实现.docx_第3页
第3页 / 共27页
局域网即时聊天程序的设计及实现.docx_第4页
第4页 / 共27页
局域网即时聊天程序的设计及实现.docx_第5页
第5页 / 共27页
局域网即时聊天程序的设计及实现.docx_第6页
第6页 / 共27页
局域网即时聊天程序的设计及实现.docx_第7页
第7页 / 共27页
局域网即时聊天程序的设计及实现.docx_第8页
第8页 / 共27页
局域网即时聊天程序的设计及实现.docx_第9页
第9页 / 共27页
局域网即时聊天程序的设计及实现.docx_第10页
第10页 / 共27页
局域网即时聊天程序的设计及实现.docx_第11页
第11页 / 共27页
局域网即时聊天程序的设计及实现.docx_第12页
第12页 / 共27页
局域网即时聊天程序的设计及实现.docx_第13页
第13页 / 共27页
局域网即时聊天程序的设计及实现.docx_第14页
第14页 / 共27页
局域网即时聊天程序的设计及实现.docx_第15页
第15页 / 共27页
局域网即时聊天程序的设计及实现.docx_第16页
第16页 / 共27页
局域网即时聊天程序的设计及实现.docx_第17页
第17页 / 共27页
局域网即时聊天程序的设计及实现.docx_第18页
第18页 / 共27页
局域网即时聊天程序的设计及实现.docx_第19页
第19页 / 共27页
局域网即时聊天程序的设计及实现.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

局域网即时聊天程序的设计及实现.docx

《局域网即时聊天程序的设计及实现.docx》由会员分享,可在线阅读,更多相关《局域网即时聊天程序的设计及实现.docx(27页珍藏版)》请在冰点文库上搜索。

局域网即时聊天程序的设计及实现.docx

局域网即时聊天程序的设计及实现

 

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

 

作者

院系

专业

年级

学号

指导教师

答辩日期

成绩

 

摘要

局域网即时聊天通过进行文本聊天和语音聊天来实现彼此沟通、交流信息。

本次局域网即时聊天程序设计主要用了VisualC++编程环境,实现了在LAN中在线用户的文本、语音交互。

在设计里涉及到了网络通信基本原理和Socket编程及语音处理API技术。

由于程序是在TCP/IP环境下运行,所以分服务器端和客户端。

服务器端和客户端是通过建立Socket链接来实现聊天功能。

本次设计主要着重于语音聊天部分,在本次论文里主要以语音聊天的流程和各模块之间的关系及Socket处理为主说明。

关键词:

VisualC++编程环境网络通信基本原理Socket编程语言处理API

 

摘要......................................................................................2

英文摘要................................................................................3

第一章:

绪论..........................................................................6

一、背景介绍.....................................................................6

二、相关知识.........................................................................6

第二章:

需求分析.....................................................................9

一、可行性分析....................................................................9

二、需求分析............................................................…….9

(一)系统功能要求......................................................9

(二)系统性能要求......................................................10

(三)系统运行要求......................................................10

第三章:

总体设计.....................................................................11

一、层次图..............................................................…...11

二、各模块的功能及相互关系............................…………...11

第四章:

详细设计.................................................................…13

一、各模块具体流程......................................................….13

(一)通信模块................................................................14

(二)声源采集模块...................................……………….14

(三)语音数据传输模块................................………………14

(四)音频再生模块...........................................…………..15

第五章:

代码介绍.....................................................................17

第六章:

测试.......................................................................…23

一、模块测试......................................................…………23

二、功能测试............................................................……..23

三、测试结果......................................................…………...24

第七章结论................................................................................25

参考文献............................................................................….26

 

第一章绪论

一、背景介绍

随着网路的出现,它在人们的生活中所扮演的角色越来越多,也越来越重要,人们可以通过这个空间进行网络聊天,实现彼此沟通,交换信息,甚至网络聊天工具在部分人的生活中由于传统的电话通讯手段同等重要的趋势。

尤其现在的学校更是如此,单单在课堂里或校园里的交流是远远不够的,要是学校有聊天系统,那么学生之间或是师生之间的信息交流会更加频繁、更方便,有利于建立友好的关系网。

这次设计不仅能实现文本聊天,还能进行语音聊天,语音聊天是一种最先进的聊天方式,您只要拥有一只麦克风就完全能够加入进来。

你可以无所顾虑无所拘束地进行聊天,免了文字的虚幻。

本次局域网即时聊天程序设计主要用了VisualC++编程环境,设计里还涉及到了网络通信基本原理和Socket编程及语音处理API技术。

由于程序是在TCP/IP环境下运行,所以分服务器端和客户端。

服务器端和客户端是通过建立Socket链接来实现聊天功能。

本次设计主要着重于语音聊天部分,在本次论文里主要以语音聊天的流程和各模块之间的关系及Socket处理为主说明。

二、相关知识

(一)VisualC++简介

VisualC++是一个功能强大的可视化应用程序开发工具,用于Windows环境下32位的应用程序的开发,是计算机界公认的最优秀的应用开发工具之一。

在提供可视化的编程方式的同时,VisualC++也适用于编写直接对系统底层操作的程序,生成代码的质量也优于其它的开发工具。

在VisualC++环境下,利用Microsoft的基本类库MFC(MicrosoftFoundationClassLibrary),可以使用完全的面向对象的方法来进行Windows95/98/NT应用程序的开发,使得Windows程序员从大量的复杂劳动中解救出来,体会到真正的程序语言的强大功能和良好的灵活性。

VisualC++编程是一个面向对象的程序设计方法。

同传统的结构化程序设计方法相比,它缩短软件的研制时间,提高软件的开发效率,使程序员可以更好地理解和管理庞大而复杂的程序。

面向对象的程序设计吸取了结构化程序设计的精华,它利用了人们根据对事物分类和抽象的倾向,引入了类和对象的概念,具有封装性(数据抽象)、继承和多态的特点。

与结构化程序设计不同的是,面向对象程序设计是用类抽象代表现实的实体,用类之间的继承关系表示程序设计的抽象过程。

函数只是对数据的操作,没有数据的概念,而类是数据和数据操作的集合,由于面向对象的程序设计方法非常近现实,所以越来越流行。

VisualC++中集成了大量的最新技术,如ActiveX、COM等技术,程序开发人员可以紧紧地把握住软件开发技术发展的方向,开发出功能强大的应用程序。

VisualC++还提供了丰富的技术资源,MSDN(MicrosoftDevelopNetwork)提供了强大的联机帮助支持,同时还可以通过访问Microsoft的网上站点来获得最新的技术文档。

(二)Socket及WindowSocketAPI简介

套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。

Socket在Windows以句柄的形式被创建。

使用Socket进行网络通信必须包含下面的几种信息:

双方认可的协议,本地主机的IP地址,本地进程的协议端口,对方主机的IP地址,对方进程的协议端口。

Socket可分为:

1]数据报套接字(DatagramSockets)——对于在TCP/IP上实现的WinSock,数据报套接字使用用户数据报协议(UDP)。

数据报套接字提供了一种不可靠的、非连接的数据包通信方式。

2]流式套接字(StreamSockets)——流式套接字使用传输控制协议(TCP)。

流式套接字可以将数据按顺序无重复地发送到目的地,它提供的是一种可靠的、面向连接的数据传输方式。

不管是对单个的数据报,还是对数据包,流式套接字都提供了一种流式数据传输。

VC++对网络编程的支持有socket支持,Winlnet支持,MAPI和ISAPI支持等。

其中WindowsSocketsAPI是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。

最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的BerkeleySocket接口(套接字)。

在桌面操作系统进入Windows时代后,仍然继承了Socket方法。

从表一可以看出,主要的WinSockAPI函数有哪些。

[表1]WinSockAPI函数

函数

功能

WSAStartup()

连结应用程序与WindowsSocketsDLL的第一个函数

WSACleanup()

结束WindowsSocketsDLL的使用

socket()

建立Socket

closesocket()

关闭某一Socket

bind()

将一本地地址与一个SOCKET描述字连接在一起

listen()

设定Socket为监听状态,准备被连接

accept()

接受某一Socket的连接要求,以完成面向连接的客户端Socket的连接请求。

connect()

要求连接某一Socket到指定的网络上服务端

recv()

从面向连接的Socket接收信息

send()

使用面向连接的Socket发送信息

WSAAsyncSelect()

要求某一Socket有事件(event)发生时通知使用者

(三)MFCSocket编程技术

MFC是对API的封装,MFC针对WinSockAPI封装了两个类:

CAsyncSocket和Csocket。

因此,使用这两个类进行Socket网络程序的编写会比使用API方便一些。

MFC中Socket相关类的继承关系如下图:

 

[图1]MFC中Socket相关类的继承关系

CAsyncSocket对WinSockAPI进行了较低程度的封装,缺省情况下建立的Socket是异步操作方式,即非阻塞的,因此一些阻塞操作,需要自己动手完成。

另外,由于它对API的封装程度不高,以前在WinSockAPI中需要自己完成的工作(比如:

字节顺序的转换),仍然需要自己完成。

当然有许多程序员喜欢使用该类甚至WinSockAPI,原因是这些方法具有很大的灵活性,给程序员以较大的发挥空间。

为了给程序员提供更方便的接口以自动处理网络通信中的一些任务,MFC在CAsycnSocket类的基础上派生了CSocket类,它提供了比CAsyncSocket更高层的WinSockAPI接口。

CSocket的网络操作是同步方式,即阻塞式的。

CSocket建立的Socket不是阻塞的,而是对非阻塞的Socket进行处理后实现的阻塞操作。

在阻塞任务执行过程中,Windows线程的消息循环仍然有效,也就是说CSocket类的阻塞操作不影响Windows的消息循环。

 

第二章需求分析

在这里先说明设计的需求分析之前分析一下设计的可行性。

可行性分析的目的是为了用最小代价在最短时间内确定问题是否能够解决。

可行性分析的实质就是要进行一次压缩简化系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。

一、可行性分析

1)技术可行性:

本系统以VisualC++为主要编程环境,再结合网络通信基本原理和Socket编程及语音处理API技术,技术成熟,可行。

2)经济可行性:

这个系统开发开发成较低,经济效益会远大于开发成本,可行。

3)操作可行性:

系统硬件为PC机,软件为WindowsNT/2000,而且编程环境VisualC++为专业程序员使用工具,比较易于使用,可行。

二、需求分析

需求分析的基本任务是准确的回答“系统必须做什么?

”这个问题。

这一阶段是对系统认识最为全面、准确、清晰、得体的一个比较关键的时期。

而且需求分析的结果是系统开发的基础,关系到工程的成败和软件产品的质量。

因此,必须用行之有效的方法对软件需求进行严格的审查验证,为下一步的总体设计打好基础。

(一)系统的功能要求

在线朋友指的是在所有使用本系统在局域网上进行信息传递的用户。

局域网中在线用户之间的聊天包括文本聊天及语音聊天。

文本聊天就是在线双方互相传递文本信息的功能,而语音聊天就是指在线双方互相传递语音信息的功能。

下面是文本聊天部分所要完成的功能。

1)在这个系统中只要在线就可以和所有使用此系统的已经在线的朋友进行聊天,

并且为不同的朋友提供不同的聊天窗口,也就是说和10个在线人员聊天的话就得有10个聊天窗口打开。

2)与特定用户之间的聊天窗口中必须提供聊天信息的输入和聊天信息的显示功能。

3)要发送给对方的文字或字符的输入工作要在聊天窗口的输入框中完成。

4)当输入完聊天信息以后进行发送,当发送没有结束时,不能进行新的聊天内容的输入。

一般聊天内容一次不能超过500个字符。

5)聊天信息要显示在聊天窗口中,显示的内容包括:

发送信息、接收信息。

发送信息是指自己发送给对方的信息,即发送内容;接收信息是指来自对方的信息,这里显示接收到的内容。

以下是语音聊天部分要完成的功能。

6)在聊天窗口以建立的基础上,建立与服务器端的连接。

7)与对方连接以后开始语音聊天。

8)想结束语音聊天时,按结束键就能与对方断开连接,即结束语音聊天。

(二)系统性能要求

a..时间性能要求:

在实际应用中由于客户端的大量频繁的访问,服务器响应时间应该尽可能缩短,对于有特殊需求的应用,还要求达到实时响应。

b.存储性能要求:

根据应用中的实际情况配置适当容量的存储设备,特别是音频存储设备容量方面要适当得配置。

c.稳定性安全性要求:

要求软件尽可能的稳定,对于一般的应用系统,对安全

性要求不高,对于特殊的应用,还需要在安全性方面加以保证,所以要相应提高服务器端的配置。

(三)系统运行要求

服务器端:

用于接收/转发数据。

在本系统中服务器端本身也可以是客户端。

客户端:

多个PC机,通信用,作为文字及音频数据发生端。

 

第三章总体设计

经过了需求分析阶段的工作,系统必须“做什么”的问题已经清楚了,现在是决定“怎么做”的时候了。

总体设计的基本目的就是回答“系统应该如何实现?

”这个问题。

在这里要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。

在需求分析里也已经说明了对于局域网即时聊天程序的设计过程主要由在线朋友文本聊天功能和语音聊天功能。

由于语言聊天是发送声音的一端将硬件接口采集到的声音数据通过Socket发送到另外一端,另外一端根据得到的声音数据调用硬件接口播放声音,所以其核心是声音数据的采集、播放和声音数据的网络传输。

一、层次图

根据本次设计需要,把整个即时聊天系统分成文本聊天部分和语音聊天部分。

文本聊天部分主要由文字输入及发送、聊天记录保存、接收文字信息等三个模块分成。

语音聊天部分则由四个模块分成。

即通信模块、声源采集模块、声音数据传输、音频再生模块。

 

[图2]本次设计的层次图

二、各模块功能及相互关系

由于设计本身着重于语音聊天部分,所以在这里就针对这部分进行说明。

1.通信模块:

主要功能是接收并连接服务器端和客户端接口,负责作为服务器时的网络端口监听,并且为客户端接口的发送数据和接收数据进行消息处理。

为文本发送与接收及语音交互奠定了基础。

2.声源采集模块:

主要功能为负责采集客户端发出的声源,把采集到的声源放到缓冲区里,为语音传送建立了基础。

3.声音数据传输模块:

主要功能是把采集到的声源进行保存及传送,一旦传送到就把内存置空,返还到录音设备进行录音,它为音频再生模块提供语音数据。

4.音频再生模块;主要功能是接收声音数据传输模块传送过来的语音数据进行放音并且释放内存以便于保存采集到的声源。

这模块为接收方的客户端提供了音频数据,使语音交互顺利进行。

5.至于文字输入模块及输出模块是为通行模块提供了文本数据,并通过通信模块进行两个客户端之间的文本交互。

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

 

第四章详细设计

详细设计阶段的根本任务是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。

系统运用共享数据结构技术及多线程技术,通过I/O端口与用户端连接,实现了数据转发功能。

首先,程序初始化网络,接着客户端连接到服务器时,创建接收线程和发送线程,这样就可以实现数据转发。

最后,当用户断开连接时,服务器关闭与他的连接,并结束相应的线程。

在开始进行聊天通信前得先把系统初始化,系统的初始化过程为:

N

Y

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

当系统完成初始化过程以后就可以进行具体聊天通信了(即文本交互和语音交互)。

一、各个模块的具体流程

当用户登陆到系统后会出现一个聊天窗口,建立服务器端和客户端连接以后就可以开始进行文本聊天了,用户把聊天内容输入到聊天信息输入框以后发送聊天内容,这时系统会自动把聊天内容保存起来并显示在聊天记录窗口中,聊天记录包括发送和接收的聊天信息。

以下则是语音聊天的几个模块具体流程。

(一)通信模块

进行聊天需要建立服务器端Socket和客户端Socket,并且要连接上,这样才能进行信息的传送,通信模块主要定义的就是这部分Socket建立和连接。

N

Y

 

N

Y

 

 

[图4]服务器端的Socket建立和连接[图5]客户端的Socket建立和连接

(二)声源采集模块

用户按语音聊天开始键以后,就开始音频聊天,要进行语音数据传送,就得有声源采集模块。

声源采集模块的主要流程为采集到声源以后把语音数据放到缓冲区里。

(三)声音数据传输模块

声源采集模块放到缓冲区里的语音数据经过这个模块以后到达音频再生模块。

在这里采集到的声源数据并不能保证完全被保存并进行传送,因为可能会出现声源数据量如果多于录音内存量的话就不能进行保存,而要等待经过音频再生模块并释放出来的内存,然后再进行保存。

 

N

Y

N

Y

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

(四)音频再生模块

经过处理过的语音数据通过音频处理模块传送到这个模块,当接收到语音数据以后它将经过录音的语音数据进行放音,然后把内存释放出来以备保存其他缓冲区里保存的声源信息。

为什么要释放内存呢?

那是因为声音数据具有很强的前后相关性,数据量大、实时性强,又由于声音是连续的,通常把其称之为连续型时基媒体类型。

当缓冲区接收到声源以后要是内存不够的话就不能及时把全部语音数据保存并传送,所以经过这个模块以后就得把录音内存释放掉,好让上一个模块及时得到完成。

 

 

[图7]音频再生模块流程图

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

 

第五章关键代码分析

经过总体分析和详细分析,整个设计有了大概的框图之后就可以进行编程了。

编程的质量直接影响到运行结果,所以要做到远程序代码的逻辑简明清晰、易读易懂是程序好坏的一个重要标准,其中适当的注解是非常重要的。

本次设计的特点是一个用户端既是服务器端也是客户端,所以针对一个用户端作为服务器端或者作为客户端的时候的代码进行分析。

一、服务器端对客户端Socket的处理代码

voidCChatDlg:

:

ProcessPendingAccept()

{

CclientSocket*pSocket=newCclientSocket();

If(m_pListenSocket.Accept(*pSocket))

{

Cmessgmsg;

Msg.m_strText=“一个游客进入聊天室了”;

M_sShowString+=“一个游客进入聊天室了\n”;

POSITIONpos;

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

deletepSocket;

}

二、客户端连接到服务器端时消息处理代码

voidCChatDlg:

:

OnConnecserver()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

if(!

m_bInit)

{

BYTEf0,f1,f2,f3;

Cstringname;

((CIPAddressCtrl*)(GetDlgItem(IDC_IPADDRESS)))->GetAddress(f0,f1,f2,f3);

Cstringip;

Ip.Format(“%d.%d.%d.%d,f0,f1,f2,f3);

M_bClient=true;

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2