当前位置:文档之家› 基于Java的网络聊天工具的开发与实现毕业论文设计

基于Java的网络聊天工具的开发与实现毕业论文设计

中文摘要

当前是信息网络得到飞速发展的时代,尤其是计算机和通信技术的发展和结合,深深的影响着我们的生活、学习和工作方式。其中,网络聊天工具成为人们日常交流的一种重要工具,它成本低,通信速度快,方便信息交流和资料的传递。目前应用比较广泛的聊天工具有腾讯QQ、Net meeting、MSN 等,这些软件简单易用,深受大众喜欢。

在论文中,首先论述了系统的开发背景,并对所用到的开发工具与关键技术做了简单的介绍。接着对系统的研究意义,研究现状及设计目标进行分析,通过对系统需求和可行性进行分析,确定了系统的功能模块,并画出相应的功能结构图、模块图。其次按系统总体设计的结果,对系统进行结构设计。

本次开发的网络聊天系统是基于开放的Java应用程序设计的,能动态、实时地完成信息的传递,且具有高效的交互性,能更有效地处理客户请求,易于维护和更新。系统采用客户机服务器的架构模式,由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,使用Java提供的Socket类以及Java的多线程功能,在不同的端口上部署各类服务,可以在单个程序中同时运行多个不同进程,而客户端通过Socket发送信息给服务器,从而实现多点对多点的聊天。

关键词:Java,交互性,Socket类,多线程

ABSTRACT

The rapid development of the information networks, especially the development and integration of computer and communication technologies, important tool for daily communication, because of it’s low cost, fast communication and facilitate information exchange and data transmission. Currently used widely in the chat tool are Tencent QQ, Net meeting, MSN, etc.

In the paper, firstly I discuss the background of the development of the system and simply introduce the development tools and key technologies used. Secondly I analyze the research and design objectives to the significance of the system. Through the system requirements and feasibility analysis, I determine the functional modules of the system and draw the corresponding function block diagram, block diagram. Then according to the results of the overall system design, I design the structural of the system.

The development of the Internet chat system is designed based on open Java application. It can be dynamic, real-time information transfer and efficient interaction so that it can deal more effectively with customer requests, easy to maintain and update. The system will use the client server architecture model, which includes the client program and server programs plus server-side database used to store customer data. By using the socket class provided by java and java multi-threading capability,we can deploy various services on a different port and a number of different processes can be run simultaneously in a single program. Clients send information to the server through the socket in order to achieve multi-point-to-multipoint chat.

Key words:Java, interactivity, the Socket class, multi-threaded

目录

第1章绪论 (1)

1.1课题背景 (1)

1.2开发技术 (1)

1.2.1 Java (1)

1.2.2 TCPIP (3)

1.2.3 Socket (4)

1.3开发工具 (5)

1.3.1 Eclipse (5)

1.3.2 StarUML (6)

第2章系统需求分析 (7)

2.1基本功能需求 (7)

2.2性能需求 (7)

2.3界面需求 (7)

第3章系统设计 (8)

3.1系统功能设计 (8)

3.2系统总体设计 (9)

3.2.1 系统方案设计 (9)

3.2.2 系统功能模块图 (9)

3.2.3 系统类图 (10)

3.2.4 系统用例图 (11)

3.2.5 时序图 (12)

3.2.4活动图 (12)

第4章系统实现 (17)

4.1数据库连接实现 (17)

4.2登录、注册功能实现 (18)

4.3聊天功能实现 (20)

4.4好友管理功能实现 (25)

4.5资源共享功能实现 (30)

总结 (34)

参考文献 (35)

致谢 (36)

第1章绪论

1.1 课题背景

现在互联网越来越发达,网络聊天工具成为人们日常交流的一种重要工具,它成本低,通信速度快,方便信息交流和资料的传递,所以开发一个界面友好、易于操作的聊天工具能较好地解决电话的单线程通信以及费用高昂等问题。随着网络普及程度的提高,人们对于通信软件的要求越来越趋于简单操作,同步实时,以及更简单的网络传输。

本次开发的网络聊天系统是基于开放的Java应用程序设计的,能动态、实时地完成信息的传递,且具有高效的交互性,能更有效地处理客户请求,易于维护和更新。

系统分为两部分:客户端和服务器端。客户端主要实现新建用户、用户登录、好友管理和消息的收发功能以及群聊功能,客户端申请与服务器端建立连接,当客户端与服务器端建立连接通道后就可以像服务器端发送新建用户信息和登录信息,以及好友管理、信息编辑、发送和接收的功能;服务器端主要完成建立连接、数据库操作和监听客户三大功能,服务器端建立一个Server Socket 的连接,不断侦听客户端是否建立连接或断开连接,如果有客户端申请连接就启动线程与客户端建立连接并按照客户端的请求对数据库进行操作并把结果返回给客户端。

