聊天室的实现与设计

更新时间:2024-06-16 18:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

兰州交通大学博文学院毕业设计(论文)

摘要

本聊天室设计初衷是为软件开发人员在局域网中方便交流,减少成本,消除由于交流不便带来的开发成本上升。本系统的开发主要用到了Oracle数据库技术、Hibernate框架、MVC架构技术、网络通信技术、windows的多线程技术等。本软件基于Socket通信,在此基础上,实现点对点聊天、广播聊天、一对多聊天、悄悄话,表情,可以运行于任何支持TCP/IP协议的机器上;对于数据库的连接则使用了Hibernate对象关系映射框架,基于此实现了对于系统消息和聊天记录的查询以及用户资料的查询和修改;对于软件整体架构则采用了MVC框架,这样可以大大增加系统的健壮性和可维护性。 MVC模式是一个复杂的架构模式,其实现也显得非常复杂。但是,我们已经总结出了很多可靠的设计模式,多种设计模式结合在一起,使MVC模式的实现变得相对简单易行。Views可以看作一棵树,显然可以用Composite Pattern来实现。Views和Models之间的关系可以用Observer Pattern体现。Controller控制Views的显示,可以用Strategy Pattern实现。Model通常是一个调停者,可采用Mediator Pattern来实现。

关键词 :网络通信;私人聊天;Hibernate;MVC;Socket

I

兰州交通大学博文学院毕业设计(论文)

Abstract

The original design intention of this chat room is facilitates the exchange for the software

developers in the local area network, reduces the cost, eliminates, because exchanges the development cost rise which brings differently. The development of chat room mainly to use network service technical, the file transfer technology, the windows and so on technology. This software based on the Socket correspondence, based on this, realizes chats, the broadcast to chat, one to many to chat point-to-point, the intimate conversation and the expression, may move in any supports the TCP/IP agreement on the machine. Connect to the database using the Hibernate object-relational mapping framework, based on the realization of system information for inquiries and chats, and user query and modify data; the overall framework for the software uses the MVC framework, it can greatly increase the system robust and maintainability.

MVC model structure is a complex model, which seems very complicated to achieve. However, we have summed up a lot of the design of a reliable model, combining a variety of design patterns, MVC model so become relatively easy to achieve. Views can be seen as a tree, apparently can be used to achieve the Composite Pattern. Views and Models of the relationship between the Observer Pattern can be reflected. Controller to control the display of Views can be used to achieve the Strategy Pattern. Model is usually a mediator can be used to achieve the Mediator Pattern。

Keyword: Network service;Personal chats;;Hibernate;MVC;Socket

II

兰州交通大学博文学院毕业设计(论文)

目录

1 系统概述 ............................................................... 1

1.1系统设计(研究)的背景、目的和意义 ................................ 1

1.1.1 系统开发的背景 .............................................. 1 1.1.2 系统开发的目的和意义 ........................................ 1 1.2 对已有聊天软件的分析 .............................................. 2

1.2.1 QQ .......................................................... 2 1.2.2 网页聊天室 .................................................. 2 1.2.3 本系统具有的优势 ............................................ 2 1.3 系统设计的环境与开发方案 .......................................... 2

1.3.1 系统开发环境 ................................................ 2 1.3.2 系统开发方案 ................................................ 3

2 关键技术介绍 ........................................................... 4

2.1 软件开发所采用的关键技术 .......................................... 4

2.1.1 Java语言简介 ................................................ 4 2.1.2 Socket通信技术 .............................................. 4 2.1.3 MVC模式 .................................................... 4 2.1.4 Hibernate框架技术 .......................................... 5 2.2 开发平台 .......................................................... 6

2.2.1 Eclipse简介 ................................................. 6

3 需求分析 ............................................................... 8

3.1 功能分析 .......................................................... 8 3.2 性能需求 .......................................................... 9 3.3 系统用例图 ........................................................ 9

3.3.1 服务器端 .................................................... 9 3.3.2 客户端 ..................................................... 10

4 系统设计 .............................................................. 11

4.1 系统功能模块设计 ................................................. 11

4.1.1 聊天室总体功能模块图 ....................................... 11 4.1.2 服务器端功能模块图 ......................................... 11

III

兰州交通大学博文学院毕业设计(论文)

4.1.3 客户端功能模块图 ........................................... 12 4.2 数据库设计 ....................................................... 12

4.2.1 数据库概念结构设计 ......................................... 12 4.2.2 数据库逻辑结构设计 ......................................... 12 4.2.3 数据库物理设计 ............................................. 13 4.3 聊天室服务器端设计 ............................................... 16

4.3.1 服务器设计思想 ............................................. 16 4.3.2 服务器端界面 ............................................... 17 4.3.3 服务器端各主要类的定义及其功能 ............................. 17 4.3.4 服务器端用户管理功能的设计 ................................. 18 4.3.5 服务器端显示消息的功能设计 ................................. 18 4.3.6 服务器保存系统消息日志功能的实现 ........................... 19 4.4 聊天室客户端设计 ................................................. 19

4.4.1 客户端设计思想 ............................................. 19 4.4.2客户端各主要类的定义以及功能 ................................ 19 4.4.3客户端发送消息的设计 ........................................ 20 4.4.4 客户端显示收到消息的设计 ................................... 20 4.4.5 系统消息查询的设计 ......................................... 20 4.4.6 聊天记录查询的设计 ......................................... 20 4.4.7 在线用户资料的查询 ......................................... 20 4.4.8 修改个人注册资料的设计 ..................................... 20 4.4.9 个人聊天记录的删除功能设计 ................................. 21

5 系统实现 .............................................................. 22

5.1 登陆界面的实现 ................................................... 22 5.2 注册界面的实现 ................................................... 23 5.3 服务器端模块功能实现 ............................................. 25

5.3.1 显示在线用户功能实现 ....................................... 25 5.3.2 公聊功能实现 ............................................... 28 5.3.3私聊功能实现 ................................................ 28 5.3.4 服务器端显示信息和发送信息功能实现 ......................... 29 5.3.5 服务器保存系统日志功能实现 ................................. 30

IV

兰州交通大学博文学院毕业设计(论文)

5.4 客户端模块功能实现 ............................................... 31

