简易聊天工具详细设计报告

简易聊天工具详细设计报告
简易聊天工具详细设计报告

简易聊天工具总体设计报告

班级:网络工程10-1班

姓名:

学号: 08103609

指导老师:

目录

一、引言 (1)

设计聊天工具的背景及意义 (1)

课题现状 (1)

开发平台介绍 (1)

二、需求分析 (2)

编写目标 (2)

可行性分析 (2)

分析需求 (2)

2.3.1 功能需求分析 (2)

2.3.2 数据需求分析 (2)

2.3.3 性能需求分析 (3)

2.3.4系统运行需求 (3)

本系统的主要功能部分组成: (3)

2.4.1服务器端模块 (3)

2.4.2客户端模块 (3)

数据流图 (4)

2.5.1 顶层数据流图 (4)

2.5.2一层数据流图 (4)

2.5.3二层数据流图 (5)

三、概要设计 (6)

系统总模块图 (6)

模块功能之间的关系 (7)

3.2.1服务器端模块 (7)

3.2.1.1用户上下线识别及显示模块 (7)

3.2.1.2信息识别转发模块 (7)

3.2.2客户端模块 (7)

3.2.2.1用户注册模块 (7)

3.2.2.2用户登陆模块 (7)

3.2.2.3用户密码修改模块 (7)

两大模块工作流程 (8)

系统数据结构设计 (9)

3.4.1数据逻辑设计 (9)

3.4.2数据字典 (9)

四、详细设计与编码实现 (10)

服务器端详细设计 (10)

4.1.1服务器界面设计 (10)

4.1.2服务器程序类 (11)

4.1.3服务器端连接用户的线程设计 (12)

4.1.4服务器端线程的管理 (13)

客户端的详细设计 (13)

4.2.1界面包的设计(view包) (14)

4.2.1.1用户登录界面 (14)

4.2.1.2用户好友列表界面 (15)

4.2.1.3用户聊天界面 (18)

4.2.2模块包的设计(model包) (19)

4.2.2.1客户端连接服务器类 (19)

4.2.2.2客户检查使用者类 (20)

4.2.3用户端工具包的设计(tools包) (21)

4.2.3.1客户端连接服务器线程类 (21)

4.2.3.2管理客户端连接服务器线程类 (22)

4.2.3.3管理用户的聊天界面的类 (23)

4.2.3.4管理好友列表、黑名单界面类 (23)

公共包的详细设计 (23)

4.3.1User类 (23)

4.3.2包的种类定义类 (24)

4.3.3传输包定义类 (24)

五、运行测试 (26)

1.首先开启服务器 (26)

2.进行用户登录 (26)

3.用户之间聊天 (28)

六、结束语 (29)

参考文献 (30)

一、引言

设计聊天工具的背景及意义

随着计算机科学技术的飞速发展,网络越来越深刻的改变着人们生活方方面面。各种基于网络的应用技术在人们的政治、经济、生活等的各个方面都发挥着重要的作用。例如QQ,MSN等基于Internet的即时聊天工具。这些工具通过网络这个新兴的媒介进行信息交流相比其他传统媒介具有数据量大,实时性强,操作简单,成本低廉等优点。不仅如此即时聊工具还具备许多传统媒介不具备的强大功能,它们能传送文字、声音、影像和文档,而且能更加人性化的显示联络人的名单和通信状态。因而它们在现实生活中受到了广泛的欢迎,这是有目共睹的。目前基于Internet的即时聊天工具已经做的非常完美,然而基于局域网的即时聊天工具却不如人意。而在高等教育方面,网络展现出不可替代的作用。为了适应现代信息化,教学局域网就应运而生。而教学局域网内的即时通信能力则显得尤为重要。所以对于学校和公司内部网络等机构,局域网即时聊天的应用还是相当重要的。一个好的局域网通信软件将对学校和公司的运作产生积极的影响。

课题现状

基于局域网的即时通信软件的核心技术其实与基于Internet的即时通信软件的设计技术是一样的,只是规模较小。基于Internet的通信工具一般是采用UDP或TCP协议来实现的,开发技术已经非常成熟。比如QQ、MSN等等,它们都是基于Internet的即时通信软件,它们不仅实现了即时聊天、文件传输等功能,而且还能够实现网络即时视频、语音聊天功能。它们的功能正在不断扩充,使其更加人性化,满足人们更多的需求。这类软件其实都是在下层协议的基础之上,通过网络通信接口进行设计的软件产品。在局域网内,这类软件的设计比在Internet中设计更为简单。因为Internet是网络的网络,结构更为复杂,碰到的状况比在局域网中要多。而局域网中事情就简单的多了,所以局域网聊天工具在实现即时通信时就相对容易些了。

