已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨师范大学学年论文题 目 即时通讯系统的设计与实现学 生 崔振伟指导教师 张飚年 级 2010级专 业 电子信息科学与技术系 别 光电工程系学 院 物理与电子工程学院哈尔滨师范大学2013年5月论文提要目前信息的准确、快速、安全的传递在社会中越来越重要。无论是国与国之间,企业与企业之间还是企业内部这间的信息交流都要变得非常重要。规模较大的企业,都会建立一套软,硬件结合的通信系统,从而保证企业信息能够及时,准确、安全地传递到目的地。本系统为企业内部即时通讯系统,是鉴与员工之间所处地点不同,员工之间交流的重要性的情况下,针对公司不适合让员工连接外网的实际情况下设计构思出来的,该系统设计完成后可用于企业员工之间的即时通讯工作,同时本系统具有很强的可扩展性,加以适当扩充,可以适用于各个不同的公司。即时通讯系统的设计与实现崔振伟摘 要:伴随着社会进入信息化时代,信息的准确、快速、安全的传递在社会中越来越重要。无论是国与国之间,企业与企业之间还是企业内部这间的信息交流都要变得非常重要。建立一套软,硬件结合的通信系统,从而保证企业信息能够及时,准确、安全地传递到目的地,能有效的解决员工之通讯交流障碍的问题,并防止员工跟外部联系。 因此为了适应企业的这一需求,特开发了适应企业局部通信的局域网即时通讯系统。论文介绍了在Microsoft可视化集成开发环境Visual studio 2008下开发一个基于对话框的局域网即时通讯系统的整个过程,系统采用基于对话框的MFC应用程序框架开发前台的操作界面,采用多线程和网络技术来实现成员这间的互联。实现了局域网内用户信息的采集与显示,最小化托盘,文字聊天,语音聊天,窗口抖动,字体设置,保存聊天记录的功能。在开发过程中,严格按照软件工程的整个流程进行。经过可行性分析,需求分析,概要设计,详细设计,编码,单元测试,集成测试等阶段,最终开发出了可以在单机上运行的试用版局域网即时通讯系统。 本系统的界面友好,操作简单方便加以适当的扩充完善就可正式的投入使用。关键词:软件工程 网络通信 线程一、即时通讯的意义与背景随着二十世纪八十年代到九十年代PC机的普及与深入,互联网的到来,解决PC机之间即时通讯的需求越来越强烈,一些通讯软件也应运而生,具有代表性的如下: QQ:由深圳市腾讯计算机系统有限公司1999年2月开发的一款基于Internet的即时通信(IM)软件。由1999年的2人到现在已经发展到上亿用户了,在线人数超过一亿。是目前使用最广泛的聊天软件之一。 MSN:由微软开发的1999年7月开发的即时通讯工具,4大顶级个人即时通讯工具之一。 Google Talk:是由Google 开发的的即时通讯方式,简称Gtalk。并宣称该软件“可以让你与朋友随时随地,在世界的任何一个角落自由的通话,发送即时讯息。并于2008年7月发布了iPhone版的Google Talk和 2011年4月在Android版本的Google Talk上启动语音和视频聊天功能。 AIM:是美国在线推出的即时通讯软件类似于MSN,等,在泛北美地区拥有最广泛用户数量(2009.07数据),超过排名第二和第三的Yahoo Messenger和MSN。支持iPhone,Android,iPad,MAC,Windows等平台。 国内的还有新浪UC,YY,百度hi,Lava快信等,国际上的Yahoo!Messenger等。这些软件有一个集中的特点是基于互联网并且需要服务器的支持。其工作方式如下:登陆即时通讯服务器,获取一个自动建立的以前的即时通讯对象列表,获取自已的在线状态,当好友列表的某个用户在任何时候登录上线并且想跟你进行联系时,即时系统会发一个消息提示你,然后你就可以与目标对象建立一个聊天对话通道进行各种消息如文字、语音、窗口等来进行交流。二、论文的主要研究内容本论文主要实现了基于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所示。汇编源文件C,CPP源程序RC资源文件编译器编译器资源编译器库文件.lib连接器资源编译器OBJ文件OBJ文件RES文件.EXE或.DLL含资源的.EXE或.DLL文件图1-1 MFC程序创建过程一个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协议簇分为四层,应用层,传输层,网络层,链路层,应用层处理特的应用程序细节,传输层为两台不同型号的操作系统也不同的操作系统提供端到端的通讯服务;网络层为数据选择传送的路由进行路由选择;链路层用来处理与物理接口相关的细节。(四)Windouws Socket原理加利福尼亚大学伯克利分校为UNIX系统开发出了伯克利套接字(BSD socket),在此基础上扩展形成了windows套接字。它是一套开放的、支持多协议的Windows 下的网络编程接口,它规范了Internet协议族(IPS,一般为TCP/IP)的API使用.Windows Socket 统一了操作,简化了编程,使两个进程之间实现连接、通信。应用程序在使用Windows Sockets Dll之前必须先调用启动函数WSAStartup()。该函数的功能有两个:一是由应用程序指定所要求的Windows Sockets Dll 版本;二是获得系统Windows Sockets Dll的一些细节,调用终止函数WSACleanup()来终止Windows Sockets DLL。四、系统整体设计首先用户登陆后进入主界面对话框中,在主界面对话框中用户开始主要由五种操作聊天操作与管理,文件传输的管理,语音聊天的管理,窗口抖动的管理,状态的更改。 在进行聊天操作时会涉及到字体的设置管理和如果想查看以胶都说过什么话的聊天记录管理功能;同时如果聊天结束点击退出程序会结束程序的运行。 在进行文件传输时,可以同时设置聊天字体大小及查看聊天记录,如果有需要也可以退出程序的执行。 在进行语音聊天时,同时可以进行聊天与发送文件和窗口抖动操作,在需要时会关闭整个程序。 在窗口抖动后可以根据需要关闭整个程序。在状态更改后,如果状态更改为离线状态时会退出整个程序.整个系统结构我们可以分成七大块网内用户状态树,聊天框,聊天框工具条,文件传输面板,语音聊天面板,聊天记录面板,本机信息这七个模块。 网内用户状态树应当可以显示本机IP,本机计算机名,当前用户登陆状态,并能打开聊天框,可以发文件,进行语音聊天功能。 当从网内用户状态树进入到聊天框后,聊天框应拥有聊天工具条,信息显示框,信息输入框,文件传输面板,语音面板,聊天记录面板,发送按纽功以,退出按纽功能。 聊天工具条中应包括字体设置功能,文件传输功能,语音聊天功能,抖动功能,聊天记录功能。如下图1-2所示:显示局域网用户用户登录发文件用户聊天语音聊天抖动窗口字体设置查看聊天记录程序结束状态更改图1-2系统组织结构图五、 关键技术实现(一)关键数据结构在即时通讯系统中涉及到的数据结构如下: (1)结构体_SOCKET_FILE_INFO 用来保存文件信息结构体,其定义如下: typedef struct _SOCKET_FILE_INFO char szFileTitle128; BYTE dwFileAttributes; CTime ftCreationTime; CTime ftLastAccessTime; CTime ftLastWriteTime; ULONGLONG nFileSize; char szFilePath256; SOCKET_FILE_INFO, * PSOCKET_FILE_INFO其中szFileTitle128用来表示文件的标题名,dwFileAttributes表示文件的属性,ftCreationTime表示文件的创建时间,ftLastAccessTime表示文件的最后访问时间,ftLastWriteTime表示文件的最后修改时间,nFileSize表示文件大小。 (2)结构体FILE_MSG_BUFFE用来存放发送文件信息的结构体,其定义如下: struct FILE_MSG_BUFFE uint64 serialNum; char sendIp16; char recvIp16; BOOL isDispose; SOCKET_FILE_INFO vFileInfo; FILE_MSG_BUFFE() serialNum = 0; strcpy(sendIp, ); strcpy(recvIp, ); isDispose = FALSE; ; 其中serialNum表示流水号,sendIp16表示发送者IP,recvIp16表示接收者IP,isDispose表示是否已经处理,vFileInfo表示文件信息。 (3)结构体_FILE_INFO_HEAD用来保存文件信息头信息,其定义如下: typedef struct _FILE_INFO_HEAD char md533; uint64 serialNum; char strSendIp16;char strRecvIp16; ULONGLONG nUnitLen; int nThisId; int nCound; SOCKET_FILE_INFO fileInfo; FILE_INFO_HEAD, *PFILE_INFO_HEAD; 其中md533表示MD5指纹识别,serialNum表示流水号,strSendIp16表示发送者IP,strRecvIp16表示接收者IP,nUnitLen表示单位长度,nThisId表示当前ID,nCound表示文件次数,fileInfo表示文件信息。 (4)结构体CHAT_DLG_INFO用来定义聊天对话框信息,其定义如下: struct CHAT_DLG_INFO char strIp16; CWnd * pDlg; ; 其中strIp16表法IP地址,pDlg表示聊天框指针 (5)结构体CHAT_MSG_BUFFE_CONTENT聊天内容信息,其定义如下: struct CHAT_MSG_BUFFE_CONTENT int nOrder; char strContent1024 * 2 + 1; ; 其中nOrder表示序号,strContent1024 * 2 + 1表示发送信息内容 (6)结构体CHAT_MSG_BUFFE用来对网络中用户信息进行统计,其定义如下: struct CHAT_MSG_BUFFE uint64 serialNum; int nCount; int nRecvSum; char sendIp16; char sendName256; char recvIp16; SYSTEMTIME sendTime; BOOL isDispose; vector vBuffe; ; 其中serialNum 表示流水号,nCount 表示数量,nRecvSum 表示接受总和,sendIp16 表示发送者IP,sendName256 表示发送者姓名,recvIp16 表示接收者IP ,sendTime 表 示 发 送 时 间 ,isDispose 表 示 是 否 已 经 处 vector vBuffe表示信息内容。 (7)结构体FILE_INFO_HOLDER保存发送文件对话框信息,其定义如下: struct FILE_INFO_HOLDER CWnd *pDlg; CRect dlgRc; uint64 serialNum; UINT nType; SOCKET_FILE_INFO fileInfo; BOOL isBegin; ; 其中pDlg表示窗口指针,dlgRc表示窗口位置,serialN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论