搜档网
当前位置:搜档网 › 《Java聊天程序的设计与实现》

《Java聊天程序的设计与实现》

《Java聊天程序的设计与实现》
《Java聊天程序的设计与实现》

本科生毕业论文(设计)系(院)计算机科学学院专业计算机科学与技术

论文题目Java聊天程序的设计与实现

学生姓名车永华

指导教师苏炳均(副教授)

(姓名及职称)

班级08级ACCP2班

学号08339311

完成日期:二0一一年十一月

Java聊天程序的设计与实现

车永华

计算机科学学院计算机科学与技术08339311

[摘要]:随着信息时代的来临,人们之间的交流也越来越趋向于网络。因此各种聊天工具的使用也是非常频繁,如MSN、QQ之类的聊天工具也被广泛使用。本文在研究局域网通信机制的原理和计算机网络编程基本原理的基础上,使用Java作为开发工具,开发出了一款在局域网中进行通信交流的软件。

[关键字]:Java 服务器端客户端数据传输

引言

当今主流的聊天工具有QQ,MSN,网易泡泡等,国内最热门的聊天工具当属腾讯QQ,是由深圳市腾讯计算机系统公司开发的,基于Internet的即时寻呼软件。你可以通过QQ和你的亲朋好友进行交流,即时收发消息,文件传输,语音视频,发送邮件等功能,QQ不仅仅在电脑在应用,还能通过移动电话登录手机腾讯网址或者下载手机可用的手机客户端进行QQ的登录使用。QQ支持显示好友的在线信息,即时传送信息、即时交谈、即时发送文件和网址。QQ可以在Win95/98/NT/2000/XP/Win7操作系统下运行,是十分灵活的网络通信工具。

虽然QQ软件是免费的,而且功能也是越来越强大。但是唯一的不足的地方就是都需要在电脑联网的情况下才能使用,脱离了Internet根本就是一个只能看不能用的软件,为了能在脱离了Internet的情况下使用的局域网聊天工具,那就必须要有服务器端,而本系统就是包括服务器端和客户端,可以在局域网聊天的一个软件。

1 开发工具概述

1.1什么是Java

Java是一种可以跨平台应用的面向对象的程序设计语言,他是由Sun公司在

1995年推出的程序设计语音。Java具有很高的通用性,安全性,跨平台等特点。Java 与一般的编译执行计算机语音和解释执行计算机语音不同。他它首先是将源代码编译成二进制的字节码,然后在各种不同平台的虚拟机上来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台的特性,这也是Java语言最大的特点。

Sun公司在推出Java后就将它作为一种开放式的技术,从而吸引了很多编程开发者。而Sun公司的口号之一就是“Java语言是靠群体的力量而非公司的力量”,并且获得了广大软件开发商的认可。

1.2Java语言的主要特性

Java语言的主要特性有:1)Java语言是简单的。Java语言的语法和C语言,C++语言很相近,从而使得大多数的程序员很容易学习。2)Java语言是一个面向对象的。比C++更纯粹的面向对象程序设计语言。3)Java语言是分布式的。Java的网络能力强大且易于使用。4)Java语言是健壮的。Java的强类型机制,异常处理,废料的自动收集等是Java程序健壮性的重要保证。5)Java语言是安全的。Java通常应用在网络环境中,因此Java提供了一个安全机制来防止恶意代码的攻击。6)Java语言是体系结构中立的。Java程序在Java平台上被编译为体系结构中立的字节码格式, 然后可以在实现这个Java平台的任何系统中运行。7)Java语言是可移植的。这种可移植行又来源于体系结构的中立性。8)Java语言是解释型的。Java程序在Java平台上被编辑为字节码格式,然后才可以在这个Java平台的任何系统中运行。9)Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。10)Java语言是多线程的。在Java语言中,线程是特殊的对象,它必须由Thread类或其子类来创建。通常有两种方法创建:第一,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。第二,实现Runnable接口。11)Java语言是动态的。Java语言的设计目标之一是适应与动态变化的环境。