开发平台介绍

这次课题设计主要用Java语言,所以就选择相应的开发平台和工作、测试环境为MyEclipse。MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC 数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

二、需求分析

编写目标

聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客服机/服务器架构模式,也就是通常所简称的C/S模式。通过Java提供的Socket类来连接客户机和服务器并使客户机与服务器之间相互通信。由于聊天是多点对多点的而Java提供的多线程功能,用多线程可完成多点对多点的聊天。

主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现私聊,一对多聊,用户登陆,退出聊天系统等功能。

可行性分析

经济可行性: 由于本系统的主要背景是课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。

技术可行性: 使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。

运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。

综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的

分析需求

2.3.1 功能需求分析

程序要实现的功能:程序启动之后要能够知道局域网内哪些用户在线,并可以与之通信;一旦某个网内用户上线或离线,需要立即更新信息,并通知所有在线用户;当双击用户列表中某个列表项时,要能够弹出信息发送框,并可以编辑要发送的信息,然后发送。

2.3.2 数据需求分析

对于局域网内的用户需要具体的数据信息来表示,服务器则需要一个保存所有用户信息数据表,其基本内容应包括用户ID,用户名,密码,状态,及IP地址。

2.3.3 性能需求分析

实用性:为局域网聊天提供方便,有效进行作业管理。

操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单位,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。

技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。

安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。

适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。

代码可读性好:文中的代码将尽可能简洁,易懂。

2.3.4系统运行需求

运行环境:Windows 9x、2000、xp、2003,Linux

必要环境:JDK 以上

硬件环境:CPU 400MHz以上,内存64MB以上

本系统的主要功能部分组成:

2.4.1服务器端模块:

服务器启动,进行监听

功能:转发用户传播的信息

服务器自动更新用户状态信息

2.4.2客户端模块:

登陆服务器

列出当前在线用户信息;

聊天好友的的选择;

发言:对输入的数据进行发送;

离开状态;

数据流图

2.5.1 顶层数据流图

顶层数据流图

2.5.2一层数据流图

用户信息数据库

一层数据流图

2.5.3二层数据流图

系统二层数据流图

三、概要设计系统总模块图

模块功能之间的关系3.2.1服务器端模块

3.2.1.1用户上下线识别及显示模块

功能:服务器开启使用设定的端口进行监听,识别并显示用户上下线信息。

目标:当有用户请求登陆时,服务器通过套接字获取用户端的IP地址以及用户名和对应密码,识别是否一致,从而显示用户在线信息,当用户下线时,断开连接,显示用户下线信息。基本实现用户状态与信息显示一致。

3.2.1.2信息识别转发模块

功能:服务器将用户发送的信息接收、分析、存储并转发到目标用户。

目标:服务器定义一个用z于存储要求请求连接用户的端口号以及该端口客户发送的信息的数组,该数组服务器、客户端共享,服务器将发送端的基本信息存储,目的段可以读取该信息,从而实现信息转发。

3.2.2客户端模块

3.2.2.1用户注册模块

功能:实现用户账号的注册

目标:通过用户端的一个线程与服务器数据库连接,用户输入创建的用户名、密码,若通过合法性检测,则将该用户注册的信息写入后台数据库

3.2.2.2用户登陆模块

功能:实现用户登陆。

目标:用户输入用户名、密码并点击登陆,服务器端接收用户端登陆请求,存储请求信息,并进行检验,如果通过合法性检测则进入聊天主界面。

(1)群聊模块

功能:能够进行类似于qq群聊的聊天功能。

目标:客户端点击“发送信息”按钮,该客户端的ip地址、端口号以及信息内容一起打包写入服务器的存储数组,客户端通过线程可以读取该数组中的内容,从而实现群聊。

(2) 单聊模块

功能:能够进行点对点的聊天方式。

目标:客户端用户点击“开始私聊”按钮,输入对方的昵称以及ip地址,从而该用户开启端口用于监听,同时定义输入、输出流文件,客户端延迟片刻,然后与该端口取得连接。当任意一方点击“发送信息”按钮时,和群聊同一机理,通过读取共享文件内容实现私聊。

3.2.2.3用户密码修改模块

功能:用户能够修改自己账号的密码。

目标:用户输入用户名、旧密码、新密码,服务器端接收用户端密码修改请求,存储修改信息,并进行检验,若通过合法性检测,则把修改后的信息重新写入后台数据库。

两大模块工作流程

