当前位置:文档之家› 基于Java技术的即时聊天系统实现

基于Java技术的即时聊天系统实现

基于Java技术的即时聊天系统实现
基于Java技术的即时聊天系统实现

2015届本科毕业论文(设计)

基于Java技术的

即时聊天系统实现

代码:姓名:____ XXXX _______ 系别:计算机与信息技术学院

专业:网络安全 _

学号:____XXXXXXXX_ ____

指导教师:____ XXXXX ______

2015年 5月8日

目录

1 绪论 (1)

背景 (1)

论文研究内容与方法 (1)

2 开发环境介绍 (1)

Java技术简介 (1)

开发工具简介 (1)

3 需求分析 (1)

功能性需求分析 (2)

非功能性需求分析 (2)

4 总体设计 (2)

功能模块设计 (2)

数据库设计 (3)

5 系统详细设计与实现 (5)

界面设计 (5)

登录界面 (5)

注册界面 (5)

修改密码界面 (6)

好友列表界面 (7)

聊天窗口界面 (8)

服务器端界面 (9)

功能实现 (9)

实现登录 (9)

实现注册 (9)

实现修改密码 (10)

添加、删除好友 (10)

移动黑名单 (11)

多对多聊天 (12)

显示表情 (12)

文件的发送 (13)

历史记录 (13)

6 测试阶段 (14)

总结 (14)

参考文献 (15)

致谢 (15)

基于Java技术的即时聊天系统实现

摘要

基于Java技术的即时聊天系统采用C/S架构,MyEclipse集成开发环境和MySQL数据库为开发环境,在Window7系统下使用Java程序设计语言开发的一款聊天系统。系统主要分为:用户注册、用户登录、修改密码、好友列表、聊天等五大模块;在功能上用户能够进行添加删除好友,移动黑名单,一对一、多对多的聊天,发送表情,传送文件等操作。

关键词

Java;即时聊天系统;C/S;MyEclipse;MySQL;

Implementation of Instant Messaging System Based on Java Technology

Abstract

Java technology and C/S architecture is used in the instant messaging system,the MyEclipse integrated development environment and MySQL database as a development environment based on Java programming language,the use of Window7 system in the development of a chat system. The system is mainly divided into:user registration,user login,change password,list of friends,chat and other five modules;in function,users can add and delete friends,mobile blacklist,one to one,many to many chat,send expression,transfer files and other operations.

Keywords

Java; instant messaging system; C/S ; MyEclipse; MySQL;

1 绪论

背景

随着互联网的蓬勃发展,即时聊天已经成为如今最流行的通讯方式,尤其在移动互联网方面,即时聊天已经与我们的生活息息相关。同时,Java是一种非常流行的程序设计语言,可以用来开发面向对象、跨平台的应用程序。

即时聊天已经与我们的生活不可分割,利用自己学习到的Java语言开发一款自己的聊天软件是一个非常不错的选择,既能够检验自己对Java技术的掌握,同时又能够开发一款自己的聊天软件。

论文研究内容与方法

基于Java技术的聊天系统主要是探索如何在Java技术下能够实现即时聊天的一些基本功能:用户注册,用户登录,添加删除好友,移动黑名单,实现一对一、多对多的聊天,能够发送表情,传送图片、视频等[1]。

论文的设计主要采用了两种研究方法:一是文献资料研究的方法。在研究聊天系统现实中,本人通过图书馆、电子图书馆学习了Java语言中的一些编程技术;二是理论与实际相结合,既然掌握了技术与方法,那么就应该快速的进行实践,在软件的设计过程中,才能够理解到理论与现实的差距,遇到棘手问题,应该快速查阅资料快速攻破。

2 开发环境介绍

本聊天系统是基于Java技术的,采用C/S结构,采用MVC的开发框架,利用MyEclipse、MySQL数据库作为开发工具。

Java技术简介

Java是一种程序设计语言,主要应用于Android 应用、JSP网站、PC和游戏控制台等领域。Java语言能够使开发者在设计程序的时候能够根据自己的情况自定义数据类型和关联操作,对于程序中的数据结构的改变或者代码的改变进行相应的操作;Java语言编写的程序编译后无需再次编译,可以在任何硬件设备下运行[1]。

本次课题中主要用到Swing工具包中JFrame类,采用Java和Windows混合界面风格,作为开发程序的外观风格来设计聊天系统界面;其次,使用Java Socket编程技术实现系统之间的网络通信[2]。

开发工具简介

MyEclipse是一种集成开发软件。MyEclipse的功能强大,可以集成多种语言开发插件,进行相应开发语言的开发工作。

