版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6/6即时通讯系统的设计与实现哈尔滨师范大学
学年论文
题目即时通讯系统的设计与实现
学生崔振伟
指导教师张飚
年级2010级
专业电子信息科学与技术
系别光电工程系
学院物理与电子工程学院
哈尔滨师范大学
2013年5月
论文提要
目前信息的准确、快速、安全的传递在社会中越来越重要。无论是国与国之间,企业与企业之间还是企业内部这间的信息交流都要变得非常重要。规模较大的企业,都会建立一套软,硬件结合的通信系统,从而保证企业信息能够及时,准确、安全地传递到目的地。
本系统为企业内部即时通讯系统,是鉴与员工之间所处地点不同,员工之间交流的重要性的情况下,针对公司不适合让员工连接外网的实际情况下设计构思出来的,该系统设计完成后可用于企业员工之间的即时通讯工作,同时本系统具有很强的可扩展性,加以适当扩充,可以适用于各个不同的公司。
即时通讯系统的设计与实现
崔振伟
进行交流。
二、论文的主要研究内容
本论文主要实现了基于MFC的局域网即时通讯系统。它可以为使用者提供丰富的功能,如行文字聊天、语音对话,查看联系人是否联机等功能,为使用者节省了大量的时间,提高了使用者工作的效率。我们在论文中按照软件工程的流程分配各个章节,系统在实现过程中,严格按照软件工程的流程进行,尽最大可能保证了整个系统的质量。软件工程在大型软件开发过程的应用,对于保证开发质量以及开发过程的顺利进行具有重要意义,高校计算机相关专业也都作为专业核心课教授。但是学生对软件工程的认识,往往只停在理论阶段,在实际开发中根本不去考虑如何利用软件工程知识去保证自已的开发质量,即使有运用的意识也不知道具体应如何操作。本论文提供了这样一个将软件工程知识运用到实际开发过程中的一个成功范例。
本论文清楚详细的描述了基于对话框的应用程序开发技术以及进行网络通讯所使用到的一些细节,提也了MFC中各个控件的使用技巧,和换肤的一些技术细节。同时本论文还深入探讨了WINDOWS平台下的线程机制,以及线程的使用方法和注意事项。
同时该论文还专门对系统中用到的关键算法作了相关探讨,主要算法涉及网络和线程的相关操作,各种数据结构之间的相互转换等等。可以作为网络通讯的参考。本章主要对本即时通讯系统系统开发过程中使用到的关键技术进行分析,包括开发本即时通讯系统所使用的MFC特点及优点、网络编程原理,线程技术和统一建模技术,作为本即时通讯系统开发所使用的主要技术。
三、关键技术分析
(一)开发本即时通讯系统所使用的MFC作为一个Windows编程类库,它包含了200多个类,封装了Windows的大部分编程对象以及与它们有关的操作编程时我们就可以利用类的可重用性和可扩充性,大大降低Windows应用程序设计的难度和工作量。
一个典型的MFC应用程序,一般需要:
(1)C,CPP源程序文件:源程序文件包含了应用程序的数据、类、功能逻辑模块的定义。
(2)H,HPP头文件:头文件包含了CPP,C源文件中定义的数据,类的声明。
(3)资源文件:包含了应用程序所使用的全部资源定义,通常以RC为后缀名,包括:string资源,快捷键列表、Dialog、menu、bitmap、mouse、toolbar、icon、版本信息和用户自的资源等。
这三者关系如图1-1所示。
图1-1MFC程序创建过程
一个MFC的程序执行过程如下
(1)首先构造全局对象CWinApp派生类对象;
(2)运行由应用程序框架提供的WinMain函数(AfxWinMain);
(3)在WinMain中,通过AfxGetApp获得全局对象的指针pApp,调用全局函数AfxWinInit,为CWinApp的成员变量m_hInstance,,m_lpCmdLine,m_nCmdShow等赋初值;
(4)然后调用pApp->InitApplication,这是CWinApp的虚函数,一般不需要改写;
(5)调用pApp->InitInstance,每个程序都必需改写这个函数,进行应用程序的初始化;
(6)在InitInstance函数中,先有new构造一个CFrameWnd派生类对象,其构造函数又调用Create,创建主窗口,MFC依此自动为应用程序注册窗口类;然后调用ShowWindow显示窗口,调用UpdateWindow,发出WM_PAINT消息;
(7)回到WinMain中,调用pApp->Run,进入消息循环,通过API函数GetMessage获得消息,TranslateMessage处理消息,DispatchMessage派送消息到CWnd::DefWindowProc,DefWindowProc按照消息映射表的定义将消息分发到各相应消息处理函数;如消息队列为空,则Run调用CWinApp::OnIdle进行空闲处理,重载OnIdle可以去处理后台程序(低优先级);;
(8)若用户选择菜单File/Close,则程序收到WM_COLSE消息,调用::DestroyWindow发出WM_DESTROY消息,然后调PostQuitMessage,发出WM_QUIT消息,此时Run会结束其内部消息循环,调用ExitInstance;
(9)最后,返回WinMain,执行WinTerm,结束程序运行;
(二)多线程原理
Windows操作系统是一个单用户多任务的操作系统,其多任务主要体现在两个方面,着先在硬件上为任务之间切换提供了很好的条件,其次是它实现了多人任务的隔离,哪么多任务是如何实现的呢,就是通过进程来实现的,因此Windows操作系统在同一时间段内就会有多个活动的进程也就是应用程序的实例,即进程只是负责为应用程序向操作系统申请各种应用程序所需的各种资源,但是申请资源后还要让应用程序能够进行运行,此时就会涉及到CPU,在操作系统占用CPU时间片进行执行程序也即是执行指令的并不是进程,而是线程。线程是进程执行代码的独立实体,没有线程,进程中的程序代码是不可能执行的,操作系统会在创建进程后立即创建一个线程来执行进程中的代码,而此线程称之为进程的主线程。
线程的同步方式:在同一个应用程序中要同时实现多个功能,这就会涉及到线程的同问题,在Winodws操作系统常用的同步的方式有临界区对象,互锁函数,事件内核对象(三)网络编程TCP/IP协议簇原理
为了让我们在日常工作中让两台不同型号操作系统也不相同的操系统之间能够进行通讯,人类开发了TCP/IP协议簇,把TCP/IP协议簇分为四层,应用层,传输层,网络层,链路层,应用层处理特的应用程序细节,传输层为两台不同型号的操作系统也不同的操作系统提供端到端的通讯服务;网络层为数据选择传送的路由进行路由选择;链路层用来处理与物理接口相关的细节。
(四)WindouwsSocket原理
加利福尼亚大学伯克利分校为UNIX系统开发出了伯克利套接字(BSDsocket),在此基础上扩展形成了windows套接字。它是一套开放的、支持多协议的Windows下的网络编程接口,它规范了Internet协议族(IPS,一般为TCP/IP)的API使用.WindowsSocket统一了操作,简化了编程,使两个进程之间实现连接、通信。
应用程序在使用WindowsSocketsDll之前必须先调用启动函数WSAStartup()。该函数的功能有两个:一是由应用程序指定所要求的WindowsSocketsDll版本;二是获得系统WindowsSocketsDll的一些细节,调用终止函数WSACleanup()来终止WindowsSocketsDLL。
四、系统整体设计
首先用户登陆后进入主界面对话框中,在主界面对话框中用户开始主要由五种操作聊天操作与管理,文件传输的管理,语音聊天的管理,窗口抖动的管理,状态的更改。
在进行聊天操作时会涉及到字体的设置管理和如果想查看以胶都说过什么话的聊天记录管理功能;同时如果聊天结束点击退出程序会结束程序的运行。
在进行文件传输时,可以同时设置聊天字体大小及查看聊天记录,如果有需要也可以退出程序的执行。
在进行语音聊天时,同时可以进行聊天与发送文件和窗口抖动操作,在需要时会关闭整个程序。在窗口抖动后可以根据需要关闭整个程序。在状态更改后,如果状态更改为离
线状态时会退出整个程序.
整个系统结构我们可以分成七大块网内用户状态树,聊天框,聊天框工具条,文件传输面板,语音聊天面板,聊天记录面板,本机信息这七个模块。网内用户状态树应当可以显示本机IP,本机计算机名,当前用户登陆状态,并能打开聊天框,可以发文件,进行语音聊天功能。当从网内用户状态树进入到聊天框后,聊天框应拥有聊天工具条,信息显示框,信息输入框,文件传输面板,语音面板,聊天记录面板,发送按纽功以,退出按纽功能。聊天工具条中应包括字体设置功能,文件传输功能,语音聊天功能,抖动功能,聊天记录功能。如下图1-2所示:
图1-2系统组织结构图
五、关键技术实现
(一)关键数据结构
在即时通讯系统中涉及到的数据结构如下:
(1)结构体_SOCKET_FILE_INFO用来保存文件信息结构体,其定义如下:
typedefstruct_SOCKET_FILE_INFO
{
charszFileTitle[128];
BYTEdwFileAttributes;
CTimeftCreationTime;
CTimeftLastAccessTime;
CTimeftLastWriteTime;
ULONGLONGnFileSize;
charszFilePath[256];
}SOCKET_FILE_INFO,*PSOCKET_FILE_INFO
其中szFileTitle[128]用来表示文件的标题名,dwFileAttributes表示文件的属性,ftCreationTime表示文件的创建时间,ftLastAccessTime表示文件的最后访问时间,ftLastWriteTime表示文件的最后修改时间,nFileSize表示文件大小。
(2)结构体FILE_MSG_BUFFE用来存放发送文件信息的结构体,其定义如下:
structFILE_MSG_BUFFE
{
uint64serialNum;
charsendIp[16];
charrecvIp[16];
BOOLisDispose;
SOCKET_FILE_INFOvFileInfo;
FILE_MSG_BUFFE()
{
serialNum=0;
strcpy(sendIp,"");
strcpy(recvIp,"");
isDispose=FALSE;
}
};
其中serialNum表示流水号,sendIp[16]表示发送者IP,recvIp[16]表示接收者IP,isDispose表示是否已经处理,vFileInfo表示文件信息。
(3)结构体_FILE_INFO_HEAD用来保存文件信息头信息,其定义如下:
typedefstruct_FILE_INFO_HEAD
{
charmd5[33];
uint64serialNum;
charstrSendIp[16];;
charstrRecvIp[16];
ULONGLONGnUnitLen;
intnThisId;
intnCound;
SOCKET_FILE_INFOfileInfo;
}FILE_INFO_HEAD,*PFILE_INFO_HEAD;
其中md5[33]表示MD5指纹识别,serialNum表示流水号,strSendIp[16]表示发送者IP,strRecvIp[16]表示接收者IP,nUnitLen表示单位长度,nThisId表示当前ID,nCound表示文件次数,fileInfo表示文件信息。
(4)结构体CHAT_DLG_INFO用来定义聊天对话框信息,其定义如下:
structCHAT_DLG_INFO
{
charstrIp[16];
CWnd*pDlg;
};
其中strIp[16]表法IP地址,pDlg表示聊天框指针
(5)结构体CHAT_MSG_BUFFE_CONTENT聊天内容信息,其定义如下:
structCHAT_MSG_BUFFE_CONTENT
{
intnOrder;
charstrContent[1024*2+1];
};
其中nOrder表示序号,strContent[1024*2+1]表示发送信息内容
(6)结构体CHAT_MSG_BUFFE用来对网络中用户信息进行统计,其定义如下:
structCHAT_MSG_BUFFE
{
uint64serialNum;
intnCount;
intnRecvSum;
charsendIp[16];
charsendName[256];
charrecvIp[16];
SYSTEMTIMEsendTime;
BOOLisDispose;
vectorvBuffe;
};
其中serialNum表示流水号,nCount表示数量,nRecvSum表示接受总和,sendIp[16]表示发送者IP,sendName[256]表示发送者姓名,recvIp[16]表示接收者IP,sendTime表示发送时间,isDispose表示是否已经处vectorvBuffe表示信息内容。
(7)结构体FILE_INFO_HOLDER保存发送文件对话框信息,其定义如下:
structFILE_INFO_HOLDER
{
CWnd*pDlg;
CRectdlgRc;
uint64serialNum;
UINTnType;
SOCKET_FILE_INFOfileInfo;
B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论