




免费预览已结束,剩余58页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux下基于C+语言开发的即时通信软件摘 要网络通讯是目前计算机用户进行交流最普遍的方式,各种各样的聊天软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。当前中国的互联网技术已经进入了一个飞速发展的时期,即时通讯工具作为当今网络应用的主流,越来越受到了人们的青睐,使人们的网上生活更加丰富多彩。当今使用最为广泛的即时通信工具,微软公司的MSN,腾讯公司的 QQ 聊天软件等为人们的工作和生活带来很大的便利。特别是对于腾讯来说,其公司的收益很大部分是归功于QQ庞大的客户群,并在此基础上拓展其他的业务。本毕业设计就是模拟 QQ 聊天软件,开发一个包括文字聊天、保存用户信息等功能的即时通信软件。 采用 C/S 架构,基于Linux平台开发,采用C+编程语言。由服务器端和客户端程序组成。采用ICE中间件,解除服务器和客户端的耦合。并使用QT进行图形界面的设计。主要实现的是聊天软件的部分功能,即文字聊天、保存用户消息等功能,主要完成的任务包括服务器模块的设计、文字聊天,保存用户信息等功能。通过运行、测试与分析,该多功能聊天软件运行稳定、可靠,具有一定的实用价值。关键词:聊天软件 文字聊天 Linux平台 C/S架构 ICE中间件Linux-based instant messaging software using C+ language developmentAbstractNetwork communication is the computer users to communicate the most common way, all kinds of chat software also emerge in endlessly; Service providers also provide more and more rich communication service functions. The current Chinas Internet technology has entered a rapid development period, instant communication tools as the network application of mainstream, more and more get the favour of people, make people online life more colorful. The most widely used instant communication tools, Microsofts MSN and QQ chat software the tecent company for peoples work and life bring great convenience. Especially for tencent speaking, the companys earnings, a large part is attributed to QQ large clientele, and based on this, expand the other business.The graduation design is simulated QQ chat software, the development of a text chat, group chat function of instant communication software.Using C/S structure, based on Linux platform development, the C+ programming language. From the server and client program composition. The ICE middleware, and remove the server and client coupling. And use QT for the design of the graphical interface. The realization of the main chat software is part of the function, which text chat, the function such as news group, the main task of the module design, including the server text chat, mass news etc. Function. Through the operation, test and analysis, the multifunctional chat software operation is stable, reliable, and has a certain practical value.Keywords: chat software text chat Linux platform C/S ICE目录摘 要IAbstractII1 前言11.1 课题研究背景和现状11.1.1 研究背景11.1.2 研究现状和发展趋势11.2 本课题研究的目的和意义21.3 开发工具及工具简介21.3.1 Linux操作系统21.3.2 数据库SQL Server 200031.3.3 开发语言C+语言31.3.4 Qt编程软件41.3.5 ICE中间件42 即时通信软件系统总体设计52.1 即使通信系统总体结构及总体需求52.2 总体性能需求分析62.2.1 服务器端性能需求62.2.2 客户端端性能需求62.2.3 错误处理需求63 程序设计方案73.1 方案比较73.1.1 采用TCP方式连接73.1.2 采用UDP方式连接83.1.3 采用ICE中间件83.2 方案比较103.3 总体设计方案103.3.1 服务器端功能模块划分103.3.2 客户端端功能模块划分113.3.3 消息标识定义123.3.4 服务器接口函数134 即时通讯系统软件详细设计154.1 服务器端设计思想154.2 客户端设计思想174.3 服务器端详细设计204.3.1 服务器端主体204.3.2 服务器端线程实现204.3.3服务器端函数实现224.4 客户端图形界面详细设计244.4.1 连接窗体254.4.2 登陆窗体284.4.3 注册窗体304.4.4 用户窗体324.4.5 添加好友窗体354.4.6 对话窗体374.5 数据库和文件的操作415 结论465.1 教训及经验总结465.2 总结46致 谢48参考文献49外文原文50中文翻译55591 前言1.1 课题研究背景和现状1.1.1 研究背景21世纪以计算机为代表的信息产业,标志着人类社会进入了信息时代,计算机网络的研究和发展。特别是Internet在全球的推广和应用,对全世界科学、经济和社会产生了重大影响。而网络通讯的出现又把全世界各个地方的人的距离拉得越来越近!随着互联网的普及,具有交互功能的应用软件日益受到亲睐,尤其是即时通讯软件ICS大受欢迎。163和263网站使用ICS的在线人数常达几万人,上百万人同时出现在腾讯的QQ上。优秀的ICS确 实为天南地北的人们的信息勾通提供了便利,对提高网站知名度起到了至关重要的作用, 国外有的公司甚至把ICS作为支柱软件推出。1.1.2 研究现状和发展趋势自1990s,四位以色列人推出的ICQ后,IM首次出现,凭借实时在线的交互特性迅速风靡全球。如今,IM软件正逐渐成为一个集合了文字、视频、音频业务以及多种增值业务的多媒体网络通信软件,凭借其所具有的廉价性和方便性,以及功能不断完善,IM已经和WWW、Email等一起成为网民们最喜爱的网络服务之一。尤其在国内,腾讯QQ普及率远高于Email,在部分中国网民眼中上网基本等价于使用QQ等。2010年3月5日19时52分58秒,腾讯QQ同时在线用户数突破了1亿。截止到2009年3月18日,QQ官方宣布注册账户数量超过8.919亿,活跃账户数量超过3.766亿。近年来公共互联网上的即时通讯发展迅猛,并向着未来通信和协作的主要模式演化。这种演化主要表现为:从文本向话音、视频和多媒体演化;从固定网络向无线移动演化;从个人通信向企业即时通信和协作演化;在体系结构方面,从集中服务器向对等连接P2P演化;从专门系统向开放系统演化,推动实现不同系统的互通。总体看,是从即时通讯向新一代统一消息演化。1.2 本课题研究的目的和意义即时通讯(Instant messaging,简称IM)是一个终端服务,允许两人或多人使用网络即时地传递文字信息、文件、语音与视频交流。它是一种使人们能在网上识别在线用户并与他们实时交换消息的技术。即时通讯被认为比电子邮件更具有自发性,甚至能在进行实时文本对话的同时浏览网上信息。 利用“即时通讯”工具,用户间可以实现异地文字、语言、视频的实时互通;同时,借助即时通讯工具,还可以帮助企业提高业务协同性及反馈的敏感度和快捷度。作为使用频率最高的网络软件,即时通讯已被认为是现代交流方式的新象征。1.3 开发工具及工具简介操作系统:Linux操作系统数据库:SQL Server 2000编程语言:C+语言开发工具:QT编程软件使用技术:ICE中间件1.3.1 Linux操作系统最早的Fedora Linux社区的目标是Red Hat Linux制作并发布第三方的软件包,然而当Red Hat Linux停止发行后,Fedora社区便集成到Red Hat赞助的Fedora Project,目标是开发出由社区支持的操作系统Red Hat,Enterprise Linux则取代Red Hat Linux成为官方支持的系统版本。 Fedora Core是众多Linux发行套件之一。它是一套从Red Hat Linux 发展出来的免费Linux 系统。现时Fedora最新的版本是Fedora16,Fedora是Linux发行版中更新最快的之一,通常每6个月发布一个正式的新版本。 Fedora和Red Hat这两个Linux的发行版联系很密切。Red Hat自9.0以后,不再发布桌面版的,而是把这个项目与开源社区合作,于是就有了Fedora 这个 Linux 发行版。Fedora 可以说是Red hat桌面版本的延续,只不过是与开源社区合作。1.3.2 数据库SQL Server 2000数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的。SQL Server 2000 是Microsoft公司推出的SQL Server数据库管理系统的一个版本。该版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能,具有使用方便,可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98的膝上型电脑到运行Microsoft Windows 2000的大型多处理器的服务器等多种平台使用。1.3.3 开发语言C+语言C+程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup(即本文作者)设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言设施。C+最初的版本被称作“带类的(C with classes)”Stroustrup,1980,在1980年被第一次投入使用;当时它只支持系统程序设计(3)和数据抽象技术(4.1)。支持面向对象程序设计的语言设施在1983年被加入C+;之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了C+领域。在1985年,C+第一次投入商业市场Stroustrup,1986Stroustrup,1986b。在1987至1989年间,支持范型程序设计的语言设施也被加进了C+Ellis,1990Stroustrup,1991。 随着若干独立开发的C+实现产品的出现和广泛应用,正式的C+标准化工作在1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式发布了C+语言的国际标准C+,1998。在标准化工作进展期间,标准委员会充当了一个重要的角色,其发布的C+标准之草案在正式标准发布之前,一直被作为过渡标准而存在。1.3.4 Qt编程软件Qt是一个1991年由奇趣科技开发的跨平台C+图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。在发布Qt 4.6 的同时,作为 Qt 开发跨平台 IDE 的 Qt Creator 也发布了更新版本。Qt Creator 1.3 和 Qt 4.6共同构成的 Qt SDK,包含了开发跨平台应用程序所需的全部功能。 Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境 (IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。 Qt Creator包含了一套用于创建和测试基于Qt应用程序的高效工具,包括: 一个高级的C+代码编辑器 上下文感知帮助系统 可视化调试器 源代码管理 项目和构建管理工具 Qt Creator在LGPL2.1版本授权下有效,并且接受代码贡献。1.3.5 ICE中间件ZeroC,Inc开发的Internet Communications Engine ,简称Ice1。其主要设计目标是: 提供适用于异种环境的面向对象中间件平台。 提供一组完整的特性,支持广泛的领域中的实际的分布式应用的开发。 避免不必要的复杂性,使平台更易于学习和使用。 提供一种在网络带宽、内存使用和 CPU 开销方面都很高效的实现。 提供一种具有内建安全性的实现,使它适用于不安全的公共网络。 更简单地说,Ice 的设计目标可陈述为: “让我们构建与CORBA 一样强大的中间件平台,而又不去犯 CORBA 所犯下的任何错误”。Ice 是一种面向对象的中间件平台。从根本上说,这意味着 Ice 为构建面向对象的客户服务器应用提供了工具、API 和库支持。 Ice 应用适合在异种环境中使用:客户和服务器可以用不同的编程语言编写,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的2 即时通信软件系统总体设计2.1 即使通信系统总体结构及总体需求本系统是一个即时通讯程序,目前实现是在局域网下。本系统分为服务器和客户端两个应用程序,服务器负责管理客户端,客户端之间自由通讯。服务器端和客户端之间使用TCP协议进行通信。模块的工作方式如下:客户端客户端服务器 图2-1 服务器和客户端工作方式简图为了开发出符合要求的网络聊天程序,首先必须知道使用者的需求。对需求的深入理解是开发工作获得成功的前提条件,它对目标项目提出完整、准确、清晰、具体的要求。软件的功能需求:1、登录功能。2、申请新用户的功能。3、客户可以通过服务器转发,实现一对一的聊天。4、添加好友。5、删除好友。6、服务器端可以保存用户的信息,同时将信息保存在文件和数据库中。7、客户端程序可以显示好友列表。8、应该具有易用、稳定的图形界面。9、系统实现保存聊天记录的功能。10、发送系统消息。11、服务器端保存错误日志。12、从数据库中读取保存用户信息。2.2 总体性能需求分析2.2.1 服务器端性能需求服务器需要同时连接很多个用户,并能提供给这些连接用户所需要的任务处理请求,这就要求服务器能同时处理多个客户端连接。服务器模型一般分为循环服务器和并发服务器,循环服务器一次只能处理一个连接,也就是说同一时间只能由一个用户连接到服务器进行消息处理,这种情况是不被允许的。因此我们将采用多线程方式的并发服务器来设计服务器端,这样将能从很大程度上提高服务器的运行效率。2.2.2 客户端端性能需求客户端只需要连接到服务器便可以进行任务的处理工作,因此客户端的主要性能要求为图形界面运行的稳定性和对出错信息的及时反映。当一个窗体出现问题时能够及时的处理,让主程序不受影响。2.2.3 错误处理需求所有的应用程序在运行过程中都会出现出错的情况,这种错误可能来自于程序本身的BUG也可能是用户操作的失误所造成的。当有错误发生时,我们应该有一个很好的机制来保障错误能够及时地被排除。因此,当应用程序出现了错误的时候我们就需要程序能提供给我们出错的信息,这样用户就能够很快的找出具体的出错原因,以便寻找合理的途径去解决它。3 程序设计方案3.1 方案比较3.1.1 采用TCP方式连接TCP方式连接的一个显著特点就是需要有服务器,这种类型的程序通常被称为客户机/服务器模式。客户机/服务器模型也是一种网络模型,它并不是定义了网络的层次结构,而是描述了一种网络程序运行的方式。客户及/服务器模型将网络应用程序分为客户和服务器两部分。客户方对服务器方发送信息请求,服务器方对其做出相应回答,提供服务。在TCP/IP网络应用中,多数网络应用程序是使用客户/服务器模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被惊醒并且为客户提供服务,对客户的请求做出适当的反应。虽然基于连接的服务是设计客户/服务器应用程序的标准,但是通过运用ICE中间件的原理,可以将客户端和服务端进行解耦合,使二者成为独立的一部分,服务器只需提供一个servant,而客户端只需获取servant的代理,二者就可以进行通信,甚至服务器端和客户端可以使用不同的语言来编写。当建立服务器程序时,应该将服务器程序设计成等候客户的请求。TCP传输层通过协议端口和应用程序通信,也就是说,为了接收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。同时,客户与服务器这两个术语不是对应用的特定组成部分的严格指称,而是表示在某个请求从发生到结束期间,应用的某些部分所承担的角色: 客户是主动的实体。它们向服务器发出服务请求。 服务器是被动的实体。它们提供服务,响应客户请求。 在从不发出请求、而只是响应请求的意义上,许多服务器常常不是 “纯粹的”服务器:它们常常充当某些客户的服务器,但为了完成它们的客户的请求,它们又会充当另外的服务器的客户。与此类似,在只从某个对象那里请求服务的意义上,客户常常也不是“纯粹的”客户:它们常常是客户服务器混合物。例如,客户可以在服务器上启动一个长时间运行的操作,在启动该操作时,客户可以向服务器提供回调对象 (callback object ),供服务器用于在操作完成时向客户发出通知。在这种情况下,客户在启动操作时充当客户,而在接收操作完成通知时充当服务器。这样的角色反转在许多系统中都很常见,所以,许多客户服务器系统常常可以被更准确地描述为对等 (peer-to-peer )系统。3.1.2 采用UDP方式连接采用UDP协议的程序不需要有服务器,两个程序之间可以通过无连接的方式进行通信,所以无连接是使用UDP协议程序的一个显著特点。使用无连接协议的程序和使用面向连接协议的服务器程序之间的主要相似之处是它们都必须对一个协议端口进行侦听。例如,无连接和连接服务器程序必须在协议端口侦听客户请求。同样,由于无连接客户程序没有和远地主机建立直接连接,所以它也必须对协议端口进行侦听,以便接收以对它服务请求产生的数据报应答。无连接客户程序也对一个协议端口进行侦听。使用无连接协议的程序不和远地主机建立直接连接。无连接客户程序使用数据报发送网络服务请求,它不建立点到点连接。因此无连接客户程序必须在一个协议端口,对应答数据报进行侦听。Ice 是一种面向对象的中间件平台。从根本上说,这意味着 Ice 为构建面 向对象的客户服务器应用提供了工具、API 和库支持。 Ice 应用适合在异种环境中使用:客户和服务器可以用不同的编程语言编写,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的。3.1.3 采用ICE中间件Ice 提供了一种 RPC 协议,既可以把 TCP/IP 、也可以把UDP 用作底层传输机制。此外,Ice 还允许你把 SSL 用作传输机制,让客户与服务器间的所有通信都进行加密。Ice 协议定义了:1、 一些消息类型,比如请求和答复类型;2、 协议状态机,确定客户与服务器以怎样的序列交换不同的消息类型,同时还包括相关的 TCP/IP 连接建立和关闭语义;3、编码规则,确定在线路上怎样表示数据的类型4、每种消息类型的头,其中含有像这样的细节:消息类型、消息尺寸、所使用的协议及编码版本。Ice 还支持在线路上进行压缩:通过设置一个配置参数,你可以让所有的网络通信数据都被压缩,从而节省带宽。如果你的应用要在客户与服务器间交换大量数据,这种功能会很有用。Ice 协议适用于构建高效的事件转发机制,因为要想转发消息,你不需 要了解消息内部的详细信息。这意味着,消息交换机不需要对消息进行任 何解编或重整编它们可以简单地把消息当作不透明的字节缓冲区加以转发。Ice 协议还适用于构建双向操作:如果服务器想要把一条消息发送给客 户提供的某个回调对象,这个回调对象可以通过客户原来创建的连接传给服务器。如果客户在防火墙后面,连接只能外出,不能进入,这种特性就特别重要。Ice 核心为分布式应用开发提供了一个完善的客户服务器平台。但现实应用需要的常常不止是远地通信能力:你通常还需要拥有这样的能力:随需启动服务器、把代理分发给客户、分发异步事件、配置你的应用、分发应用补丁,等等。在 Ice 中有一些服务,能够提供上述特性及其他一些特性。这些服务被实现成Ice 服务器,你的应用充当的是这些服务器的客户。这些服务都没有使用 Ice 的任何向应用开发者隐藏起来的内部特性,所以在理论上,你可以自行开发等价的服务。但让服务成为平台的一部分,你就可以专注于应用开发,而不必先构建许多基础设施。而且,构建这样的服务所需的工作量是微不足道的,所以你应该了解有哪些服务可用,而不是重新发明你的轮子。3.2 方案比较综合以上分析,本软件开发选择方案如下:Linux操作系统,采用C+开发语言,TCP协议进行连接。采用C/S架构,运用ICE中间件连接服务器和客户端。系统界面美观内容丰富,很好的实现了服务器与用户、用户与用户的交互。3.3 总体设计方案为实现网络聊天的功能,该软件使用ICE中间件,服务器与客户端采用了TCP/IP方式连接,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。3.3.1 服务器端功能模块划分服务器负责向各个客户端发布系统消息。接受来自客户端的各种信息并分别处理。针对这些操作,服务器做了如下的模块划分:处理登陆信息模块:检查登陆信息是否正确,并向客户端返回登陆信息。处理聊天信息模块:转发消息给指定的用户。处理申请信息模块:通过用户申请模块进行新用户的注册,保存该用户信息。发布系统消息模块:将消息发给各客户端,改写用户在服务器端和客户端的状态。服务器功能示意图:服务器端处理申请信息群发聊天信息处理登陆信息发布系统消息图3-1 服务器功能示意图3.3.2 客户端端功能模块划分客户端主要负责处理用户的操作信息,当用户做出相应的动作时客户端应该能够及时地做出相应,当GTK图形程序检测到鼠标点击时,将触发一个事件,对该事件进行动作的定义和函数的编写便可完成相应的动作。因此,针对这些操作特性,将客户端模块进行如下划分:登陆功能模块:建立与服务器的连接并登陆,能显示登陆错误信息。界面显示模块:将在线好友显示在好友列表中,并显示其当前状态。聊天功能模块:处理各种聊天信息,并判断消息类型。离线消息模块:接收和发送离线消息,对离线消息进行处理。配置信息模块:提供基本的软件配置操作。客户端功能示意图:登陆到服务器客户端界面显示模块配置信息模块聊天功能模块离线消息模块 息图3-2 客户端功能示意图3.3.3 消息标识定义消息头,包含发送者,信息内容,接受者,发送时间struct messagestring sender;string mes;string receiver;string time;用户信息,包含姓名,密码,头像struct userinfostring name;string pwd;string picpath; 好友列表 sequence frilist消息队列 sequence messagelist用户-用户信息 dictionary userinfolist用户-好友列表 dictionary userfri离线消息 sequence offlinemessage在线用户 sequence liveuser3.3.4 服务器接口函数在slice语言中,定于服务器接口funcpp,该接口提供以下操作:登入系统int Logins (string name, string pwd);注册用户int Regists (string name, string pwd, string picpath);获取用户名int Getusername (string name);获取用户头像string Getfripic(string name);获取好友列表frilist Retfrilist(string name);添加好友int Addfriend(string name,string friname);删除好友int Delfriend(string name,string friname);将用户信息写入文件int Writeofflinemesfile();读取文件中用户信息offlinemessage Readofflinemesfile();发送消息int Sendmessage(string recverrname,string sendername,string message,string sendtime);发送离线消息int Sendofflinemes(string recvername,string sendername,string message,string sendtime);获取消息message Getmessage(string recvername,string sendername);获取是否在线 int Getstat(string name);获取消息数量 int Getmessagenum();获取系统消息数量 int Getsysnum();获取系统消息message Getsysmessage(string recvername);获取当前时间char* currenttime(char* curtime, const char* format);添加日志 void writelog(string s);用户在线 int Loginser(string name); 离线用户 int Logoutser(string name);4 即时通讯系统软件详细设计4.1 服务器端设计思想本系统软件产品的主要功能是实现网上聊天,可以让多个用户同时互相通信,有一个服务器,用于检查客户登陆请求,转发客户所发出的消息,并负责删除退出的用户。对服务器的某一可用端口进行监听,以获得客户端请求,从而对客户端请求进行处理。因为是多客户同时请求,所以要采用多线程,为每一个在线用户分配一个线程,实时处理每个客户端的请求。服务器端要求实现公共数据处理,处理公共数据,客户数据资料的存储与读取,聊天记录资料的存取和读取等。端口监听器,监听服务器某一端口,为每一在线客户建立一个会话线程。客户请求处理处理客户的请求,根据客户的请求执行相应的操作。服务器运行后即处于监听状态,当监听到有连接请求时服务器进入消息处理流程,因为服务器为并发服务器,所以可以同时对多个请求做出相应。由于服务器与客户端是相互独立的,启动服务器后,服务器等待客户端与之相连,同时,服务器本身可以做相应的操作:从数据库读取用户信息、从文件中读取用户信息、将用户信息保存到数据库中(当有新用户注册时)、用户信息保存到文件中(当有新用户注册时)。服务器工作方式简图如下:图4-1 服务器工作方式简图4.2 客户端设计思想本系统软件产品的主要功能是实现网上聊天,可以让多个用户同时互相通信,有一个服服务器,用于检查客户登陆请求,转发客户所发出的消息,并负责删除退出的用户.服务器任务为从数据库读取用户信息、从文件中读取用户信息、将用户信息保存到数据库中(当有新用户注册时)、用户信息保存到文件中(当有新用户注册时)。其主要是在后台工作。而对于客户端,其主要的功能是实现用户之间的通信,用稳定的图形化界面表示客户端,以便直观的进行通信。客户端包含以下界面:登陆界面、程序主窗口、聊天界面、注册用户界面、弹出离线消息窗口、添加删除好友窗口。下图为客户端前台窗口工作方式简图:图4-2 客户端前台窗口工作方式简图客户端运行后首先要用户登录到服务器,如果登陆成功服务器会将在线的用户联系人列表发送给客户端,此时客户端即可显示有哪些好友在线而哪些是离线的。当用户点击在线好友时便会弹出一个聊天信息窗体,该窗体用于发送和接收用户的聊天信息。当用户点击离线用户时便会触发一个离线消息事件,该事件通过服务器转发方式发送给离线用户,当对方上线时便可查看该离线消息。服务器程序启动后,如服务器流程图所示,通过双线程,同时启动ICE的Server端和ICE的Client端,服务器的Server端用来等待客户端的Client连接,服务器的Client端用来连接客户端的Server端。启动客户端,用过IP和端口号连接上服务器的Server端,同时客户端启动自身的Server端,此时服务器的Client端连接客户端的Server端,此时,客户端与服务器之间建立了连接。客户端服务器连接后,服务器通过创建通信器以及适配器,并在通信器中建立Servant以便客户端调用。下图为服务器和客户端之间连接方式(ICE的C/S连接)的简图:图4-3 ICE下服务器和客户端工作方式简图客户端后台工作方式简图如下:图4-4 客户端后台工作方式简图4.3 服务器端详细设计4.3.1 服务器端主体服务器主体函数主要涉及是创建两个线程,一个是Server端线程,一个Clinet端线程。Server端线程负责提供连接,供客户端的Client端连接;Client端负责连接Client端。创建两个新线程:IceUtil:ThreadPtr st = new serverthread;IceUtil:ThreadPtr ct = new clientthread;启动线程:IceUtil:ThreadControl tst = st-start();IceUtil:ThreadControl tct = ct-start();4.3.2 服务器端线程实现服务器端有两个类serverthread和clientthread,继承自基类IceUtil:Thread,两个类的public的run()方法用来启动ICE线程。serverthread类的run方法完成工作是:初始化通信器,创建适配器,建立Servant,将Servant加入通信器,激活通信器,然后等待连接,同时完成工作后关闭通信器。clientthread类的run方法完成的工作是:初始化通信器,创建适配器,建立server端的代理,查找相应的Servant代理,通过代理调用相应接口。在clientthread类的run方法中,通过代理调用相应的接口函数,加上选择机制,可以完成服务器端的四个功能:从数据库读取用户信息、从文件中读取用户信息、将用户信息保存到数据库中(当有新用户注册时)、用户信息保存到文件中(当有新用户注册时)。在服务器和客户端连接时,二者相连的端口号直接写入了配置文件,这样就无需用硬写入的方式在程序中就写入连接的IP和端口号,从而方便了我们以后可以修改,而不必改变整个程序,ICE的配置文件的方式提供了这样的方便。Ice 属性机制提供了一种简单的配置 Ice 的途径,你可以在配置文件中、或在命令行上设置属性。这也适用于你自己的应用:你可以轻松地使用Properties接口,访问你为自己的需要而创建的、应用专用的属性。用于访问属性值的 API 小而简单,所以要在运行时用它获取属性值很容易;这个 API 还很灵活,如果有需要,它能让你使用多个不同的属性集和配置文件。启动服务器后,效果如下图:图4-5 启动服务器截图4.3.3服务器端函数实现服务器端提供以下函数的实现:登入系统int Logins (string name, string pwd);注册用户int Regists (string name, string pwd, string picpath);获取用户名int Getusername (string name);获取用户头像string Getfripic(string name);获取好友列表frilist Retfrilist (string name);添加好友int Addfriend(string name,string friname);删除好友int Delfriend(string name,string friname);将用户信息写入文件int Writeofflinemesfile();读取文件中用户信息offlinemessage Readofflinemesfile();发送消息int Sendmessage(string recverrname,string sendername,string message,string sendtime);发送离线消息int Sendofflinemes(string recvername,string sendername,string message,string sendtime);获取消息message Getmessage(string recvername,string sendername);获取是否在线int Getstat(string name);获取消息数量int Getmessagenum();获取系统消息数量int Getsysnum();获取系统消息message Getsysmessage(string recvername);获取当前时间char* currenttime(char* curtime, const char* format);添加日志void writelog(string s);用户在线 int Loginser(string name); 离线用户 int Logoutser(string name);4.4 客户端图形界面详细设计即时通信软件的客户端是使用图形用户界面来实现的,程序运行后激活主窗体,在主窗体上点击设置为敏感状态的按钮就会产生相应的事件,该事件将会触发一个消息驱动所指定的函数来处理这个操作。本软件使用QT图形界面来实现,其具有以下优点:面向对象:Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。Qt 提供了一种称为signals/slots 的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单;丰富的API:Qt包括多达 250个以上的 C+ 类,还提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。登陆界面的设计是整个客户端的切入点,客户端的整个设计都是在图形界面下完成的。图形用户界面或图形用户接口(Graphical User Interface,GUI)是指采用图形方式显示的计算机操作环境用户接口。与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用人们从此不再需要死记硬背大量的命令,取而代之的是可用通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。图形界面稳定实用是前提,在稳定的前提下要力求做好美观,简洁,客户端通过创建图形界面,并通过代理调用服务器中的接口,再运用QT的机制,通过点击按钮等方式获取相应响应,从而实现相应操作。4.4.1 连接窗体1、连接窗体:用以实现客户端和服务器的连接。在连接窗体中,有两个Button(按钮(下同)和两个LineEdit。IP对应的LineEdit响应SaveIp函数,用以保存Ip地址。其实现如下:void MainWindow:SaveIp()QString qip;qip.append(ui-text1-text();serip= qip.toStdString();Port对应的LineEdit响应SavePort函数,用以保存Port号。其实现如下:void MainWindow:SavePort()QString qip;qip.append(ui-text2-text();serport= qip.toStdString();OK按钮响应响应Loginuser函数,目的是登陆服务器。其实现如下:funcppPrx MainWindow:getfuncpp()Ice:CommunicatorPtr ic;tryic = Ice:initialize();Ice:PropertiesPtr props = ic-getProperties();string configfile = CONFIG_FILE;props-load(configfile);string str=SimplePrinter:;if (serip=default) str=str+serip+ -p +serport; else str=str+ tcp -h +serip+ -p +serport;coutstrstringToProxy(str);funcppPrx cbrx = funcppPrx:checked Cast(base);return cbrx;catch (const Ice:Exception & ex)car ex endl;catch (co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省东莞中学松山湖学校2025-2026学年高三物理第一学期期末考试试题
- 门卫收快递管理办法
- 集中执法与管理办法
- 高校督查员管理办法
- 违章曝光台管理办法
- 税收动态管理暂行办法
- 环境监察考核管理办法
- 社交网络标识管理办法
- 纳米微球乳腺增生诊断-洞察及研究
- 出租车相关知识培训课件
- 廉洁文化知识试题(含答案)
- 2025《地方资产管理公司监督管理暂行办法》解读课件
- 2025年中国PC工业计算机(工控机)数据监测研究报告
- (2025)社区网格员笔试考试题库及答案
- 大学英语写作教学课件
- 儿童学针灸启蒙课件
- 2025年中航油招聘笔试参考题库附带答案详解
- 中学生健康生活方式指南
- 办公室设备领用管理制度
- 2025年青岛版(2024)小学科学三年级上册(全册)教学设计(附目录P150)
- JG/T 503-2016承插型盘扣式钢管支架构件
评论
0/150
提交评论