MySQL是一个关系数据库,底层代码是C、C++编写的,通过编译测试达到代码的可移植;而且,它支持支持Linux、Windows、Msc OS等多种操作系统,支持多线程。它的代码是开源的,用户可以在其基础上根据自己的需要进行二次开发;MySQL的体积小、速度快、成本低,因此一些小型网站的开发都选择 MySQL 作为其网站的数据库。

3 需求分析

软件系统的开发是根据用户的需求来设计开发出用户需要的软件系统或者系统中的软件部分的过程。项目流程化能够促进项目的监管、人员的合理分配。

需求分析是指对即时聊天系统的功能、非功能进行全面分析的过程,对以后开发出来的软件应该实现什么样的功能,具有什么样的界面以及软件能够达到什么样的性能等。

功能性需求分析

即时聊天系统在功能上主要能够实现如今人们经常用到的各种即时通讯软件的一些基本交流聊天的功能,主要的功能性需求如下:

1.登录界面:注册用户能够进行登录,通过连接数据库进行判断用户是否能够进入好

友列表界面。

2.注册界面:用户可以注册,注册信息可以被添加到数据库,然后用于确定用户的登

录。

3.好友列表界面:用户能够自由添加、删除好友,移动黑名单等;同时能够实现双击

好友,能够进入对应好友聊天窗口等

4.聊天界面:能够将聊天的信息、表情等显示到对应的聊天界面上;能够发送文件、

音乐、视频等;能够对聊天的历史记录进行简单的查看、翻页等。

5.修改密码界面:让用户在忘记密码或者想修改密码时候,能够进行修改密码操作。非功能性需求分析

1.操作系统:Windows7旗舰版;

2.硬盘:500G;

3.开发平台:MyEclipse2014;

4.数据库:MySQL。

4 总体设计

软件设计是从软件的用户的需求出发,根据需求分析来确定软件系统功能设计的整体结构,然后划分各个功能模块,最后确定每个模块的实现算法以及编写具体的代码,最终形成了软件的具体设计方案[3]。

功能模块设计

根据系统分析的结果画出系统功能模块图,对各个模块进行细分,确定模块相互结构关系。

图4- 1系统功能模块图

数据库设计

通过用户的注册,聊天等形成初步的数据需求;对数据需求进行概念上的设计,得到对应的E-R图;其次选择合适的方法,将E-R图转化为关系模型;然后对关系模型进行物理设计[4]。

1. E-R图设计:分析确定各个数据表的字段、数据类型、关系等,画出E-R图。

图4- 2用户属性

图4- 3好友属性

图4- 4历史记录属性

2. 物理设计:根据系统的数据类型,我们可以选择为数据库表中字段最合适的数据类型,字段大小,索引结构等[5]。

表4- 1用户信息表

序列号字段描述类型空额外

1id用户编号int(11)否主键(自增)2name用户名varchar(16)否

3zhanghao用户帐号varchar(11)否唯一

4password用户密码varchar(32)否

5sex性别varchar(2)否

6birthday出生年月varchar(32)否

7address地址varchar(32)否

表4- 2好友信息表

序列号字段描述类型空额外

1id编号int(11)否主键(自增)2zhanghao用户帐号varchar(11)否外键

3friendId好友帐号varchar(255)

4blackname黑名单varchar(255)

表4- 3历史记录表

序列号字段描述类型空额外

1id编号int(11)否主键(自增)2zhanghao用户帐号varchar(32)否

3who属于者varchar(11)否外键

4sendtime发送时间varchar(32)否

5font字体类型varchar(64)否

6record发送类容varchar(255)否

7pic表情varchar(255)

5 系统详细设计与实现

编码阶段是将软件设计阶段的各种描述转变成程序代码,在编码阶段应该注意编程语言的选择,在本次课题中,我们使用的是Java语言。

界面设计

软件界面的设计是非常重要的,对于各个模块采用不同的组件进行设计。下面简单的介绍下如何设计软件的界面。

登录界面

本即时聊天系统的登录界面(图:3-5),采用JFram容器,使用默认布局,通过setBounds()方法自定义位置。上部是一个JPanel,内置一个JLabel;中间是根据需要放置JLabel、JTExtField、JPasswordField;最下方放置一个JButton。具体代码如下:

Sjp1_jbl=new JLabel(new ImageIcon("image/"));S (0,-5,428,159);

Sjbl1=new JLabel("zhanghao");(70, 165, 30, 30);

Sjtf=new JTextField();(110, 163, 130, 30);

Sjbl2=new JLabel("mima");(70, 200, 30, 30);

Sjbl3=new JLabel("zhuce");(255, 163, 52, 30);

Sjpf=new JPasswordField();(110, 200, 130, 30);

Sjbl4=new JLabel("xiugai");(255, 200, 52, 30);

Sjp3_jb1=new JButton(new ImageIcon("image/"));