1.2 开发技术

1.2.1 Java

Java是一个由Sun公司开发的新一代高级编程语言。它可在各式各样不同机器、不同操作平台的网络环境中开发软件。不论你使用的是哪种WEB浏览器,哪种计算机,哪种操作系统,只要WEB浏览器上面注明了“支持Java”,并且装有JAVA控件,你就可以看到生动的主页。Java正在逐步成为Internet应用中最主要的开发语言,它彻底改变了软件开发模式,带来了自PC机以来又一次革命,为飞速发展的网络世界增添了新的动力。

(一)JAVA的主要特点

Java语言有下面一些特点:简单、面向对象、分布式、解释执行、安全、体系结构中立、可移植、高性能、多线程以及动态性。

1.简单

Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务。Java略去了运算符重载、多重继承等模糊的概念,且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。

2.面向对象

Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。

3.分布性

Java是面向网络的语言。通过它提供的类库可以处理TCPIP协议,用户可以通过URL地址在网络上很方便地访问其它对象。

4.安全性

用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用“特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

5.体系结构中立

Java解释器生成与体系结构无关的指令,Java程序可在任意的处理器上运行。这些指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。

6.可移植性

与平台无关的特性使Java程序可以方便地被移植到网络的不同机器上。另外,Java编译器是由Java语言实现的,Java运行时系统由标准C实现,这使得Java 系统本身也具有可移植性。

7.解释执行

Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。

8.高性能

和其它解释执行的语言如BASIC不同,Java字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。

9.多线程

多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。

10.动态性

Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。

(二)丰富的类库Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。

1.语言包提供的支持包括字符串处理、多线程处理、例外处理、数学函数处理等,可以用它简单地实现Java程序的运行平台。

2.实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。

3.输入输出包用统一的流模型来实现所有格式的IO,包括文件系统、网络、输入

4.低级网络包用于实现Socket编程。

5.抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同平台的机器。

6.网络包支持Internet的TCPIP协议,提供了与Internet的接口。它支持URL连接,WEB即时访问,并且简化了CS模型的程序设计。

1.2.2 TCPIP

(1) TCPIP协议的特点:

TCPIP(Transmission Control ProtocolInternet Protocol)是传输控制协议网际协议的缩写, TCPIP是当今网络互联的核心协议。TCPIP协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。

IP协议的作用:第一,它是网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。

TCPIP协议具有以下特点:

1、协议标准具有开放性,其独立于特定的计算机硬件及操作系统,可以免费使用。

2、统一分配网络地址,使得每个TCPIP 设备在网络中都具有唯一的IP地址。

3、实现了高层协议的标准化,能为用户提供多种可靠的服务。

(2)TCPIP协议进行传输数据传输的过程:

应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP 数据包封装在IP包内,通过网络送给目的TCP。接收方TCP在接收到数据后通知上层应用程序,TCP将保证接收数据的正确性。TCP调用IP接口,向TCP提供所有TCP需要的服务。

(3)端口号:

有的时候,一个IP地址不能完整的标识一台服务器,这是应为一台物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是端口。端口实际是一个16位长的地址,他的范围是0~65535之间,其中0~1023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都只道的,1024~65535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的客户端应用程序。在数据传输过程中,各种服务器不断的检测分配给他的端口,一边发现要求和他通信的客户端。

1.2.3 Socket

Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。

具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。

Socket程序的工作过程:

1、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。

2、数据通信:利用虚拟连接通道传送数据信息进行通道。

3、关闭:通信结束时,再将所建的虚拟连接拆除。

具体如下

图1.1 Socket套接字原理图

1.3开发工具

1.3.1 Eclipse

集成开发环境(Integrated Development,简称IDE)软件是用于程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。就是集成了代码编写功能、分析功能、编译功能、debug功能等一体化的开发软件套。所有具备这一特性的软件或者软件套(组)都可以叫做IDE。

Eclipse只是一个框架软件,本身不能开发程序,但它可以安装各种插件。正是运行在Eclipse平台上的种种插件,提供了程序开发的各种功能。同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。

Eclipse是一个非常成功的开源项目,相对比Borland公司的王牌JBuilder 来说,拥有绿色软件、免费、插件多、功能强大等优点,相对于现阶段的开发来说,使用Eclipse作为开发工具是最好的选择。

