基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx

上传人:b****5 文档编号:17254765 上传时间:2022-11-29 格式:DOCX 页数:17 大小:28.98KB
下载 相关 举报
基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx_第1页
第1页 / 共17页
基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx_第2页
第2页 / 共17页
基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx_第3页
第3页 / 共17页
基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx_第4页
第4页 / 共17页
基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx

《基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx》由会员分享,可在线阅读,更多相关《基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx(17页珍藏版)》请在冰豆网上搜索。

基于Java的网络即时通讯系统的设计与实现熊小敏Word下载.docx

database;

interface

0 引 言

随着网络的逐渐普及,人们对网路即时通讯的需

求越来越大,并且需要的增值服务越来越多,即时通

讯(IM)技术便随之迅速发展,人们最为熟悉的QQ和

ICQ就是典范。

而针对企业的专业化即时通讯也迅

速成长,具备安全性和多用途的互动办公通讯软件平

台随之诞生,它们大都集成文字、声音、视频、屏幕、即

时邮件、文件共享与下载的诸多功能,能满足用户的

各种需要。

并且即时通讯(IM)技术有将无线通讯融

入计算机网络的趋势,其前景是非常光明的。

1 即时通讯系统的设计与实现

1.1 系统窗体模块

1.窗体模块组成。

首先声明此系统只有客户端有窗体,程序从类

New开始运行。

开启客户端,产生登录选择窗体A。

A中“登录”按钮激活客户端主程序窗体B,A中“注

册向导”按钮激活用户注册窗体C。

B中“下载”按钮

激活文件选择窗体D,B中“查找”按钮激活查找窗体

E,B中“直接加友”按钮激活添加好友窗体F,详见

图1。

  2.窗体的实现。

对于窗体的实现,使用了Java提供的javax.swing

package中的类,主要是考虑到实现的方便,在

JBuilderHelp当中有如下记载:

Thejavax.swingpackageprovidesasetof“lightweight”

(all-Javalanguage)componentsthatautomaticallyhavethe

lookandfeelofanyOSplatform.wingcomponentsare

100%PureJavaversionsoftheexistingAWTcomponent

set,suchasbutton,scrollbar,andlabel,withanaddi-

tionalsetofcomponents,suchastreeview,table,and

tabbedpane。

javax.swing包提供一套“轻量级”的(相对所有

Java语言)组件,他们可以在任何操作平台上自动体

现出视觉效果,Swing组件是已存在的AWT组件的纯

Java改编体,包括诸如button、scrollbar和label等组

件,另外还包括额外的一套组件,诸如tree、table和

在此系统中主要是通过JFrame、JDialog等来实现

窗体的,窗体中各部件的设计是通过JBuilder9提供

的VisualJavaBeansdesigners来完成,类似VB的控件

设计,“所见即所得”,非常的方便,对于用鼠标激活

功能是通过addMouseListener()方法实现的,另外要指

出的是关于JList的,为了能产生一定的表单效果,实

现过程中是用add(newJScrollPane(list))方式将表单

加入窗体的,而括号中的list是扩展了的,如代码中

的classNameAndPicListCellRendererextendsJLabelim-

plementsListCellRenderer{}中就指出了相对鼠标点击

表单和其他各表单项的显示方式。

3.窗体背景图的实现。

要实现背景图,首先需要图片资料,在此系统中

只是简单地用AdobePhotoshop做了三个主窗体的“装

饰”图,用的是GIF格式。

为了能使之成为背景图,而

不遮住各个部件,在窗体与部件之间增加了一个JJ-

Panel类的部件,通过传递变量来指定载入的背景图。

JJPanel类的实现方式classJJPanelextendsJPanel{}继

承了JPanel的特性,而正是publicJJPanel(intx){s

=x;

}这个构造函数使得三个窗体可以选择各自的

背景图,当然,还需要做的就是重载paintComponent方

法,它给了我们导入背景图的“机会”。

值得注意的是

对于注册窗体和登录窗体,增加的JJPanel类的部件

使用的布局是null(一般在JB平台下进行部件的设

计,均使用null,这样,编程者可随心设计),而对于主

程序窗体,使用了GridLayout布局,主要是考虑到list

部件是通过add(newJScrollPane(list))的方式加入的。

1.2 数据库的启用和连接

假设在数据库的设计中,我们生成了QQ.mdb。

为了让服务器能使用它,在Windows平台下选择管

理工具数据源,打开ODBC数据源管理器,选系统