5.4.1 客户端接受信息功能实现 ..................................... 31 5.4.2 客户端发送消息功能实现 ..................................... 33 5.4.3 查询系统信息功能实现 ....................................... 34 5.4.4 查询聊天记录功能实现 ...................................... 34 5.4.5 用户资料查询功能实现 ....................................... 35 5.4.6 个人资料更新功能实现 ....................................... 36 5.4.7 聊天记录删除功能实现 ....................................... 37

结论 .................................................................... 38 致谢 .................................................................... 38 参考文献 ................................................................ 40

V

兰州交通大学博文学院毕业设计(论文)

1 系统概述

自从上世纪中叶第一台计算机诞生以来,计算机越来越走进人们的生活当中,特别是随着计算机网络的发展,把全世界的人们紧密的联系在一起,大大的扩展了计算机的功能,人们越来越离不开计算机了。如今,作为网络应用之一的聊天工具,越来越受到人们的欢迎和重视。现在已有的聊天软件和聊天工具不胜枚举,流行的主要有QQ,ICQ,MSN Message,NetMeeting,mIRC和郎码UC和各种的网页聊天室等。这些软件特别是QQ升级很快,其功能是越来越来强大,将代表着聊天软件的发展方向。目前,聊天软件的功能除了最基本的文本聊天,已经可以语音聊天,图像聊天,视频聊天,文件传输等三维聊天,还发展了短信发送,无线聊天,在线游戏等功能,可以预见在不久的将来,聊天软件将成为人们通过因特网相互联系和娱乐的主要平台。

1.1系统设计(研究)的背景、目的和意义

1.1.1 系统开发的背景

聊天室作为一种即时通讯(Instant Messenger,简称IM)软件可以说是目前我国

上网用户使用率最高的软件,无论是老牌的ICQ,还是国内用户量第一的腾讯QQ,以及微软的MSN Messenger都是大众关注的焦点,它们能让你迅速地在网上找到你的朋友或工作伙伴,可以实时交谈和互传信息。而且,现在不少IM软件还集成了数据交换、语音聊天、网络会议、电子邮件的功能。

目前,国内最为流行的即时通讯软件是OICQ(简称QQ)。它以良好的中文界面和不断增强的功能形成了一定的QQ网络文化。Messenger虽出道较晚,但依托微软的强大背景,实力也不可小视。作为Windows XP的一部分,Messenger 整合了操作系统的许多功能,如多种形式的聊天选择、多人的单窗口讨论式交流以及充分的文件与桌面共享功能等。它的令人耳目一新的中文界面和注册方式,连同它强大的功能,着实吸引了众多的眼球的注视。

1.1.2 系统开发的目的和意义

随着信息科学的进步与互联网络的发展,虽然通过网络的聊天软件很多,这些聊天软件必须连接上Internate网络才能聊天,对于服务器要求也较高,因此开发一个针对于内部系统的、局域网内的聊天和公司内部的上下级沟通的聊天通讯软件这样一个即时通讯系统就变得非常有意义了。

本系统为基于C/S的应用Socket技术的聊天工具的设计与实现,它是在Socket通信和文本聊天的基础上来实现一对一、一对多聊天。它要求该聊天软件能够自建服务器,

1

兰州交通大学博文学院毕业设计(论文)

被应用在一个个独立的自治系统中,灵活性很大。

1.2 对已有聊天软件的分析

1.2.1 QQ

作为如今流行的聊天软件之一QQ,功能已经非常强大,基本上朝着三个大的方向发展,即个人及时通信,企业实时通信和娱乐资讯。它的功能主要有:

(1)个人文本聊天 (2)个人语音聊天 (3)个人视频聊天 (4)图像传输 (5)文件传输 (6)在线游戏 (7)隐身,上线 (8)群聊天 (9)企业级实时通信

聊天软件的发展方向是三维化,人性化,综合化。 1.2.2 网页聊天室

作为另一种聊天软件形式,网页聊天室也受到用户的普遍欢迎。网页聊天室的优点就是很好的利用了浏览器的功能,用户不需要安装任何新的软件,即可加入聊天室聊天。现在的网页聊天室除了文本聊天之外,语音聊天也很常见。由于其客户端的简化,其功能必然受到限制。 1.2.3 本系统具有的优势

不管是QQ,还是网页聊天室,其最大的缺陷就是服务器固定,用户必须连接上服务器。如果想在一个自治系统之内(一个孤立的网络)通信,这些软件都不能满足人们的需求,而本系统的服务器有很强的灵活性,任何用户都可以建立自己的服务器

1.3 系统设计的环境与开发方案

1.3.1 系统开发环境

系统所需的软硬件环境,具体如下: 硬件:PC机一台。

软件:Windows XP ,Oracle数据库,Eclipse7.0开发平台

2

兰州交通大学博文学院毕业设计(论文)

1.3.2 系统开发方案

设计实施方案包括:需求分析,流程设计,建立数据库,服务器端设计,客户端设计,系统测试,维护。

此系统基于C/S架构设计,采用Java语言设计。整体框架采用MVC模式,分为模型层(Model),视图层(View)和控制层Controller)。三层各施其职,哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码;本系统选择Oeacle10g作为后台的数据库;对于系统的持久层采用Hibernate框架,实现关系型数据库和对象之间的映射;这样可大大增强了系统的健壮性和可维护性以及可移植性。

3

兰州交通大学博文学院毕业设计(论文)

2 关键技术介绍

任何一个开发项目都需要一定的技术支持,在开发即时聊天通讯系统的过程中,我采用了Java语言,C/S模式,Socket通信技术,MVC模式,Hibernate框架,JavaBean技术以及Eclipse7.0开发平台,下面简单介绍一下这几种技术。

2.1 软件开发所采用的关键技术

2.1.1 Java语言简介

Java是一种简单易用、完全面向对象、具有平台无关性且安全可靠的主要面向Internet的开发工具。Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.6。 2.1.2 Socket通信技术

Socket是建立在TCP/IP协议基础之上,可以看作是通信连接两端的收发器,服务器与客户都通过Socket来收发数据。除了Socket的第一个不带参数的构造方法以外,其他构造方法都会试图建立于服务器的连接,如果连接成功,就返回Socket对象;如果因为某些原因连接失败,就会抛出IOException。当客户请求于服务器程序连接时,可能要等待一段时间。默认情况下,客户会一直等下去,直到连接成功,或者出现异常。如果希望限定等待连接的时间,可以通过connect(SocketAddress endpoint,int timeout)方法来设置超时时间,以毫秒为单位。在通信过程中,如果发送方没有关闭Socket,就突然终止程序,接收方在接收数据时会抛出SocketException。发送方发送完数据后,应该及时关闭Socket或关闭Socket的输出流,这样,接收方就能顺利读到输入流的末尾。 2.1.3 MVC模式

MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。

MVC由Trygve Reenskaug提出,是Xerox PARC在20世纪80年代为程序语言Smalltalk-80发明的一种软件设计模式。模型—视图—控制器模式的目的是实现一种

4

兰州交通大学博文学院毕业设计(论文)

动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外此模式通过对复杂度的简化使程序结构更加直观。

模型(Model) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权利,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。

视图(View) 视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。

控制器(Controller) 控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。 2.1.4 Hibernate框架技术

从不同的角度Hibernate有着不同的解释:

(1)它是连接Java应用程序和关系数据库的中间件。 (2)它对JDBC API进行了封装,负责Java对象的持久化。

(3)在分层的软件架构中它位于持久化层,封装了所有数据访问细节,使业务逻辑层可以专注于实现业务逻辑。

(4)它是一种ORM映射工具,能够建立面向对象的域模型和关系数据模型之间的映射。

实际上,Hibernate是一个基于JAVA的开发源代码的持久化中间件,它对JDBC做了轻量级封装,不仅提供ORM映射服务,还提供数据查询和数据缓存功能,JAVA开发人员可以方便地通过Hibernate API来操作数据库。

现在,越来越多的Java开发人员把Hibernate作为企业应用和关系数据库之间的中间件,以节省和对象持久化有关的30%的JDBC编程工作量。2005年,Hibernate作为优秀的类库和组件,荣获第15届Jolt大奖。Hibernate之所以能够流行,归功于它的以下优势:

(1)它是开发源代码的,允许开发人员在需要的时候研究源代码,改写源代码,定制客户化功能。

(2)具有详细的参考文档。

5

兰州交通大学博文学院毕业设计(论文)

(3)对JDBC仅做了轻量级封装,必要的话,用户还可以绕过Hibernate,直接访问JDBC API。

(4)具有可扩展性。 (5)使用方便,容易上手。

(6)Hibernate既适用于独立的Java程序,也适用于Java Web应用,而且还可以在J2EE架构中取代CMP(Container-managered Persistence,由容器管理持久化),完成对象持久化重任,Hibernate能集成到会话EJB和基于BMP的实体EJB中,BMP(Bean-managered Persistence)是指由实体EJB本身管理持久化。

(7)Hibernate可以和多种Web服务器、应用服务器良好集成、并且支持几乎所有流行的数据库服务器。

2.1.5 JavaBean技术

JavaBean是描述Java的软件组件模型,有点类似于Microsoft的COM组件概念,是一个可以重复使用的软件模型。在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快读的生成新的应用程序。对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有重大的意义。

Bean在构造器的工具(容器)中操作,提供具体的操作性能。Bean是建立应用程序的建筑块,大多数常用的Bean通常是小型控制程序,但也可以生成封装整个应用程序的Bean,将其嵌入到复合文档中。一般来说,Bean可以表示为简单的GUI,也可以生成不可见的Beans用于接收事件和在后台工作。在JSP中所用的JavaBean一般以不可见的组件为主。JavaBean的价值在于它可以经由一组特性来使用,而这些特性则提供对JavaBean设定的存取。

2.2 开发平台

2.2.1 Eclipse简介

Eclipse平台是一个开放的集成开发工具,拥有强大的开发功能。它是建立在插件机制(发现新插件、集成插件和运行插件)之上的。Eclipse平台可以为开发者提供将各种工具无缝集成的功能,并为集成软件开发工具的开发、构造和运行提供基础模块,拥有一整套的公共服务集。

Eclipse软件开发工具箱(简称SDK)是由Eclipse项目的3个子项目组合而成。每个子项目是单一的可下载包。Eclipse软件开发工具箱为开发者提供了功能强大的开

6

兰州交通大学博文学院毕业设计(论文)

发环境和各种工具。所有基于Eclipse的工具都在其平台上创建。

多数人认为Eclipse是Java IDE,不过,当下载Eclipse之后,除了有Java IDE(就是JDT),还有PDE。然而Eclipse是万用工具平台。JDT实际上是Eclipse的添加品,也就是外挂程序。Eclipse本身实际上是指Eclipse平台(Eclipse Platform),除了下载时能取得Java工具集以外,还提供各种工具的支持,所以平台本身只是相当小的软件。如果想开发Java程序,用的是Eclipse随附的JDT外挂程序。如果想开发其它语言的程序,就需要拿到其它外挂程序,诸如CDT (C Development Toolkit)就可以开发C/C++程序。

7

兰州交通大学博文学院毕业设计(论文)

3 需求分析

需求是对信息系统应该具备的目标、功能、性能等要素的综合描述。需求分析是对系统需求的调查、分析、描述和验证。

3.1 功能分析

网络聊天室涉及到一个服务器端和N个客户端。客户向服务器发送请求,服务器对请求做出响应。客户尝试与服务器建立连接。一旦连接建立起来,客户和服务器就可以通过套节字进行通信。

通过对于现存的聊天软件的调查、研究,本系统应具有以下功能: 1、登陆以及注册功能

· 登陆:在用户登陆时,用户需要填写服务器的IP地址和端口号,这主要时因为本系统的需求要求服务器灵活不固定,造成了服务器的经常变更。用户登陆后会进入系统的聊天主页面。

· 注册用户:用户如果时第一次使用本系统,需要进行注册,在填写资料后,系统会分配一个类似QQ号的系统账号,供用户登陆使用。 2、服务器端功能

· 开启监听以及停止监听:管理员可以开启或关闭服务器,但是服务器页面还存在,可以随时再启动。

· 登出:服务器的安全退出,服务器页面将消失。

· 显示在线用户:可以在一个下拉列表中显示所有在线的用户昵称。 · 对全部在线用户发布系统消息:发布系统公告。

· 对单一在线用户发布系统消息:对单个用户发出系统消息,其他用户不可见。 · 踢出某一用户:当某个用户违反了规定,管理员可以把此用户请离。 · 记录系统消息日志:系统发布的所有消息公告将保存在数据库中,可以随时进行查询。 3、客户端功能

· 上线以及下线:客户登陆进入聊天页面后,可以进行一些功能操作,但是聊天之前必须先上线,相应的用户可以进行下线操作,此两项操作不会关闭聊天室页面。

· 登出:客户进行此操作可以安全退出,聊天页面将关闭。