1.3 Java中的布局

边框布局BorderLayout、流布局FlowLayout、网格布局GridLayout、分组布局GroupLayout、Box类布局。

2.总体设计

2.1功能模块图

该系统主要可以分为由2个比较主要的部分组成:1)文件传输系统;2)QQ聊天系统。

文件传输系统的功能主要是接收你的QQ好友给你传送来的各种文件,然后保存在自己电脑中。

聊天系统的功能:1)新用户的注册;2)用户登录;3)修改密码;4)找回密码;

5)查找添加好友;6)删除好友;7)好友分组;8)发送聊天内容;9)发送聊天表情;10)聊天字体的切换;11)屏幕震动。

图1 系统功能模块图

2.2数据库设计

2.2.1E-R图

用户表(UserInfo):

属性:用户编号(uid),用户名(uname),密码(upass),登录ip和端口号(ipport),状态(status),密保问题(question),密保答案(answer)。

关系:一个用户可以有多个好友分组。

一个用户可以有多条消息。

好友分组表(Group)

属性:组编号(gid),用户编号(guid),组名(gname),好友类型(gtype)。

关系:一条记录只对应一个用户,但是可以拥有多个组员。

好友表(Friends)

属性:好友编号(fid),好友分组编号(fgid),用户好友编号(fuid),

图 2 E-R图

2.2.2表结构设计

表1 用户表(UserInfo)

表2 好友分组表(Group)

表3 好友表(Friends)

表4 消息表(Messages)

以上各表的创建代码如下:

1)创建用户表

CREATE TABLE UserInfo

(

uid INT IDENTITY(1000,1) PRIMARY KEY, --用户编号,自动增长 uname V ARCHAR(50) NOT NULL, --用户名

upass V ARCHAR(50) NOT NULL, --密码

ipport V ARCHAR(50), --登录ip和端口号

status BIT DEFAULT(0), --是否在线,0,默认不在线

question V ARCHAR(50) NOT NULL, --密保问题,用于找回密码

answer V ARCHAR(50) NOT NULL, --密保问题答案

face V ARCHAR(50) NOT NULL, --头像

)

2)创建好友分组表

CREATE TABLE [Group]

(

gid INT IDENTITY(1,1), --好友分组编号,自动增长

guid INT NOT NULL, --用户编号,外键,引用UserInfo表的uid

gname V ARCHAR(50) NOT NULL, --组名

gtype BIT DEFAULT(1), --好友类型,1-好友,0-黑名单

PRIMARY KEY(guid,gname)

)

3)创建好友表

CREATE TABLE Friends

(

fid INT IDENTITY(1,1), --编号,自动增长

fgid INT NOT NULL, --好友分组编号,外键,引用Group表的

gid

fuid INT NOT NULL, --用户好友编号,外键,引用UserInfo表的

uid

context V ARCHAR(50), --好友备注

PRIMARY KEY(fgid,fuid) --共为主键,保证不能添加同一个好友两次)

4)创建消息表

CREATE TABLE Messages

(

mid INT IDENTITY(1,1) PRIMARY KEY, --主键,自动增长

ruid INT NOT NULL, --接收消息的用户的编号,外键,引用

UserInfo表的uid

suid INT NOT NULL, --发送消息的用户的编号,外键,引用

UserInfo表的uid

sendTime DATETIME DEFAULT(GETDATE()), --发送消息的时间

mtype BIT DEFAULT(0), --消息类型,默认为0,表示聊天信息,

1表示系统消息

context V ARCHAR(200) NOT NULL --消息内容,非空

)

以下是各表的约束:

ALTER TABLE UserInfo

ADD CONSTRAINT ck_utel