(85, 270, 195, 30);

图5- 1登录界面

注册界面

在注册界面(3-6)中同样采用默认布局自定义位置。对于JLabel、JTExtField、JPasswordField如何放置就不讲太多了,在这里主要讲下新引入的知识点HashMap集合和Graphics绘画技术。

HashMap是集合类,我们可以通过put、get方法向其中添值、取值,其最重要的一点是它是键值对形式的,通过一个键就能取出相应的值,对于本界面的全国省市联动,正好可

以用到地址的灵活变动。通过For循环创建每个省份按钮,并添加addActionListener监听器,获取其对应省份代号,再通过get方法向HashMap索要其对应的ID值。代码如下:

添加:

HashMap hm=new HashMap<>();

FOR(INT i=0;i<;i++){(province[i], ar[i]);}

获取:

if(s)){RegisterAddress Address=(RegisterAddress) (s); (), 0, City, 0, ().length); for(int i=0;i<().length;i++){ (City[i]);

}

}

Graphics可以对其进行重写,调用其方法进行绘画,对于本界面中的验证码,正是运用到此类,可以根据自己想要的样式进行绘制。代码如下:

StringBuffer randomRecv = new StringBuffer();

FOR (INT i = 0; i

if";

jl[i]=new JLabel(new ChatIcon ;

jl[i].setToolTipText(i+"");

jl[i].addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e){

if()==1){

JLabel facelabel = (JLabel)());

());

}

}

});

(jl[i]);

}

图5- 5聊天窗口界面

服务器端界面

服务端仅是用来开启Socket,界面并没有什么太多的功能,只是两个按钮而已,在这里就不做过多的介绍了。

功能实现

在实现功能之前我们需要做一些必要的共同类。首先我们需要做一个用户信息类(User),接着是信息类(Message),其次是消息类型类(MessageType),它们不需要做过多的设计,只需要定义一些需要的变量,然后对其进行Set和Get即可。

实现登录

实现登录功能还是一个比较简单的功能,只需要我们获取到用户的登录帐号和登录密码,通过对象流将对象(u)给传递给服务器,服务器通过Get方法获取帐号和密码,然后从数据库中查询用户的密码字段信息进行对比,将对比的后的信息再通过对象流的方式传递给客户端,再进行相应的处理。

代码如下:

User M=new User();

().Trim());

(new String())));

;

QqClientUser qqClientUser=new QqClientUser();

if(M)){

QqFriendListFrame PeopleList =new QqFriendListFrame(M. getUserNo ());

etS().getOutputStream());

} catch (IOException e1) {

();

}

Msges S=new Msges ();oString()+().toString()+().toString();

Str[5]=().toString()+" "+().toString()+().toString();

(Str);

User M=new User();

(Str);;

ClientUser qqClientUser=new ClientUser();

if(M)){

dispose();

new ClientLogin();

}

实现修改密码

密码的修改相对的简单,用户只需要根据相应的选项卡填写,就能够进行密码的修改,至于实现的代码如下:

User M=new User();

(m[0]);

("1");

(m[1]));

(m[2]));

;

ClientUser qqClientUser=new ClientUser();

if(M)){

dispose();

new ClientLogin();

}

添加、删除好友

添加好友相对于删除好友,是一件比较麻烦的事情,具体的思路是:当用户在添加好友输入框中输入想要添加好友的帐号,然后通过对象流将对象(m)传送给服务器,服务器通过后台HashMap集合获取好友的线程,然后将对象传递给好友。对于如何获取到好友的线程呢在这里就粗略的讲述一下:本系统在每个用户登录的时候,服务器都会为每个用户新建一个线程,同时将每个用户的线程和其帐号通过HashMap进行键值对的绑定,到使用的时候服务器只需通过帐号就能获取到相应的帐号线程,这样就能够很简单的帮我们想要传递的信息转发给相应的好友。代码如下:

public HashMap Thread=new HashMap();

quals(tr2[j])){

(tr1[i]);

}

}

}

Object[]tr=();

();

(Str);

(str2);

return al;

}

多对多聊天

多对多的聊天是本系统的一个比较亮点的设计,用户能够在同一时间跟多个用户进行聊天,对于聊天的内容不会错乱。同绑定线程一样,在用户开启好友聊天界面的时候,客户端将你的帐号同聊天好友的帐号组合在一起,通过HashMap的键值对的形式将组合后的字符串和这个窗口进行绑定,每开启一个窗口都进行绑定,等到客户端接受到服务器发送来的信息,进行相应的处理,即可将信息追加到对应的聊天窗口中。

代码如下:

Msges S=new Msges ();

if Msges ().equals(" 3")){

if()+" "+())==null){

QqFriendChatFrame FriendChat=new QqFriendChatFrame(),());