· 显示在线用户人数以及用户列表:在一个下拉列表中,可以显示所有在线的用户以及当前在线人数。

8

兰州交通大学博文学院毕业设计(论文)

· 显示登陆用户的昵称以及个性签名:在用户登陆后,聊天室端页面可以显示用户注册的昵称已经用户资料中的个性签名。

· 对全体在线用户发送消息,公聊功能:用户可以对当前所有在线用户发布消息,所有在线用户都可以受到此用户发送的消息。

· 对单一在线用户发送消息,私聊功能:用户可以在用户列表中选择具体想要聊天的对象,发送消息,此消息仅选择的对象可见,其他用户不可见。

· 悄悄话:用户在发送消息时,可以加上悄悄话功能,丰富聊天形式。 · 在消息中加入动作表情:用户可以在此下拉列表中选择相应的选项,在发送的消息中可以加上相应的动作表情描述话语。丰富用户的聊天形式。

· 查询系统消息:用户可以查询此前系统发布的所有系统用消息。

· 查询当前登陆用户的聊天记录:用户可以查询此前所发布的所有聊天内容。 · 查询某一在线用户的个人注册资料:用户在选择具体在线对象后,可以查询此对象的详细资料,如姓名,生日,地址等。

· 修改更新当前登陆用户的注册资料:用户如果对自己注册的资料不满意或者资料有变更,可以对自己的注册资料进行更新修改。

· 删除当前登陆用户的聊天记录:用户可以删除此前自己的所欲聊天记录。

3.2 性能需求

1、时间特性

对于公共聊天和聊天室聊天,要求响应每条消息的时间不超过1秒钟,否则用户将感到这个聊天工具反应迟钝。

对于二人文本私聊,要求响应每条消息的时间不超过500ms,这样使得二人私聊能够有种当面聊天的感觉。

2、灵活性

要求该聊天工具能够适用于多种协议上,而且能够在任意个自治系统之内使用,要求服务器自建非常灵活。

3.3 系统用例图

用例图用来描述本系统向参与者提供的一种相关工功能。在用例图中,有一个或者多个参与者与一个或者多个用例相互关联。 3.3.1 服务器端

图3-1反映服务器端管理员与客户端普通用户之间的交互过程。

9

兰州交通大学博文学院毕业设计(论文)

3.3.2 客户端

图3-2主要描述客户端所具有的功能,反映客户端普通用户之间的交互过程。

开启监听停止监听<><>系统公告<><><><>显示在线用户<><><>请离用户用户管理员<>系统日志退出 图3-1 服务器端用例图

上线下线公聊<><><>私聊<><>悄悄话<>发送动作表情<><><><><>显示在线用户<>查询系统消息<><>查询聊天记录<>用户<>用户查询用户资料<><><>修改注册资料删除聊天记录退出 图3-2 客户端用例图

10

兰州交通大学博文学院毕业设计(论文)

4 系统设计

总体设计的重要任务是设计软件的结构,也就是要确定系统中每个程序是由那些模块组成的,以及这些模块相互之间的关系。此设计的目的是概要地实现系统,并且设计软件的结构,确定系统是由哪些模块组成的,以及这些模块相互间的关系。

4.1 系统功能模块设计

本系统主要分为两个功能模块:服务器端功能模块和客户端功能模块。在此基础上增加了登陆功能和用户注册功能。 4.1.1 聊天室总体功能模块图

图4-1 总体功能模块图

4.1.2 服务器端功能模块图

图4-2 服务器端功能模块图

11

兰州交通大学博文学院毕业设计(论文)

4.1.3 客户端功能模块图

图4-3 客户端功能模块图

4.2 数据库设计

数据库在一个系统中占有非常重要的地位,数据库的结构的好坏将直接对应用系统的效率,以及实现的效果产生影响。本系统采用Oracle10g数据库,并且使用Hibernate框架技术用于数据库与对象之间的关系映射。 4.2.1 数据库概念结构设计

CDM属于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据结构设计的有力工具,也是设计人员与最终用户进行交流的图形化语言。CDM应该具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义,同时它还应 该简单、清晰、易于被用户理解。CDM的理论基础是实体联系理论,E—R理论中最主要的两个模型元素即是(Entity)和联系(Relationship)。本系统的CDM图见图4-4. 4.2.2 数据库逻辑结构设计

概念数据模型向关系模型的转所遵循的原则,以规范化理论为指导,得出关系模式如下:

用户登陆信息(用户编号,用户昵称,密码)

在线用户(在线用户编号,是否在线,用户IP,用户端口,服务器IP,服务器端口,用户登陆时间)

用户资料(用户编号,真实姓名,性别,生日,邮箱,省份,城市,街道,个性签名) 系统消息(系统消息编号,发送内容,发送时间)

聊天记录(聊天记录编号,发送用户编号,发送内容,发送时间,接收用户)

12

兰州交通大学博文学院毕业设计(论文)

在线用户用户登录信息用户账号Number用户昵称Variable characters (20)密码Variable characters (20)用户编号(D) 包含在线用户编号Number (10,2)是否在线Boolean用户IPVariable characters (20)用户端口Number (10)服务器IPVariable characters (20)服务器端口Number (10)用户登陆时间Date在线用户编号(D) 登录聊天用户资料用户编号Number (10)真实姓名Variable characters (20)性别Number (10)生日Variable characters (20)邮箱Variable characters (20)省份Variable characters (20)城市Variable characters (20)街道Variable characters (20)个性签名Variable characters (100)资料编号公告聊天记录系统消息系统消息编号Number (10)发送时间Date消息内容Variable characters (100)系统消息编号聊天记录编号Number (10)发送用户编号Number (10)发送内容Variable characters (100)发送时间Date接受用户Variable characters (30)记录编号 图 4-4 数据库CDM图

4.2.3 数据库物理设计

数据库最终是要存储在物理设备上的。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。

物理数据模型(Phsical Data Model,简称PDM)它是DBMS所支持的数据模型,本系统的PDM如下图所示:

13

兰州交通大学博文学院毕业设计(论文)