CHECK(tel LIKE '[0-9][0-9][0-9][0-9]-'+REPLICATE('[0-9]',7)

OR tel LIKE '1'+REPLICATE('[0-9]',10)

OR tel LIKE '[0-9][0-9][0-9]-'+REPLICATE('[0-9]',8)), CONSTRAINT ck_idcard

CHECK(

(idcard LIKE '[1-9]'+REPLICATE('[0-9]',16)+'[0-9X]' AND ISDATE(SUBSTRING(idcard,7,8))= 1)

OR

(idcard LIKE '[1-9]'+REPLICATE('[0-9]',13)+'[0-9]' AND ISDATE('19'+SUBSTRING(idcard,7,8))= 1)

OR idcard=null

)

GO

ALTER TABLE [Group]

ADD CONSTRAINT fk_guid FOREIGN KEY(guid) REFERENCES UserInfo(uid) GO

ALTER TABLE Friends

ADD CONSTRAINT fk_fuid FOREIGN KEY(fuid) REFERENCES UserInfo(uid)

GO

ALTER TABLE Messages

ADD CONSTRAINT fk_ruid FOREIGN KEY(ruid) REFERENCES UserInfo(uid), CONSTRAINT fk_suid FOREIGN KEY(suid) REFERENCES UserInfo(uid) GO

3详细设计及实现

3.1界面设计

1)登录界面(如图3)

该界面仿照腾讯QQ的界面,界面与腾讯QQ相比虽然不是那么美观,但是基本的功能也与其差不多了,在这个界面上用户的主要操作有用户输入用户名,密码,如果还没有注册用户名的网友可以通过登录界面的用户注册,从而使用该程序。在登录该程序之前需要开启服务器,当用户把用户名和密码输入好后点击登录按钮后,就开始与服务器建立连接,服务器收到后开始通过jdbc的方式读取数据库的内容,然后与用户输入的用户名和密码进行比较,如果用户名不存在或者用户的密码错误则登录失败,并且提示失败的原因,如果有时候没有把服务器开启的话,则在登录失败后,会提示连接服务器超时。登录成功后直接跳到程序的主窗口,开始向服务器请求读取好友分组和好友名单。

图3 登录界面

在这个界面中主要的部分便是登录按钮的实现,登录窗体的事件处理有这些处

理发方法:login(),checkInput()。checkInput()是检查用户在输入中是否有错误的地方,例如帐号是在4位以上的数字才是有效的数字,而密码则是在1—20位之间,用户输入过长会提示错误。

2)注册界面(如图4)

该界面是对于那些尚未注册的用户进行注册使用,在这个界面注册的用户需要填写的有,昵称,密码,确认密码,密保问题,问题答案,当这些内容填写完成以后,就可以点击提交注册按钮。一点击这个按钮后就会创建一个与服务器端的连接。连接成功就会将填写的信息发送到服务器端。如果服务器写入数据库成功,那么你便注册成功,成功后会返回一个数字帐号给用户,这个时候你可以用你刚才注册成功的数字帐号和密码进行登录。

图4 注册界面

在这个用户注册的界面也有几个主要的处理方法:register(),checkInput()。当用户点击注册按钮后,checkInput()会对用户输入的信息进行逐一的检查,如在检查中发现有用户输入错误的地方会进行相应的提示,并且指出错误的原因,要求用户重新输入。

3)主界面(如图5)

图5 主面板

这个界面是整个系统的核心部分。它可以列出该用户的所有好友,和该用户对其进行的分组信息等。用户可以查看好友是否在线,不管好友是否在线,用户都双击好友的头像进行消息的发送。你的好友将在下次登录的时候收到你所发送的消息。也可以在好友头像上点击鼠标右键会出现几个功能,发送消息,发送文件,删除好友的操作。在最上面有一个输入框,可以进行百度的搜索服务。QQ好友的分组里面能够显示出你当前分组下的好友一共有多少个和当前分组下在线的好友有多少个。当你的QQ好友有人上线后,会更新在你的好友分组下面,你也可以尝试自己刷新好友分组。而在主窗口面板的最下面有几个功能:

消息(如图6):这些消息都是当你不在线的时候保存在数据库中的,其中包括请求添加你为好友的用户的昵称,发送请求的时间。当你上线后可以点击查看你的离线消息,和好友请求消息。如有好友请求添加的消息,你可以添加他为你的好

友进行交流。

图6 消息管理

修改(如图7):你可以对你账户的密码进行修改。但是必须填写原始密码和

新密码和你密保问题的答案,填写完点击提交修改按钮可以进行修改,开始与服务

器发送请求,进行数据库的查询,如若其中的原始密码、输入的新密码和确认密码和密保问题的答案与数据库中保存的数据有不相符的,则修改密码失败,反之则修改成功,在你下次登录的时候密码生效。

图7 密码修改

添加:你可以添加一个好友分组,方便管理你的好友列表。

查找:你可以通过帐号进行查找你的好友。数字帐号是唯一的,你所查找出的结果也是唯一的。查找到用户后你可以添加他为好友。

4)私聊界面

这个界面主要用来显示两个人的对话信息以及发送的信息。最顶上的是显示你正在与哪位好友在聊天,他的昵称和帐号也会显示在上面。这个界面主要分为两个部分,上半部分是显示的你和你好友聊天内容的记录。而下半部分是聊天内容的编辑区域,在编辑区你可以设置你聊天内容的字体,大小,字体颜色,也可以给对方发送一个QQ聊天的表情,不过这个表情需要对方在线才能收到,还有就是你只能发送默认的表情,并不能如腾讯QQ那样随心所欲的发送自定义表情。在这个界面还有其他的几个功能,下面逐一介绍:

发送文件:在这个资源如此丰富的时代,我们也经常和一些好友进行资源的共享。该功能和我们平常使用的QQ聊天软件一样的,能把自己电脑上的各种资源发送给你的好友,例如电影,使用的软件等。当然有陌生人给你发送不明文件的时候你也可以选择拒绝。由于该软件是在局域网内使用的,因此传输文件的速度也是比较可观的。发送文件按钮的实现是在鼠标释放时的事件源内,当鼠标释放后才能触

发该事件。发送文件首现要从自己的电脑上选择你想发送的文件,发送的文件时我们先要取得你要发送文件的文件大小,在你得到好友允许你发送文件请求的回复后进行相应的处理过程,

语音:顾名思义你可以和你的好友进行语音通话聊天,省去打字的麻烦。语音聊天部分做成了一个小界面,你也可以选择接受还是拒绝。语音聊天准确的说可以分成2个方面,你发送语音请求给你的好友和你的好友给你发送语音请求。当语音请求得到确认的回复后开始进行语音的发送。

表情:你可以选择你想给对方发送的表情进行发送,前提是对方需要在线才可以发送。表情选择框是通过将每一张默认的表情图片都存放在一个自定义的Jlable 的子类中,并给该Jlabel子类添加事件处理,同时把每一个放表情图片的Jlabel都放到一个设置为网格布局的Jwindow子类中。在点击选择表情框的时候就产生一个Jwindow子类的实例并在聊天窗体的适当位置显示。当用户选择了表情,就获取所选表情的代号,并根据表情固定的位置和代号创建一个(Jlabel子类的)实例,将其插入到聊天输入区中(JtextPane控件中),发送时就发送每个要发送的表情的代号和其相对于文本的位置,当对方程序收到后,先(在JtextPane中)插入文字,再按表情先后顺序插入每一个表情。这样就可以实现表情文字混合聊天了。

震动:你可以给对方发送一个聊天窗口的震动,引起对方的注意,震动的发送也必须是对方在线的情况下才能发送。

清空:点击这个按钮你可以把显示在聊天记录区域的聊天内容给清空,这个清空是只针对于你自己这边的显示是清空了,但对方的聊天的内容是依然存在的。