DSN添加,选择MicrosoftAccessDriver(*.mdb),按

确定后选择我们已生成的数据库QQ.mdb,取数据源

名为:

QQ,用于服务器的连接。

服务器程序启动后通过Class.forName(″sun.jdbc.

odbc.JdbcOdbcDriver″)加载数据库驱动,通过Connec-

tionc=DriverManager.getConnection(″jdbc:

odbc:

QQ″,″

″,″″)连接数据库(空的两项是数据库用户名和密

码,有内容的话可增加安全性),这样服务器就可以对

数据库进行操作与维护了。

1.3 用户注册的后台实现

用户在窗体中将所需信息输入后,按“登录”按

钮,激发事件,首先将客户端连接到服务器,这是通过

TCP的Socket方式实现的:

Socketsocket=newSocket

(InetAddress.getByName(server),serport),服务器在创

建一个Serversocket后,accept()方法用于等待客户程

序的这个连接,连接完毕后建立BufferedReader和

PrintWriter输入输出流,将用户信息发送至服务器,服

务器以相同的流方式接收,而后服务器连接数据库,

新增一项,将数据写入cmp表,返回用户注册号码,客

户端在收到号码后即可登录服务器了。

1.4 用户登录的后台实现

用户在注册了号码后,即可用其登录服务器,客

户端将用户名和密码通过TCP的Socket方式传送至

服务器,服务器将收到的用户名作为条件查询数据

库,得到对应的密码,将从数据库中读到的密码与通

过流得到的密码进行比较,若相同则可激活客户端主

程序,并将其Status字段设为1表示上线了以及注册

其IP地址,并同时开始创建UDP以便在用户之间建

立联系。

然后客户程序向服务器请求读取好友名单,

服务器收到该请求,开始读取数据库中的friend表,

得到好友的号码后,再在cmp表中读取好友资料,然

后向客户端发送这些信息,客户收到后就在主窗口显

示好友,比如头像、呢称,并且建立几个矢量(Vector)

用以存储好友的呢称、hicq号码、头像编号、IP地址等

信息。

若不同返回错误提示给客户端。

1.5 客户端功能键的功能实现

对于客户端功能键,在此系统中包括按钮和右键

菜单选项,按钮是通过生成Button实例加入到窗体中

的,用setText()方法设置标题,用setBounds(newRect-

angle())设置按钮位置和大小(在JB下编程者只需绘

制出部件)用addMouseListener(newjava.awt.event.

MouseAdapter(){})方法响应鼠标的操作,而该方法中

的MouseAdapter(){}指定了程序将要进行的操作

XXX(e),该方法的内容就是我们用鼠标点击后程序

将要做的事了。

另外需要指出的是JJButton这个类,

和JJPanel类的实现方法类似,同样引入参数和重载

paintComponent()方法,它用来加入按钮的背景图,让

按钮获得一定的“装饰”。

右键菜单选项是通过将

JpopupMenu实例加入到Jlist的鼠标响应方法中来实

现的,响应选项的操作就和按钮的基本一样了。

1.6 客户端之间的信息交换,中文聊天和维护好友

表的实现

  客户端之间的通信是通过UDP协议的,此系统

使用Java包中的DatagramPacket和DatagramSocket,每

进行一次通讯就用DatagramPacket包装一次而后通过

DatagramSocket向指定的IP地址(从登陆后保存在

Vectorfriendips的IP信息中获得)方发送信息,接收方

以同样的方式解包获得所需信息,这主要是用于用户

之间的信息提示,如告诉好友下线、上线,通知对方自

己已将其加为好友,而要进行中文聊天,就要用到

ByteArrayOutputStream、DataOutputStream这类流,实现

的方式如下:

Stringsk=sendtext.getText().trim();

ByteArrayOutputStreambs=newByteArrayOutputStream();

DataOutputStreamds=newDataOutputStream(bs);

ds.writeUTF(sk);

//支持UTF-8编码格式,可确保中文识

别。

将获得的信息进行包装后发送出去,为了能正确

解包获得信息,接收方需要用相对应的流进行处理,

所以此系统中客户端的UDP通信内容均用此方式处

理过,只是在收到信息后先检测是否为信息提示,如

不是,就按聊天信息处理,提示用户接收;

如是,就按

照信息提示维护好友列表,先根据信息提示获得一组

临时数据(int或String型),客户端在登录服务器时会

将好友信息保存在预先设好的一组向量(Vector)中,