Eclipse是绿色软件,其下载与安装非常简单,但是如果需要使用Eclipse 来开发J2EE,为了提高开发的效率,可以下载MyEcilpse插件或者Lomboz插件,其中Myeclipse是收费软件,可以直接下载exe进行安装,而Lomboz是开源插件,其使用是完全免费的。

1.3.2 StarUML

StarUML是一个开源的UML建模工具,它遵守GNU GPL开源条约,StarUML项目宣称的目标是代替大型的商业UML工具软件,如IBM的Rational Rose,Borland公司的Together。它具有如下一些特点:

●可绘制多种UML图:用例图、类图、时序图、状态图、活动图等。

●完全免费:StarUML是一套开放源码的软件,不仅免费自由下载,连代码都免费开放。

●可导出多种格式图片:JPG、JPEG、BMP等格式的图片文件。

●正反向工程:StarUML可以依据类图的内容生成Java、C++、C#代码,也能够读取Java、C++、C#代码反向生成类图。反向工程有两个主要用途,其一是旧有的源码反转成图之后,可以构建UML模型的方式继续将新的设计添加上去;另一项用途是想要解析源码时,可以通过反转的类图来理解,不再需要查看一行又一行的代码,这将节省大量的时间和精力。

●导入Rose文件:StarUML可以读取Rational Rose生成的文件,让原先Rose 的用户可以转而使用免费的StarUML。

第2章系统需求分析

2.1 基本功能需求

1)聊天

私聊:私聊就是两个之间聊天,即一对一。

群聊:就是多人一起聊天,即一对多。

2)好友管理

查找好友:根据好友IP查找好友信息

添加好友:根据查找到的好友信息,将其添加为自己的好友。

删除好友:在好友列表中将好友删除。

备注姓名:对好友进行姓名备注,方便自己记忆。

3)资源共享

设置共享资源路径,添加共享文件或目录,启动文件共享。

2.2 性能需求

支持网络通信,实现全方位、多功能的信息通信功能。尽量减少服务器的开销及数据传送负担,提高数据利用效率和数据传送效率,避免无效数据的传输。

2.3 界面需求

界面设计美观,人机交互界面友好,聊天对话框线程支持,实现无限制数量用户聊天,服务器端无特殊要求。

本应用程序需要有4个窗口来展示用户需要的信息和列表,分别是系统主窗口、用户列表窗口、通信窗口和系统设置窗口。

根据已有的需求信息和功能分析,设计的系统主窗口具有用户基本信息、当前时间、好友列表等显示功能。其中,好友列表初始显示在主窗口中。通信窗口包括对方用户名、对方形象、对方主机信息和IP信息。系统设置窗口主要包括设置共享资源的路径以及系统升级路径(暂未实现)、系统公告路径(暂未实现)等。

第3章系统设计

3.1 系统功能设计

1)用户注册

服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的昵称,密码,性别,头像,个人资料等,接受完毕后,便通过后台数据库连接,然后向数据库添加记录。客户收到服务器返回的信息后,便打开主登陆窗口。

2)登陆

在客户端,用户输入其用户名和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的表,通过读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个矢量(Vector)用以存储好友的呢称,IP号。

3)私聊

私聊就是两个聊天。客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。

4)群聊

群聊,就是多人一起聊天。过程与私聊差不多。唯一的不同就是服务器会将信息转发给指定的一到多个成员。

7)查找、添加、删除好友以及备注姓名

输入要查找的用户IP号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。打开一个用户信息显示界面,点击“添加为好友”菜单项后可将此人加为好友。如果未找到,弹出一个信息提示框。在好友列表中打开用户信息显示界面,点击“删除该好友”菜单项后可将此人删除,若点击“备注姓名”则可以对好友进行姓名备注,分别记忆以及管理。

9)资源共享

在共享功能之前,要设置好共享资源路径,如果设置不好,好友将无法看到这些共享的文件或网络资源。还有一个重要的步骤就是添加共享文件或目录。最后启动资源共享。

3.2 系统总体设计

3.2.1 系统方案设计

图3.1 系统方案设计图

3.2.2 系统功能模块图

本系统主要由由三个子系统组成:1)聊天子系统;2)好友管理子系统;3)资源共享子系统。

聊天系统的功能主要有:1)私聊;2)群聊。

好友管理系统的功能有:1)查找好友;2)添加好友;3)删除好友;4)备注姓名。

资源共享系统的功能主要是访问好友的共享资源。

示意图如下:

图 3.2 系统功能模块图3.2.3 系统类图

图3.3 系统类图