()+" "+(), qqChat);

}

QqFriendChatFrame FriendChat=()+""+ ());

if(!()){

(true);

}

(), (), (), (), (), (), ());quals("icon")){

Icon icon = ().getAttributes());

FriendChatIcon Fch = (FriendChatIcon)icons;

PictureInfo pictureInfo= new PictureInfo (i,()));

(pictureInfo);

(i+"#"+ ()+"+");

}

}

}

重组收到的表情信息串:

public void receivedPicInfo(String pic){

String[] PicInfo = ("[+]");

FOR(Int i = 0 ; i < ; i++){

String[] pp = PicInfo [i].split("[#]");

if==2){

PicInfo Spic = new PicInfo(pp [0]), pp [1]);

(Spic);ubstring (17, Fmsg[3].length()-1).split(",");

int r=(ss[0]);

int g=(ss[1].substring(2));

int b=(ss[2].substring(2));

myFont=getRecivedFont(str[3],Fmsg[0],(Fmsg[1]), (Fmsg[2]), new Color(r, g,

b));

pos3 = ();

insertrecord(myFont);

receivedPicInfo(str[4]);

insertchatpic();

}

}

6 测试阶段

软件测试不是等到开发完成以后才进行的,而是伴随着软件生命周期的整个过程,判断软件是否达到要求等。对于本软件的测试情况,我本着一个经过惠普软件测试培训者的心态,对即时聊天系统进行了相对全面的测试,各个界面的功能全部实现,从登录到注册再到修改密码,完全的没有问题,从用户添加好友、删除好友,移动黑名单,多人聊天,到发送文件等都已经实现了软件需求的功能,因此,对于此次设计的软件我还是相对比较满意的。对于软件中存在的Bug已经进行了相对的修改,对于可能隐藏的问题,我只能在后续的发现后立即进行修改;没有一个软件是没有绝对没有漏洞的,唯有我们慢慢的去发现。

总结

通过本次毕业设计,能够从中学到很多以前在课堂上学不到的知识。我们在大学的前三年中学到了很多编程语言知识,无论从最初的C语言,接着C++,后来的VB,到最后的Java 等,虽然我们学了很多理论上的知识,但是很少有时间去付诸实践。这次设计让我真正的感觉到自己学到了一些东西,并且功能设计出自己想要的软件。虽然在设计的过程中,难免会遇到问题难以解决,通过查阅资料上网查找答案等,让我知道这些问题并不是只有自己遇到,同样的在学习的过程中别人也遇到过,我们应该将其攻破克服,只有这样我们才能够掌握更多的知识,对知识更加的理解,不能因为一个小小的问题就轻言放弃。在开发的时候发现Java语言有些地方让自己感到头痛,动不动就要重写类,而且重写之后系统还不稳定,例如:JTree的节点图标和把柄图标的修改,前期修改的时候,图标完全是叠加在一起的,现

如今虽然稳定了一些,但是有时还是会出来这样的问题。对于如果想要实现自己的方法,就有重写Java类,而且有些自己还不会重写,这是最让人烦恼的;曾经想过要放弃,重新选择一个设计,最后终于还是坚持过来了。学习编程语言本来就是一件不容易的事情,我们不能遇到问题就轻言的放弃,而是要坚持到底,我们才能够学到知识,学到比别人好,懂的比别人多。总之,本次课题设计的研究让我懂得了更多的知识,对Java语言有了进一步的了解;同时觉得自己运用到自己学习到的知识能够设计出自己想要的东西,这是自己感觉最高兴的事情。希望在以后能够学的更多,学到更好!

参考文献

[1] 印旻,王行言.Java语言与面向对象程序设计(第二版)[M].北京:清华大学出版社,

[2] 辛运帏,饶一梅.Java语言程序设计[M].北京:人民邮电出版社,

[3] 张晓龙,刘钊.JAVA程序设计基础[M].北京:清华大学出版社,

[4] 邱李华.SQL Server 2008数据库应用教程(第二版)[M].北京:人民邮电出版社,

[5] 王珊,萨师煊.数据库系统概论(第四版)[M].北京:高等教育出版社,

致谢

在论文即将完成时候,我有种如释重负的感觉。从选择这个课题之后,我就在为完成它而不停的努力着,无论是从最基础的Java知识点开始学起,还是到如今将整个系统开发完成,这里不仅仅有我个人的辛苦努力,同时还有指导老师的帮忙,还有那些帮助我的朋友们,在这里我向你们送上最真挚的谢意,谢谢你们的帮忙,让我能够从当初的一无所知,到整个论文的完成,这里不只有我个人的功劳,同时还有你们的功劳,谢谢!

相关主题
文本预览
相关文档 最新文档