服务器端工作流程图

系统数据结构设计

3.4.1数据逻辑设计

组成(用户qq,状态,好友,分组)

用户qq(qq号码,昵称,密码,性别,年龄,好友名字,分组名称)状态(qq号码,是否在线,ip地址,端口)

好友(好友qq号码,好友名字,所在分组名字)

分组(分组ID,分组名称,所属qq号码)

3.4.2数据字典

四、详细设计与编码实现

服务器端详细设计

设计中我在服务器端建立了四个包,分别是包, 包, 包以及公用包;根据包的名称就很容易理解各个包中所包含的类的功能。View包主要是存放服务器界面设计类的,model 包中包含的是服务器各个模块设计类,tools包中包含的是服务器工作时所要用的工具设计类,最后commo包中包含的是服务器端和客户端所需共同使用的内容设计类。其实还有一个包包,是用来放置管理用户中号和密码的数据库设计类,但是最终没有设计,只是偷懒的将用户是账号和密码在客户和服务器连接的程序代码中进行固化了。

4.1.1服务器界面设计

服务器界面设计类的类名为MyServerFrame,是存放在view包中,主要是实现服务器端的控制界面,其可以实现启动服务器、关闭服务器、管理和监控服务器等功能。通过java界面设计语句设计出服务器界面的布局:整体只是由一个JPanel放在中间,JPanel 主要是有两个JButton按钮组合而成,分别为启动和关闭按钮,至于服务器界面的监督管理功能在此没有进行设计,以后会在加以补充。

此服务器界面涉及的变量如下

JPanel jpl;

JButton jbt1,jbt2;

其中对jbt1做了一个监听,当点击这个按钮时就会执行MyQqServer类中的代码,从而完成服务器开启功能。

public MyServerFrame()

{

jpl=new JPanel();

jbt1=new JButton("启动服务器");

(this);对jbt1的监听

jbt2=new JButton("关闭服务器");

(jbt1);

(jbt2);

(jpl,"Center");

(500,400);

;

(true);

}

public void actionPerformed(ActionEvent e) {

if()==jbt1)如果点击了jbt1

{

new MyQqServer();跳转到MyQqServer继续执行程序

}

}

4.1.2服务器程序类

服务器程序类类名为MyQqServer,存放在model包中,它是真正的聊天工具服务器程序,其目的是在9999端口监听等待、监听是客户端否有客户发起连接,接受客户端发来的连接请求并且检查客户输入信息的合法性,当用户名和密码对应且正确时,返回登陆成功的信息包,服务器为用户单开一个线程,让线程与该客户端保持通讯,启动客户端与服务器间的线程,并通知其其他在线的好友;

try{

quals("123456"))

{

4.1.3terator();定义一个HashMap用来存放所有用户线程

while())

{

Message m=new Message();

(iam);

;

}

1.判断用户发送的信息类型,如果是一般信息,则获取接受设的通信线程别且一会

将其转发出去

quals)

{

quals)

{

4.1.44.1.34.1.3terator();

String res="";

while())

{

res+=().toString()+" ";

}

return res;

}

客户端的详细设计

我在客户端同样建立了四个包,分别是包, . 包, . 包以及公用包;与服务器端一样,各个类根据功能目的会被放在不同的包中。View包主要是存放客户端多个界面设计类的,在其中我总共设计了三个界面类:用户登录界面类QQClientLogin、用户好友列表界面类Qqfrienlist、用户聊天界面类Qqchat。model包中包含的是用户端各个模块设计类,用户与服务器连接的实现类和用户客户端使用信息类都在其中。tools包中包含的是用户端工作时所要用的工具设计类,用户连接服务器的线程类和各个管理类都在其中。最后commo 包中的类与服务器的commo包中的内容是一样的,因为里面都是服务器端和客户端所需共同使用的内容,所以要保持其一致性。

在设计编码实现时,刚开始设计的界面编码类是独立的,但是到后面就会将各个界面

类嵌套连接起来,除此之外还会应时定义生成其他的类,所以说各个类之间都是相互联系的,绝非有独立的类存在。

4.2.1界面包的设计(view包)

4.2.1.1用户登录界面

客户端用户登录界面设计类的类名为QQClientLogin,是存放在view包中,主要是实现用户登录界面,其可以实现输入用户账号、密码进行登录功能。通过java界面设计语句设计出服务器界面的布局:整体只是由三个部分组合而成,分别是将一个JLabel放在北部。一个JPanel放在中间,中间的JPanel是由两个JLabel、两个JButton、一个JTextField、一个JPasswordField、两个JCheckBox按钮组成,并且将这个JPanel设计成3x3的网格布局。最后是南边也是一个JPanel,由两个JButton组成的一个流布局结构。这个界面中主要设计的按钮是“登录”按钮,因为要将其监听。