这已在前面论述。

将临时数据和向量中保存的数据

进行比较,已确定将对向量中的哪个数据作出反应,

包括改变图标颜色,添加删除表单。

改变图标颜色可

以通过setElementAt()方法实现,而添加删除表单可

通过removeElementAt()方法实现,当然还需要更新向

量内容和通知服务器修改数据库的数据,这两点很重

要,好友列表需要保持和向量、数据库一致。

1.7 客户端与服务器间的通讯实现

我们知道,客户程序和服务器程序是通过TCP

的方式通讯的,我们从服务器的角度出发,知道其需

要完成多种操作,所以在实现时,客户端在使用TCP

与服务器建立了联系之后,会首先发送一标记,服务

器通过识别该标记(利用if语句)来继续完成相应

的操作。

用户添加好友:

客户登录,按查找按钮后,开始

向服务器发出查找请求,服务器读取数据库表cmp并

向客户返回其结果,客户收到后在查找窗口中显示,

如果用户选择了一个好友,就向服务器发送添加好友

请求,服务器收到后就向数据库表friend中添加自己

的号码以及好友的号码,并从cmp表中读取其基本信

息返回给客户端,然后客户收到并在主窗口显示该好

友。

并且通过UDP通知该客户,对方收到该消息后,

可以选择是否添加该用户为好友。

用户删除好友:

用户在其好友列表中选择要删

除的好友并按删除,然后向服务器发送删除请求,服

务器收到该请求后,连接数据库表friend删除用户及

该好友的记录,如果成功就向客户返回成功消息,客

户收到后在其好友列表中删除该好友。

1.8 客户端下载文件的实现

客户登录,按“下载”按钮后,生成一个ChatFrame

实例,这个类是为完成文件传输而专门抽象出来的

类。

用户在产生的窗口中输入所需的文件名,按确

定,则客户端通过TCP方式将文件名发送至服务器

(在之前先发送了请求下载的标记),服务器识别后

查找文件是否存在,若存在,则返回客户端“ok”并开

始传输文件,客户端收到“ok”信号则开始接收文件,

文件下载完毕提示用户“传输完毕”,若未收到“ok”信

号则提示用户“未找到此文件”。

为了保证传输的文

件能被对方识别出来,采用了字节传输(聊天是采用

字符传输)方式,即使用了BufferedOutputStream这类

流,实现代码如下:

BufferedOutputStreampout=newBufferedOutputStream(new

FileOutputStream(filename));

BufferedInputStreambufget=newBufferedInputStream(socket.

getInputStream());

inti;

bytec[]=newbyte[1024];

while((i=bufget.read(c))!

=-1)

pout.write(c,0,i);

这样将数据以字节的方式一段一段地写入文件,

文件即可完全复原,让接收方在得知传送完毕后即可

使用文件,而后关闭流。

1.9 客户端之间文件传输的实现

客户登录,选中文件传输的对象,弹出菜单,点击

“文件传输”,此时客户端搜集到对象的IP地址并保

存,而后弹出文件选择窗口,在选定文件后,客户端获

得文件名,将其发送至服务器,服务器识别后返回信

息,而后客户端开始传输文件,客户端将文件传输完

毕后,通过UDP的方式根据IP地址和文件名通知需

要此文件的另一客户程序。

对方在识别收到的信息

提示后,产生一个ChatFrame实例,即一个信息窗口,

此时文件名已显示出来,若当时就需要,按“确定”,否

则可按取消,事后通过下载的方式接收所需文件。

1.10 程序界面的风格选择

前面已论述到程序界面使用的是javax.swing的

类,产生出来的程序是Java风格的,而我们是在Win-

dows平台下使用。

对此,可使用UIManager类的set-

LookAndFeel()方法改变界面风格,在此系统中我们指

定了风格为Windows的经典界面,实现如下:

(下转第94页)

91 2005年第12期熊小敏等:

bedpane。

90计 算 机 与 现 代 化2005年第12期

收稿日期:

2005-11-18

作者简介:

熊小敏(1965-),男,江西南昌人,江西公安专科学校副教授,研究方向:

网络通信,数据库技术;

刘瑛(1967-),女,江

西南昌人,南昌市人民警察学校讲师,研究方向:

网络通信,网络安全;

陈惠清(1958-),女,江西崇仁人,江西旅游商贸学院现

代教育技术中心,实验师,研究方向:

计算机网络。

databa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1