在线用户在线用户编号系统消息编号用户账号是否在线用户IP用户端口服务器IP服务器端口用户登陆时间NUMBER(10,2)NUMBER(10)NUMBERSMALLINTVARCHAR2(20)NUMBER(10)VARCHAR2(20)NUMBER(10)DATE用户登录信息用户账号NUMBER用户昵称VARCHAR2(20)密码VARCHAR2(20)用户资料用户编号用户账号真实姓名性别生日邮箱省份城市街道个性签名NUMBER(10)NUMBERVARCHAR2(20)NUMBER(10)VARCHAR2(20)VARCHAR2(20)VARCHAR2(20)VARCHAR2(20)VARCHAR2(20)VARCHAR2(100)聊天记录系统消息系统消息编号NUMBER(10)发送时间DATE消息内容VARCHAR2(100)聊天记录编号在线用户编号发送用户编号发送内容发送时间接受用户NUMBER(10)NUMBER(10,2)NUMBER(10)VARCHAR2(100)DATEVARCHAR2(30) 图4.5 系统PDM图

数据库中主要数据表记录如下:

1、 cc_user_basic (用户登陆信息表):此表主要用于在用户登陆时,对用户的登陆信息进行存储,方便比对。

表4-1 用户登陆信息表

字段名 id username pwd 数据类型 number varchar number 长度 10 20 10 是否主键 是 否 否 描述 用户的编号 用户昵称 用户密码 2、 cc_user_onlineuser(在线用户信息表):此表用于存储用户的在线信息,可以方便的区分在线与离线用户,对与在线用户进行数据上的操作时,也提供了很大方便,明确了信息范围。

14

兰州交通大学博文学院毕业设计(论文)

表 4-2 在线用户信息表

字段名 id onlinedate userip userport serip serport onlinetag userid 数据类型 number Date varchar number varchar number number number 长度 10 20 10 20 10 10 10 是否主键 是 否 否 否 否 否 否 否 描述 在线用户编号 登陆时间 用户IP地址 用户端口号 服务器IP地址 服务器端口号 是否上线 对应用户编号 3、 cc_user_description(用户资料表):此表用于存储用户的注册信息,主要用于查询用户的详细信息。

表 4-3 用户资料表

字段名 id realname gender birthday email province city street sign 数据类型 number varchar number varchar varchar varchar varchar varchar varchar 长度 10 20 10 20 20 20 20 20 100 是否主键 是 否 否 否 否 否 否 否 否 描述 对应用户编号 真实姓名 性别 生日 邮箱 所在省份 所在城市 所在街道 个性签名

4、 cc_user_information(系统信息表):此表用来存储服务器发送的消息,实现服务器端的系统日志保存功能。

15

兰州交通大学博文学院毕业设计(论文)

表4-4 系统信息表

字段名 id content senddate 数据类型 number varchar Date 长度 10 100 是否主键 是 否 否 描述 系统信息编号 信息内容 发送时间 5、 cc_user_message(用户聊天记录表):此表用来保存用户的聊天记录,方便用户需要时查询。

表 4-5 用户聊天记录表

字段名 id sendid senddate content sendToWho 数据类型 number number Date varchar varchar 长度 10 10 100 20 是否主键 是 否 否 否 否 描述 聊天记录编号 发送人编号 发送时间 发送内容 接受人姓名 4.3 聊天室服务器端设计

服务器端是整个聊天室的主要部分,它包含了客户端接入以及处理其发出请求的一系列方法,是整个聊天室的核心,客户发送的信息也是通过服务器发送到其他用户的。 4.3.1 服务器设计思想

作为服务器设计,需要考虑以下几点问题: (1)安全性

服务器的安全性包括两部分,一是服务器本身软硬件配置上的安全性,比如防止系统漏洞;二是服务器和客户端通讯协议的安全性设计,防止通过协议本身导致服务器被非法攻击等。

(2)并发服务能力

主要是线程间的锁控制。涉及到锁控制的,主要是因为共享问题。共享分为两种:一是代码共享部分;一是数据共享部分。其中做主要的还是数据共享部分。但是没有什么好的解决办法,唯一的办法就是检查这个共享是不是真正必要的,这些数据可不可以分成两部分以形成不是共享的。

(3)性能的可线性提高

16

兰州交通大学博文学院毕业设计(论文)

这主要指服务器的服务能力可以通过增加线程的方式线性提高性能。这就要求服务器的服务能力分担是均衡的,即实现良好的负载平衡。 4.3.2 服务器端界面

图 5-2 服务器界面

4.3.3 服务器端各主要类的定义及其功能

1、ChatServer::这个类是服务器端程序运行的入口,运用Swing图形界面定义了服务器的主界面,其中包含一个主窗体、若干个容器、按钮、输入框和文本显式框。jbInit()方法是使整个图形界面初始化。同时还有startServer()和stopServer()两个方法,当运行startServer()这个方法时就会创建个ServerSocket对象并设定8000端口号。运行stopServer()方法会关闭ServerSocket断开连接,请离用户的KickOut发法也定义在这个方法中。

2、Node:此类为用户节点类,其对象实例用户唯一标识一个用户,只有属性没有方法,并创建了一个自身的引用。

3、ServerListenThread:这个类继承了Thread线程类,主要的方法也是重写父类的main()方法。方法中定义了个while循环让ServerSocket一直处于监听状态,直到boolnean类型的isstop为false时,也就是服务器关闭是退出。并控制输入输出流来显

17

兰州交通大学博文学院毕业设计(论文)

式上线下线的信息发送到每个客户端。

4、UserInfoList:这个类是针对Node类也就是定义的用户进行操作,其中有增加用户的add()方法、删除用户的del()方法、指定id或name的两个Find()方法以及获所有用户数的getCount()方法。

5、SendMessageToAll:这个类用于向所有客户端发送信息,实现方法是sendMsgToAll,它有两个参数,一个是用户UserInfoList,和要发送的消息M。通过输入输出流来控制并通过网络传输的。

6、ServerReceiveThread:它继承了Thread线程类,用于获取客户端发来的信息并作适当的处理,在向客户端发送消息之前对要发的消息进行适当的加工。如客户端发出悄悄话请求时,这个类会调用方法在所发送的消息前加上“悄悄对你说”。 4.3.4 服务器端用户管理功能的设计