Socket:非自定义类,https://www.doczj.com/doc/7a10077358.html,.Socket。

Thread: 非自定义类,java.util.Thread。

Client:负责具体发送和接收数据。

FromServerListen:监听服务器是否在发送数据。

MainFrame系统的主界面(包括用户列表等)。

QQUserInfo包括用户的好友列表信息等。

QQUserClass包括用户的个人信息,如IP、用户名等。

3.2.4 系统用例图

图3.4 系统用例图

本图说明:用户注册、登录后,可以操作以下三个功能模块:即聊天功能,好友管理功能以及资源共享功能。其中,聊天功能又分为私聊和群聊;好友管理分为查找好友、添加好友、删除好友以及备注好友姓名;资源共享主要是用户可以分为好友的共享资源。

3.2.5 时序图

客户登录、注册时的服务器端时序图

图3.5 登录、注册时序图

本图说明: 服务器接每次与一个客户连接以后,就会去创建一个监听线程。通过线程来接收客户端发送的所有数据。如果要查询数据库,监听线程会请求获得一个数据库连接.如果数据库连接已经获得,就把连接交给DBOperation对象,通过此对象可以返回给监听线程必要的结果。最后监听线程会通过Socket 将结果返回给客户端。

3.2.4活动图

1)用户登录活动图

图3.6 用户登录活动图

本图说明:首先用户在客户端填写登录信息,提交以后服务器会对用户名和密码进行验证。如果不正确,返回一个提示信息。如果登录成功,就更新好友列表登录到主窗口页面。

2)客户之间的通信活动图

图3.7 客户端通信活动图

本图说明:用户编写信息后,点击将消息发送以后,服务器端对应的监听线程会接收到一个数据包。此包中包含接收者的信息,如果接收者开启了MyQQ,数据包将会转发到接收者。否则就写入数据库,等接收者开启MyQQ之后再将信息发送给对应的接收者。

3)访问共享资源活动图

图3.8 访问共享资源活动图

本图说明:客户端通过设置共享资源路径将自己的资源共享。当需要访问某个好

友的共享资源时,服务器就会搜索好友设置好的共享资源路径,通过路径打开共享网络资源。若好友设置的路径错误或好友并没有设置共享资源路径,则提示访问错误信息。

4)好友管理活动图

图3.9 好友管理活动图

本图说明:用户根据好友IP号查找好友,如果此IP存在,就将用户信息发送到客户端。同时将好友关系写入到数据库。删除好友时,客户向服务器发

送删除好友请求。服务器接收到删除好友请求以后,将好友关系从数据库中删除。当客户端向服务器发送备注姓名请求时,服务器会获取用户输入的姓名,并将其写入数据库中,同时更新好友列表框中的好友姓名。

第4章系统实现

4.1 数据库连接实现

访问数据库是一个重要的环节,也是比较程式化的部分。本系统采用Java DB 数据库,数据库名称为db_MyQQ。它包含两个表,一个是用户信息表,另一个是窗体信息表。分别如下:

表4.2 窗体信息表(QQMessage)

其中数据库的开发主要步骤是:

(1)下载驱动、构建路径

(2)访问数据库的类

核心代码如下:

package com.myqq.dao;

import java.awt.Rectangle;

public class Dao {

private static final String driver =

"org.apache.derby.jdbc.EmbeddedDriver";

private static String url = "jdbc:derby:db_MyQQ";

private static Connection conn = null;

private static Dao dao = null;

private Dao() {

try {

Class.forName(driver);

if (!dbExists()) {

conn = DriverManager.getConnection(url + ";create=true");

createTable();

} else

conn = DriverManager.getConnection(url);

addDefUser();

} catch (Exception e) {

e.printStackTrace();

JOptionPane.showMessageDialog(null, "数据库连接异常,或者本软件已经运行。");

System.exit(0);

}

}

private boolean dbExists() {

boolean bExists = false;

File dbFileDir = new File("db_MyQQ");

if (dbFileDir.exists()) {

bExists = true;

}

return bExists;

}

public static Dao getDao() {

if (dao == null)

dao = new Dao();

return dao;

}

4.2 登录、注册功能实现

1)用户注册

服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的昵称,密码,性别,头像,个人资料等,接受完毕后,便通过后台数据库连接,然后向数据库添加记录。客户收到服务器返回的信息后,便打开主登录窗口。

2)登录

在客户端,用户输入其用户名和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的表,通过读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个矢量(Vector)用以存储好友的呢称,IP号。

登录页面如下:

图4.1 登录页面图

注册页面如下:

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