此用户登录界面涉及的变量如下

北部需要的变量

JLabel jbl1;

中部需要的变量

JPanel jp1;

JLabel jp1_jbl1,jp1_jbl2;

JButton jp1_jb1,jp1_jb2;

JTextField jp1_jtf;

JPasswordField jp1_jpf;

JCheckBox jp1_jbx1,jp1_jbx2;

南部需要的组件

JPanel jp2;

JButton jp2_jb1,jp2_jb2;

当用户点对于登录按钮的监听

jp2_jb1=new JButton("登陆");

rim()); 获得User对象的用户账号,是

输入框中jp1_jtf中输入的账号(new String()));获得User对象的用户

密码,就是输入框中jp1_jpf中输入的内容if(u))

{

etS().getOutputStream());

在这个类中,还提前加入了一个获取好友在线情况的函数,由于在用户登录时,用户要知道哦自己的好友在线的情况,所以就会向服务器发送一个申请好友在线情况的申请,同时会在服务器返回一个在线好友的数据流后在切换到好友列表界面。

4.2.1用户好友列表界面

客户端用户好友界面设计类的类名为Qqfrienlist,是存放在view包中,主要是实现用户好友界面的显示,其可以该用户的所有好友以及好友的状态,在线的头像就会使彩色,不在线的图像就会是保持灰色。通过java界面设计语句设计出好友列表界面的布局是一个BordeLayo布局,在这个BordeLayo布局中在进行好友列表和陌生人列表的设计。这两个列表设计是相同的,就以好友列表界面举例来说;整个界面是一个BordeLayo布局,在这个整体布局中,又分为三部分:最上方是一个只含有一个“好友列表”JButton的JPanel,最下方是含有两个JButton的JPanel,最主要的是中间的布局,它是一个JScrollPanel布局,是可以上下滚动的。

此用户好友列表界面涉及的变量如下

JPanel jphy1,jphy2,jphy3;

JButton jphy_jb1,jphy_jb2,jphy_jb3;

JScrollPane jsp1;

JLabel []list;

JScrollPanel布局的主要实现

jphy2=new JPanel(new GridLayout(20,1,4,4));

etEnabled(false);

if(list[i].getText().equals(ownerid))

{

list[i].setEnabled(true);

}

list[i].addMouseListener(this);

(list[i]);

}

jsp1=new JScrollPane(jphy2);定义变量jsp1为JScrollPane型变量

陌生人界面的设计方法和原理和用户列表是一样的,只是有一点点变化,但是要想显示用户的陌生人列表则需要点击用户的“陌生人”按钮进行一个监听,主要代码实现:jphy_jb2=new JButton("陌生人");

(this);

这个监听是在好友列表界面中实现的,因为只有在好友列表中点击“陌生人”按钮,界面才会切换到陌生人列表界面,同样理由,如果要继续增加列表界面的数量,那么在每一个列表中的JButton“陌生人”这个变量下都要进行一个监听。所以最终设列表界面数位n那么某一个界面的按钮监听数就为n-1,即除了自己界面,其他的界面都要有连接到此界面的监听。

监听的执行函数如下:用if函数,点击什么按钮就切换到相应界面

public void actionPerformed(ActionEvent e) {

4.2.1用户聊天界面

用户聊天界面类的类名为QqChat,顾名思义,这个类就是用来定义关于用户聊天的一切功能实现函数的类,在这个类中,主要实现的是用户聊天界面的设计,还有就是聊天工具中比较重要的聊天信息的发送,在上面介绍服务器端的详细设计时,就提到在服务器和客户的通信线程类SerConClientThread中实现一个功能就是服务器接受到用户的发送过来的包并且进行判断,根据不同的包执行不同的代码,实现不同的功能,那是服务器独有也是必须具备是转发功能,但是前提是服务器必须有包接受,那样才能判断。这里QqChat中第二个功能就是向服务器发送信息包,以便服务器接收判断并且转发。

1.首先实现用户聊天界面的设计,这个设计很简单,这是有基本的文本输入和显示框

架,还有一个发送按钮。

所使用的变量定义如下:

JTextArea jta; 这是文本显示域用来显示对方发来的聊天信息 JTextField jtf; 这是聊天文本的输入框

JButton jbt; 发送按钮

JPanel jpl; 底部的布局为一个JPanel布局

相关主题
相关文档
最新文档