由于客户端承载着与客户端之间和客户端相互之间交流的重要任务,所有对所有用户端进行管理功能的实现很重要。在这个功能中是通过定义Node和UserInfoList这两个类来实现的当服务器端接到一个客户端的请求时,服务器端就会初始化一个Node节点作为客户端,Node类中出了有起必须的一些用户名、输入输出流等属性外,还定义了其自身的引用Node next,作用是把客户端设计成一个链表,通过next这个属性让他们连接起来,这样做的优点是不需要再定义List或者Map来存放客户端结点,只需在Node中增加一个属性就能实现,使其性能有很大的提高。UserInfoList中定义了对Node进行增加、删除、查找和返回其数目的方法,通过Node的next属性遍历所有的客户端。在整个的聊天室实现中客户端管理模块起到了基础的支持,无论是发送消息、上线下线和悄悄话都是调用UserInfoList中的方法来确定对哪个客户端进行操作的。Node对象是存放在内存中的,当ServerSocket关闭的时候会释放资源,Node结点失效。 4.3.5 服务器端显示消息的功能设计

服务器端作为所有消息的中转站和系统消息发出站,对消下的处理也是相当重要的一个环节,如果失去了消息发送消息的功能,聊天室也就是去了存在的意义。

首先在客户Node类中定义了两个属性,分别是ObjectOutputStream和ObjectInputStream,这是java语言的输入输出流,应用于所有信息的传递,可以输入输出对象、数据、字符串等等。首先ServerListenerThread会捕获到客户端的请求,然后引用Node类并调用OutputStream方法发送消息。Server ReceiveThread会接收到请求并判断是何种类型,是群聊还是悄悄话,是什么样的表情,服务器会对其进行加工,加

18

兰州交通大学博文学院毕业设计(论文)

上所需要的提示信息和用户名,如果是群聊,则调用SendMessage中的SendMsgToAll发送到每一个客户端。期间会调用UserInfoList来获取所有用户。客户端获得消息后调用服务器中定义的Node类中的OutputStream将接收并显示到图形界面中的文本输出框,群聊功能就实现了。如果是私聊,UserInfoList会根据用户名查找是哪个用户,再调用SendMessage方法将消息发送到指定客户端。如果是服务器端发送消息则会在发送之前加入“[系统消息]”后再调用SendMessageToAll方法发送到每个客户端。客户端程序通过输入流获取到信息后进行判断并作相应的处理。在字符串前面加上适当的说明信息之后条用textarea.append()方法将信息输出到主界面上。 4.3.6 服务器保存系统消息日志功能的实现

此功能主要把服务器端发送的系统消息保存进数据库,在Model层bean包中定义好系统消息类Information,并且封装成具体对象。对象与数据库之间的映射采用Hibernate框架。在服务器端界面,当管理员发送系统消息时,调用服务层中的ServerServiceimp类,通过这个类中的saveInformation方法调用模型层中的ServerDAOOper接口。此接口的实现类里面有具体的保存系统消息的方法。在此方法中采用Hibernate来与底层数据库进行交互。通过这样层层调用,来实现系统消息日志功能的保存。

4.4 聊天室客户端设计

客户端中定义了客户的主界面以及发送消息、接收消息等方法。它继承了Thread线程类,因而多个客户端可以并发执行且不受影响。 4.4.1 客户端设计思想

服务器的作用就是为了满足客户端的要求。客户端作为大众群体,地位也是非常重要,其权限没有服务器高。在客户端的设计中应当加入客户端住界面和接收发送信息的线程以及一些对基本字符串的处理,由于本系统时满足局域网内交流的实现,并且服务器要求并不固定,达到任何一台终端都可以作为一台服务器使用的要求,客户端的功能要求复杂了一些,除要求实现基本的交流功能外,还应该实现对于系统消息和个人聊天记录的查询和删除,以及在线用户资料的查询和用户资料的修改。 4.4.2客户端各主要类的定义以及功能

ChatClient:客户端的主函数就在这个类中。login方法是用于用户登录的,不需要事先注册,用户名不为空即可登录。之外还有logout下线以及发送信息的方法。客户端的主界面的初始化写在init方法中,和服务器端界面类似,它由一个panel和若干个

19

兰州交通大学博文学院毕业设计(论文)

按钮和textArea组成,这些Swing组件与服务器端的监听器相连。 4.4.3客户端发送消息的设计

发送消息是由SendMessage方法来完成的。该方法首先获得要发送的内容和对象。如果是悄悄话则加上status字符串。然后把提示信息、聊天的对象、聊天方式、表情和聊天内容依次通过输出流发送给服务器端,发送一条清空一次缓存,服务器端会根据接收到的内容作相应的处理。 4.4.4 客户端显示收到消息的设计

在接收消息模块中定义了一个while循化,只要用户没有下线或与服务器的连接没有断开则消息一直处于接收状态。当输入流读取到服务器发送的消息后用if条件语句判断是何种类型的信息,并对其做加上相应的类型提示信息的处理。最后送交主界面的textArea进行显示。 4.4.5 系统消息查询的设计

当用户点击客户端界面的系统查询菜单项时,此事件的监听器实现方法调用服务层的UserServiceImp类中的查询系统消息方法,此方法再继续调用Dao层的UserDAOOper接口类的实现类中查询系统消息方法,此方法使用Hibernate与底层数据库进行交互,从而得到数据,并显示在客户端界面。 4.4.6 聊天记录查询的设计

当用户点击客户端界面的系统查询菜单项时,此事件的监听器实现方法调用服务层的UserServiceImp类中的查询聊天记录方法,此方法再继续调用Dao层的UserDAOOper接口类的实现类中查询聊天记录方法,此方法使用Hibernate与底层数据库进行交互,从而得到数据,并显示在客户端界面。用户使用此功能时,得到的数据应该只是本人的聊天记录。

4.4.7 在线用户资料的查询

当用户想了解某一个用户的具体信息时,可以在用户列表里点击此用户名,然后在点击查询用户资料菜单项,此事件的监听器实现方法调用服务层的UserServiceImp类中的查询用户资料方法,此方法再继续调用Dao层的UserDAOOper接口类的实现类中查询用户资料方法,此方法使用Hibernate与底层数据库进行交互,从而得到数据,并显示在客户端界面。

4.4.8 修改个人注册资料的设计

当用户想对自己的注册资料进行更新修改时,可以点击修改个人资料菜单项,此事

20

兰州交通大学博文学院毕业设计(论文)

件的监听器实现方法将会调出一个GUI界面,在上面用户可以重新对用户注册资料进行修改,此界面的监听器将会调用调用服务层的UserServiceImp类中的更新用户资料方法,此方法再继续调用Dao层的UserDAOOper接口类的实现类中更新用户资料方法,此方法使用Hibernate与底层数据库进行交互,从而将更新后的数据保存进数据库中。此功能应当仅能更新修改当前登陆用户的个人资料。 4.4.9 个人聊天记录的删除功能设计