发送:点击这个按钮后,你可以把你编辑区域的聊天内容发送给对方。如果对方不在线,咋消息保存在对方的消息管理器中,等对方上线后自己能看到你所发送的消息。如果你发送的离线消息中有表情,那么对方只能收到你的文字消息的内容,不能收到表情。

3.2 数据库输入设计

3.2.1登录界面数据的输入要求

uid (登录的帐号)输入的必须是整型,该帐号是你在注册成功后,有系统返回给你的一串整数。它是一个用户登录该软件的帐号。

upass (登录的密码)这个是你在注册的时候你自己输入的密码,可以是任意的字符串。

如果用户在登录的时候,由于输入的帐号或者密码不正确,则不会登录成功,系统会弹出相应错误的对话框。造成登录失败的原因是帐号错误还是密码都会有提示的。

2.2.2 注册界面的输入

uname(用户名)也就是所谓的昵称,在注册的时候有限制长度1—10之间。超过这个长度会提示错误,导致注册不成功。

upass(密码)注册的时候有长度限制1—20之间。超过这个长度会提示错误,导致注册不成功。

question(密保问题)注册时填写的一个密保问题,方便你忘记密码的时候找回密码而用的。

answer(密保问题答案)注册时填写的密保问题的答案,当你密码忘记时,可以通过忘记密码的功能填写相应的信息,输入密保问题的答案,从而取回你的密码。

4 总结

用Java开发GUI系统比较麻烦的就是在于界面设计。主要包括两个方面:组件不能随意设置背景图片、布局也比较困难。以前在暑期实训的时候也做过一个聊天的软件,基本和这个差不多,但是那个时候是用C#做的,在布局方面直接可以拖动组件进行布局,而这次的是全用Java代码编写的布局。随着计算机网络技术的发展,Java应用的领域也是越来越广泛。Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、完全的、结构中立的、可移植的、性能很优异的、多线程的、动态的、适合的Internet环境上开发应用系统。Java可以制作大部分网络应用程序系统,而且与如今流行的WWW浏览器结合很好。Java不仅仅是一种各方,更重要的是一种区别于传统系统,遵守“网络就是计算机”信条的平台技术。Java平台将面向对象系统扩展成包括程序和数据的网络计算机(NC),而这个平台的核心就是Java虚拟机,许多使Java成为万能开发平台的属性都源于Java虚拟机的概念和实现。

[参考文献]

[1] 北京阿博泰克北大青鸟信息技术有限公司. 使用java语言理解程序逻辑.科学技术文献出版社,2008.

[2] 谢希仁.计算机网络(第五版).电子工业出版社,2008.

[3] 钱秋乐,赵文耘,牛军钰.软件工程.清华大学出版社,2008.

[4] 徐孝凯,贺桂英.数据库基础与SQL Server应用开发.清华大学出版社,2008.

[5] 北京阿博泰克北大青鸟信息技术有限公司.使用SQL Server管理和查询数据.科学技术文献出版社,2008.

[6] 北京阿博泰克北大青鸟信息技术有限公司.使用java实现面向对象编程.科学技术文献出版社,2008.

[7] 朱站立.数据结构—Java语言描述.清华大学出版社,2005.

[8] 王珊,萨师煊.数据库系统概论(第四版).高等教育出版社,2006.

[9] 严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社,1997.

[10] Bruce Eckel.java编程思想第四版.Prentice Hall PTR,2007.

QQ chat program design and implementation

Che Yonghua

College of Computer Science

Computer Science and Technology 08339311

[Abstract]:With the advent of the information age, more and more exchanges between people tend to network. Therefore, the use of chat is very frequent, such as MSN, QQ chat tools like the widely used. In this paper, the principle of local area network communication system and computer network based on the basic principles of programming using Java as a development tool, developed a communication in the LAN communication software.

[Key words]:Java Client Server Data transfer

相关主题