用户点击客户端界面的删除聊天记录菜单项时,此事件的监听器实现方法调用服务层的UserServiceIm类中的删除聊天记录方法,此方法再继续调用Dao层的UserDAOOper接口类的实现类中删除聊天记录方法,此方法使用Hibernate与底层数据库进行交互,从而删除数据库中的数据。用户使用此功能时,删除的数据应该只是本人的聊天记录。

21

兰州交通大学博文学院毕业设计(论文)

5 系统实现

编程实现时按照系统的详细设计要求,在选定的开发平台下,使用指定的开发工具和开发语言,遵循特定的程序设计方法所进行的代码编写工作。代码实现也称为编程实现。代码实现将依据前面的设计方案,并对设计文档中确定的每一个对象、方法、过程以及界面等进行编程。

5.1 登陆界面的实现

图 6-1 登陆界面

在登陆时,用户需要输入用户名和密码,服务器IP和端口号。系统需要对用户名和密码进行比对,验证数据库中是否有此记录。

//验证

if(UserServiceImp.isFind(userId, pwd))

{

System.out.println(\

int sPort=Integer.parseInt(serverPort); String sIp=serverIpText.getText(); try {

int option=JOptionPane.showConfirmDialog(getPanel(1),

\

22

兰州交通大学博文学院毕业设计(论文)

boolean online=true;

if(option!=JOptionPane.OK_OPTION) { }

UserServiceImp.addOnlineUser(userId, pwd, serverIp,

online=false; selectPanel(1);

sPort, online);

ChatClient

ChatRoomClient

=

new

ChatClient(userId,serverIp,serverPort);

frame.dispose();

5.2 注册界面的实现

图 6-2 注册界面

在用户注册时,要对用户书写的资料进行验证,这样可以使用户填写的资料尽可能

23

兰州交通大学博文学院毕业设计(论文)

是正确的,以减少恶意注册,减轻数据库的数据冗余。主要代码如下:

if(userNameTextNew.getText().length()<4||userNameTextNew.getText().length()>20)

{

JOptionPane.showMessageDialog(getPanel(2), \用户名不合法!\

userNameTextNew.setText(\

}

else if(pwd.length()<=3) {

userNameTextNew.grabFocus();

JOptionPane.showMessageDialog(getPanel(2), \密码不合法,密码长度不应该低于3位);

pwdTextNew1.setText(\pwdTextNew1.grabFocus();

}else if(pwd1!=pwd2) {

JOptionPane.showMessageDialog(getPanel(2), \密码不一致); pwdTextNew2.setText(\pwdTextNew2.grabFocus();

else if(!emailTextNew.getText().trim().contains(\

JOptionPane.showMessageDialog(getPanel(2), \邮箱地址不合

法);

} else {

boolean

gender;

emailTextNew.setText(\emailTextNew.grabFocus();

if(rbBtnNew1.isSelected())

gender=true;

24

兰州交通大学博文学院毕业设计(论文)

else gender=false;

int id=UserServiceImp.add(username, pwd, realname, gender,

birthday, email, city, street, province, sign);

int option=JOptionPane.showConfirmDialog(getPanel(1), \您

的帐号是:/t\是否立即登录?\提示\

5.3 服务器端模块功能实现

图 6-3 服务器端界面

作为聊天室系统的服务器,包含了客户端接入以及处理其发出请求的一系列方法,是整个聊天室的核心,客户发送的信息就是通过服务器发送到其他用户的。 5.3.1 显示在线用户功能实现

对于用户的获取,增加,删除等操作,系统主要定义了一个用户信息链表,其主要代码如下:

public class UserInfoList {

25

private Node root = null;// 用户信息链表的根

private Node pointer = null;// 用于操作链表的游标

private int count = 0;// 链表元素个数记数器(用户数记数)

兰州交通大学博文学院毕业设计(论文)

public UserInfoList() { }

// add函数用于实现用户信息节点的添加 public void add(Node n) { }

// del函数用于实现用户信息节点的删除 public void del(Node n) { }

// getCount用于获取用户数 public int getCount() {

pointer = root;

while (pointer.next != null) { }

if (pointer.next == n) {// 判断当前节点是否为要删除的节点 }

pointer = pointer.next;

pointer.next = n.next; count--; break;

pointer = root;// 实例化游标

while (pointer.next != null) {// 判断是否用户链表尾部 }

pointer.next = n;// 向用户链表加入节点(用户添加) n.next = null; count++;

pointer = pointer.next;// 游标后移 root = new Node();// 创建链表根节点 root.next = null;

pointer = null;// 初始化游标 count = 0;// 用户数初始化

26

兰州交通大学博文学院毕业设计(论文)

}

// Find用于查找指定条件的用户 public Node Find(String UserName) { }

public Node Find(int index) {

if (count == 0 || index < 0)// 若用户数为0,或指定查询索引小于实际最if (count == 0)// 若用户数为0,返回空指针

return null; return count;

pointer = root;

while (pointer.next != null) { }

return null;

pointer = pointer.next;

if (pointer.userName.equals(UserName.trim()))

return pointer;

小值,返回空值 }

}

return null;

pointer = root; int i = 0;

while (i < index + 1) { }

return pointer;

if (pointer.next != null)

pointer = pointer.next;

else

return null;

i++;

27

兰州交通大学博文学院毕业设计(论文)

5.3.2 公聊功能实现

如果是群聊,则调用SendMessage中的SendMsgToAll发送到每一个客户端。期间会调用UserInfoList来获取所有用户。 public class SendMessageToAll { public SendMessageToAll() { }

public static void sendMsgToAll(UserInfoList uil,String M){ Node node;

int total = uil.getCount();// int index=0; while(index < total){

node = uil.Find(index);// if(node == null){ index++; continue; } try{

node.output.writeObject(\系统信息 ]\); node.output.flush(); node.output.writeObject(M); node.output.flush(); }catch(Exception e){ } index++; }

5.3.3私聊功能实现

如果是私聊,UserInfoList会根据用户名查找是哪个用户,再调用SendMessage方法将消息发送到指定客户端。 / Find用于查找指定条件的用户

public Node Find(String UserName) {

if (count == 0)// 若用户数为0,返回空指针

28

兰州交通大学博文学院毕业设计(论文)

}

Node node = userInfoList.Find((comboBox.getSelectedItem()

.toString()).trim());

return null; pointer = root;

while (pointer.next != null) { }

return null;

pointer = pointer.next;

if (pointer.userName.equals(UserName.trim()))

return pointer;

node.output.writeObject(\系统信息]\); node.output.flush();

node.output.writeObject((systemMsg.getText()).trim() + \); node.output.flush(); systemMsg.setText(\);

5.3.4 服务器端显示信息和发送信息功能实现

首先在客户Node类中定义了两个属性,分别是ObjectOutputStream和ObjectInputStream,这是java语言的输入输出流,应用于所有信息的传递,可以输入输出对象、数据、字符串等等。首先ServerListenerThread会捕获到客户端的请求,然后引用Node类并调用InputStream方法显示消息。

public class Node { String userName=null; Socket socket=null;

ObjectOutputStream output=null; ObjectInputStream input=null; Node next=null; }

public void run(){ while(!isStop){

29

兰州交通大学博文学院毕业设计(论文)

try{

String type=(String)client.input.readObject(); if(type.equalsIgnoreCase(\聊天信息]\)){

String toSomebody = (String)client.input.readObject(); String status = (String)client.input.readObject(); String action = (String)client.input.readObject(); String message = (String)client.input.readObject(); String msg = client.userName + action + \对\ +toSomebody +\说:\ +message +\;

if(status.equalsIgnoreCase(\悄悄话\)) msg=\悄悄话]\ + msg; textArea.append(msg);

if(toSomebody.equalsIgnoreCase(\大家\)){

SendMessageToAll.sendMsgToAll(userInfoList,msg); } else{

Node node = userInfoList.Find(toSomebody.trim()); if(node != null){

node.output.writeObject(\聊天信息]\); node.output.flush();

node.output.writeObject(msg); node.output.flush(); } }

}

5.3.5 服务器保存系统日志功能实现

//保存系统消息

public void saveInformation(Information inf) {

Session session=getSession();

30

兰州交通大学博文学院毕业设计(论文)

}

Transaction trans=session.beginTransaction(); session.save(inf); trans.commit(); session.close();

5.4 客户端模块功能实现

图 6-4 客户端界面

客户端时用户聊天的主功能界面,用户登陆后可以实现发送公聊信息、发送私聊信息、接受服务器发送的系统信息;用户也可以对系统消息、个人聊天记录、在线用户信息进行查询,并且可以对个人注册信息进行修改以及删除个人聊天记录。 5.4.1 客户端接受信息功能实现 public void run() {

if (type.equalsIgnoreCase(\系统信息]\)) {

String sysMsg = (String) input.readObject();

if (sysMsg.equalsIgnoreCase(\用户名已被使用\)) {// 若登陆

while (!isStop) {

try {

String type = (String) input.readObject();// 读取信息类型

用户名称已被使用,则停止当前登陆用记信息接收线程

C.logOut();

textArea.append(\系统信息]\ + sysMsg + \); break;

31

兰州交通大学博文学院毕业设计(论文)

}

if (sysMsg.equalsIgnoreCase(\服务器关闭!\)) { }

if (sysMsg.equalsIgnoreCase(\踢出\)) {

C.logOut(); textArea

.append(\系统信息]你违反了本聊天室规则.\\n[系统

C.logOut();

textArea.append(\服务器已关闭!\\n\); break;

信息]被管理员踢出了聊天室.\\n\);

}

textArea.append(\系统信息]\ + sysMsg);

break;

} else if (type.equalsIgnoreCase(\聊天信息]\)) {

String message = type.trim() + (String) input.readObject(); textArea.append(message);

} else if (type.equalsIgnoreCase(\用户列表]\)) {

String userList = (String) input.readObject(); String userNames[] = userList.split(\); comboBox.removeAllItems(); int i = 0;

comboBox.addItem(\大家\); while (i < userNames.length) { }

comboBox.setSelectedIndex(0);

comboBox.addItem(userNames[i]); i++;

} else if (type.equalsIgnoreCase(\在线用户]\)) {

String sysMsg = type.trim() + (String) input.readObject();

32

兰州交通大学博文学院毕业设计(论文)

} catch (Exception e) { }

}

textField.setText(sysMsg);

5.4.2 客户端发送消息功能实现 public void SendMessage() {

String toSomebody = comboBoxUserList.getSelectedItem().toString(); String status = \; if (socket.isClosed())

return;

if (checkBox.isSelected())

status = \悄悄话\;

String action = comboBoxAction.getSelectedItem().toString(); String content = sendMessage.getText(); Date sendDate=new Date();

Message message=new Message(); message.setContent(content); message.setSendid(userId); message.setSendDate(sendDate); message.setSendToSomebody(toSomebody); try {

ServerServiceImp.saveMessage(message);

System.out.println(\); output.writeObject(\聊天信息]\); output.flush();

output.writeObject(toSomebody); output.flush();

output.writeObject(status);

33

兰州交通大学博文学院毕业设计(论文)

}

output.flush();

output.writeObject(action); output.flush();

output.writeObject(content); output.flush();

} catch (Exception e) { }

5.4.3 查询系统信息功能实现 //对系统消息的查找

public static String getInformation() { }

UserDAOOper oper=OperatorFactory.getUserOperator(); List list=oper.loadInformation(); if(list==null)

return \;

String infStr=\;

Date sendDate=new Date(); for(Information inf:list) { }

return infStr;

sendDate=inf.getSendDate(); String content=inf.getContent(); infStr+=\系统消息\+\

+sendDate.toString()+\ +content+\;

5.4.4 查询聊天记录功能实现

public static String getMessage(Long userid){

34

兰州交通大学博文学院毕业设计(论文)

}

UserDAOOper oper=OperatorFactory.getUserOperator(); List list=oper.loadMessages(userid); if(list==null){ }

String message=\; Date sendDate=new Date(); for(Message me:list){ }

return message;

sendDate=me.getSendDate(); String content=me.getContent(); List user=oper.load(userid);

String userName=user.get(0).getUserName(); String sendToSomebody=me.getSendToSomebody(); message+=\聊天记录\+\

+sendDate.toString()+\ +userName+\对\

+sendToSomebody+\说\+\ +content +\ +\;

return \没有相关记录\;

5.4.5 用户资料查询功能实现 //查找个人信息

public static String getDescription(String userName) {

UserDAOOper oper=OperatorFactory.getUserOperator(); Long id=null;

id=oper.load(userName).get(0).getId();

35

本文来源:https://www.bwwdw.com/article/3w03.html

Top