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

上传人:星星 文档编号:1081813 上传时间:2024-04-14 格式:DOC 页数:32 大小:447.25KB
下载 相关 举报
简易聊天工具详细设计报告.doc_第1页
第1页 / 共32页
简易聊天工具详细设计报告.doc_第2页
第2页 / 共32页
简易聊天工具详细设计报告.doc_第3页
第3页 / 共32页
简易聊天工具详细设计报告.doc_第4页
第4页 / 共32页
简易聊天工具详细设计报告.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、简易聊天工具总体设计报告班级: 网络工程10-1班姓名: 目 录一、 引言.11.1设计聊天工具的背景及意义.1 1.2 课题现状.11.3 开发平台介绍.1二、需求分析.22.1编写目标.22.2 可行性分析. 22.3分析需求. 22.3.1 功能需求分析.22.3.2 数据需求分析.22.3.3 性能需求分析.32.3.4系统运行需求.32.4本系统的主要功能部分组成:.32.4.1服务器端模块.32.4.2客户端模块.32.5 数据流图.42.5.1 顶层数据流图.42.5.2一层数据流图.42.5.3二层数据流图.5三、概要设计.63.1系统总模块图.63.2模块功能之间的关系.73

2、.2.1服务器端模块.73.2.1.1用户上下线识别及显示模块.73.2.1.2信息识别转发模块.73.2.2客户端模块.73.2.2.1用户注册模块.73.2.2.2用户登陆模块.73.2.2.3用户密码修改模块.73.3两大模块工作流程.83.4系统数据结构设计.93.4.1数据逻辑设计.93.4.2数据字典.9四、详细设计与编码实现 .104.1服务器端详细设计.104.1.1服务器界面设计.104.1.2服务器程序类.114.1.3服务器端连接用户的线程设计.124.1.4服务器端线程的管理.134.2客户端的详细设计.134.2.1界面包的设计(view包).144.2.1.1用户登

3、录界面.144.2.1.2用户好友列表界面.154.2.1.3用户聊天界面.184.2.2模块包的设计(model包).194.2.2.1客户端连接服务器类.194.2.2.2客户检查使用者类.204.2.3用户端工具包的设计(tools包).214.2.3.1客户端连接服务器线程类.214.2.3.2管理客户端连接服务器线程类.224.2.3.3管理用户的聊天界面的类.234.2.3.4管理好友列表、黑名单界面类.23 4.3公共包的详细设计.234.3.1User类.234.3.2包的种类定义类.244.3.3传输包定义类.24五、运行测试.261.首先开启服务器.262.进行用户登录.2

4、6 3.用户之间聊天.28六、结束语.29参考文献.3029一、 引言 1.1设计聊天工具的背景及意义随着计算机科学技术的飞速发展,网络越来越深刻的改变着人们生活方方面面。各种基于网络的应用技术在人们的政治、经济、生活等的各个方面都发挥着重要的作用。例如QQ,MSN等基于Internet的即时聊天工具。这些工具通过网络这个新兴的媒介进行信息交流相比其他传统媒介具有数据量大,实时性强,操作简单,成本低廉等优点。不仅如此即时聊工具还具备许多传统媒介不具备的强大功能,它们能传送文字、声音、影像和文档,而且能更加人性化的显示联络人的名单和通信状态。因而它们在现实生活中受到了广泛的欢迎,这是有目共睹的。

5、目前基于Internet的即时聊天工具已经做的非常完美,然而基于局域网的即时聊天工具却不如人意。而在高等教育方面,网络展现出不可替代的作用。为了适应现代信息化,教学局域网就应运而生。而教学局域网内的即时通信能力则显得尤为重要。所以对于学校和公司内部网络等机构,局域网即时聊天的应用还是相当重要的。一个好的局域网通信软件将对学校和公司的运作产生积极的影响。1.2 课题现状基于局域网的即时通信软件的核心技术其实与基于Internet的即时通信软件的设计技术是一样的,只是规模较小。基于Internet的通信工具一般是采用UDP或TCP协议来实现的,开发技术已经非常成熟。比如QQ、MSN等等,它们都是基

6、于Internet的即时通信软件,它们不仅实现了即时聊天、文件传输等功能,而且还能够实现网络即时视频、语音聊天功能。它们的功能正在不断扩充,使其更加人性化,满足人们更多的需求。这类软件其实都是在下层协议的基础之上,通过网络通信接口进行设计的软件产品。在局域网内,这类软件的设计比在Internet中设计更为简单。因为Internet是网络的网络,结构更为复杂,碰到的状况比在局域网中要多。而局域网中事情就简单的多了,所以局域网聊天工具在实现即时通信时就相对容易些了。1.3 开发平台介绍这次课题设计主要用Java语言,所以就选择相应的开发平台和工作、测试环境为MyEclipse。MyEclipse

7、是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。二、需求分析2.1编写目标聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客服机/服务器架构模式,也就是通常所简称的C/S模式。通过Java提供的Socket类来连

8、接客户机和服务器并使客户机与服务器之间相互通信。由于聊天是多点对多点的而Java提供的多线程功能,用多线程可完成多点对多点的聊天。主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现私聊,一对多聊,用户登陆,退出聊天系统等功能。2.2 可行性分析经济可行性: 由于本系统的主要背景是课程设计,不注重直接的

9、经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。 技术可行性: 使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。 运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。 综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足

10、的,因此,它在技术上是可行的2.3分析需求2.3.1 功能需求分析程序要实现的功能:程序启动之后要能够知道局域网内哪些用户在线,并可以与之通信;一旦某个网内用户上线或离线,需要立即更新信息,并通知所有在线用户;当双击用户列表中某个列表项时,要能够弹出信息发送框,并可以编辑要发送的信息,然后发送。2.3.2 数据需求分析对于局域网内的用户需要具体的数据信息来表示,服务器则需要一个保存所有用户信息数据表,其基本内容应包括用户ID,用户名,密码,状态,及IP地址。2.3.3 性能需求分析实用性:为局域网聊天提供方便,有效进行作业管理。操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单位

11、,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。 代码可读性好:文中的代码将尽可能简洁,易懂。2.3.4系统运行需求 运行环境:Windows 9x、2000、xp、2003,L

12、inux必要环境:JDK 1.5 以上硬件环境:CPU 400MHz以上,内存64MB以上2.4本系统的主要功能部分组成:2.4.1服务器端模块: 服务器启动,进行监听功能:转发用户传播的信息服务器自动更新用户状态信息2.4.2客户端模块:登陆服务器列出当前在线用户信息;聊天好友的的选择;发言:对输入的数据进行发送;离开状态;2.5 数据流图2.5.1 顶层数据流图聊天用户聊天用户简易聊天系统顶层数据流图2.5.2一层数据流图 聊天用户聊天用户客户端服务器端写聊天信息返回返回读取反馈/转发存储提交用户信息数据库一层数据流图2.5.3二层数据流图 用户用户登录用户发送信息客户端服务器端用户注册处

13、理用户退出聊天内容用户得到信息数据聊天信息监控服务器日志处理保存保存系统二层数据流图三、概要设计3.1系统总模块图信息识别转发模块用户上下线识别显示模块用户端服务器端简易聊天工具用户登陆模块用户注册模块用户密码修改模块用户聊天模块群聊模块单聊模块3.2模块功能之间的关系3.2.1服务器端模块3.2.1.1用户上下线识别及显示模块功能:服务器开启使用设定的端口进行监听,识别并显示用户上下线信息。目标:当有用户请求登陆时,服务器通过套接字获取用户端的IP地址以及用户名和对应密码,识别是否一致,从而显示用户在线信息,当用户下线时,断开连接,显示用户下线信息。基本实现用户状态与信息显示一致。3.2.1

14、.2信息识别转发模块功能:服务器将用户发送的信息接收、分析、存储并转发到目标用户。目标:服务器定义一个用z于存储要求请求连接用户的端口号以及该端口客户发送的信息的数组,该数组服务器、客户端共享,服务器将发送端的基本信息存储,目的段可以读取该信息,从而实现信息转发。3.2.2客户端模块3.2.2.1用户注册模块功能:实现用户账号的注册目标:通过用户端的一个线程与服务器数据库连接,用户输入创建的用户名、密码,若通过合法性检测,则将该用户注册的信息写入后台数据库3.2.2.2用户登陆模块功能:实现用户登陆。目标:用户输入用户名、密码并点击登陆,服务器端接收用户端登陆请求,存储请求信息,并进行检验,如

15、果通过合法性检测则进入聊天主界面。(1)群聊模块功能:能够进行类似于qq群聊的聊天功能。目标:客户端点击“发送信息”按钮,该客户端的ip地址、端口号以及信息内容一起打包写入服务器的存储数组,客户端通过线程可以读取该数组中的内容,从而实现群聊。(2)单聊模块 功能:能够进行点对点的聊天方式。 目标:客户端用户点击“开始私聊”按钮,输入对方的昵称以及ip地址,从而该用户开启端口用于监听,同时定义输入、输出流文件,客户端延迟片刻,然后与该端口取得连接。当任意一方点击“发送信息”按钮时,和群聊同一机理,通过读取共享文件内容实现私聊。3.2.2.3用户密码修改模块功能:用户能够修改自己账号的密码。目标:

16、用户输入用户名、旧密码、新密码,服务器端接收用户端密码修改请求,存储修改信息,并进行检验,若通过合法性检测,则把修改后的信息重新写入后台数据库。3.3两大模块工作流程启动服务器输入服务器IP显示用户停止监听等待开始监听输入端口号用户连接请求是否设置系统公告退出系统保存修改记录聊天记录显示在线人数YesNo 启动客户端窗口输入qq号码输入密码登录验证成功进入客户端聊天室发布公开消息悄悄话发布隐蔽消息选择聊天对象选择断开连接退出系统NoYes客户端工作流程图服务器端工作流程图 3.4系统数据结构设计3.4.1数据逻辑设计组成(用户qq,状态,好友,分组)用户qq(qq号码,昵称,密码,性别,年龄,

17、好友名字,分组名称)状态(qq号码,是否在线,ip地址,端口)好友(好友qq号码,好友名字,所在分组名字)分组(分组ID,分组名称,所属qq号码)3.4.2数据字典名称取值类型长度描述位置QQ号码Int5-8唯一标示用户,不可为空用户qq表,状态表昵称Char8用户昵称用户qq表密码Char6-16用户身份鉴定,不可为空用户qq表性别Char2用户性别,可空用户qq表年龄Smallint0-99用户年龄,可空用户qq表好友名字Char8好友昵称用户qq表,好友表分组名称Char8分组名字用户qq表,分组表是否在线Int1记录当前用户状态,不可为空状态表Ip地址Int32当前登录IP地址状态表端

18、口Int4登录端口号状态表好友qq号码Int5-8唯一标示好友,不可为空好友表所在分组名字Char8所在分组名字,不可为空好友表所属qq号码Int5-8所属用户,不可为空分组表四、详细设计与编码实现4.1服务器端详细设计设计中我在服务器端建立了四个包,分别是com.qq.server.view包, 666.qq.server.tools包, 666.qq.server.model包以及公用 mon包;根据包的名称就很容易理解各个包中所包含的类的功能。View包主要是存放服务器界面设计类的,model包中包含的是服务器各个模块设计类,tools包中包含的是服务器工作时所要用的工具设计类,最后co

19、mmo包中包含的是服务器端和客户端所需共同使用的内容设计类。其实还有一个包com.qq.server.db包,是用来放置管理用户中号和密码的数据库设计类,但是最终没有设计,只是偷懒的将用户是账号和密码在客户和服务器连接的程序代码中进行固化了。4.1.1服务器界面设计 服务器界面设计类的类名为MyServerFrame,是存放在view包中,主要是实现服务器端的控制界面,其可以实现启动服务器、关闭服务器、管理和监控服务器等功能。通过java界面设计语句设计出服务器界面的布局:整体只是由一个JPanel放在中间,JPanel主要是有两个JButton按钮组合而成,分别为启动和关闭按钮,至于服务器界

20、面的监督管理功能在此没有进行设计,以后会在加以补充。此服务器界面涉及的变量如下JPanel jpl; JButton jbt1,jbt2;其中对jbt1做了一个监听,当点击这个按钮时就会执行MyQqServer类中的代码,从而完成服务器开启功能。public MyServerFrame() jpl=new JPanel(); jbt1=new JButton(启动服务器); jbt1.addActionListener(this);对jbt1的监听 jbt2=new JButton(关闭服务器); jpl.add(jbt1); jpl.add(jbt2); this.add(jpl,Cente

21、r); this.setSize(500,400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); public void actionPerformed(ActionEvent e) if(e.getSource()=jbt1)如果点击了jbt1new MyQqServer();跳转到MyQqServer继续执行程序4.1.2服务器程序类 服务器程序类类名为MyQqServer,存放在model包中,它是真正的聊天工具服务器程序,其目的是在9999端口监听等待、监听是客户端否有客户发起连

22、接,接受客户端发来的连接请求并且检查客户输入信息的合法性,当用户名和密码对应且正确时,返回登陆成功的信息包,服务器为用户单开一个线程,让线程与该客户端保持通讯,启动客户端与服务器间的线程,并通知其其他在线的好友;try/在端口号为9999处监听System.out.printf(我是服务器,在9999端口监听);ServerSocket ss=new ServerSocket(9999);/阻塞,等待连接while (true) Socket s=ss.accept(); 定义套接字接受/接受客服端发来的信息 是以对象流的方式ObjectInputStream ois=new ObjectIn

23、putStream(s.getInputStream();User u=(User)ois.readObject();Message m=new Message();ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream();if(u.getPassword().equals(123456)/返回一个登陆成功包m.setMesType(1);oos.writeObject(m);/里就单开一个线程,让该线程与该客户端保持通讯SerConClientThread scct=new SerConClientThread(s);

24、MangeClientThread.addClientThread(u.getUserid(), scct);/启动与该客户端通信的线程scct.start();/并通知其他在线用户scct.notifyother(u.getUserid();elsem.setMesType(2);oos.writeObject(m);/关闭链接s.close();在设计这个程序是要注意,服务器接受用户的信息别且进行检验但是不能以以字节读的方式接受读取,因为以字节读取时遇到空格符或转行符会出现错误,如账号 1234 密码123 122中间有空格,那么服务器就不能正确识别,为改进这种读取方式,我们将服务器端和客

25、端的io流用User对象的方式传播,传输和读取的都是对象的相应函数,那么就不会出出现上述情况,除此之外,客户端的发送和服务器端的监听都需要将内容序列化(只是加上一个java命令,让java内部实现)。import sun.nio.ch.ServerSocketAdaptor;序列化:就是可以让一个对象可以在网络上或文件上传输,事实上就是把它序列了,是他不乱4.1.3服务器端连接用户的线程设计服务器和客户的通信线程SerConClientThread存放在model包中,它的设计主要就是为了实现在线用户一对多的聊天,这样就不会发生套接字争抢的现象,因为每一个在线用户都开启了相应的一个线程用来存放

26、其特定的套接字信息。其组要功能:1. 得到所有在线人的线程取出在线人的Id/得到所有在线的人的线程HashMap hm=MangeClientThread.hm; Iterator it=hm.keySet().iterator(); 定义一个HashMap用来存放所有用户线程while(it.hasNext()Message m=new Message();m.setCon(iam);m.setMesType(MessageType.message_ret_onlinefriend);2. 判断用户发送的信息类型,如果是一般信息,则获取接受设的通信线程别且一会将其转发出去/对从客户端取得的消

27、息进行类型判断 然后做出相应处理if(m.getMesType().equals(MessageType.message_comm_mes)/取得接受人的通信线程 一会转发SerConClientThread sc=MangeClientThread.getCLientThread(m.getGetter();ObjectOutputStream oos=new ObjectOutputStream(sc.s.getOutputStream();oos.writeObject(m);如果是请求所有在线好友的信息,则给该用户返回服务器端的在线好友else if(m.getMesType().eq

28、uals(MessageType.message_get_onlinefriend)/把在服务器断的好友给该客户端返回String res=MangeClientThread.getAllOnlineUserid();Message m2=new Message();m2.setMesType(MessageType.message_ret_onlinefriend);m2.setCon(res);m2.setGetter(m.getSender();ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream();oos.wr

29、iteObject(m2);4.1.4服务器端线程的管理服务器端线程的管理类ManageClientThread从命名上看就知道其主要作用就是管理用户的线程,将这些线程同一的放在一个建立好的哈希表中public class MangeClientThread public static HashMap hm=new HashMap();/向hm中添加一个客户端通信线程public static void addClientThread(String uid,SerConClientThread ct)hm.put(uid, ct); 这里加的就是用户的id以及其对应线程 这个类还有两个函数一个

30、是getCLientThread函数,主要就是返回在服务器端有线程的用户的id,在服务器转发用户普通信息前就会先调用该函数获得接受者的id,对应于4.1.3的情况1。public static SerConClientThread getCLientThread(String uid) return (SerConClientThread)hm.get(uid);返回服务器端由线程的用户的id 还有一个函数getAllOnlineUserid,其作用就是为了返回所有在线用的情况,服务器接到用户更新在线好友的命令后会调用,对应于4.1.3的情况2。/返回当前在线的人的情况public stati

31、c String getAllOnlineUserid()/使用迭代器完成Iterator it=hm.keySet().iterator();String res=;while(it.hasNext()res+=it.next().toString()+ ;return res;4.2客户端的详细设计我在客户端同样建立了四个包,分别是com.qq.client.view包, 666.qq. client.tools包, 666.qq. client.model包以及公用 mon包;与服务器端一样,各个类根据功能目的会被放在不同的包中。View包主要是存放客户端多个界面设计类的,在其中我总共设

32、计了三个界面类:用户登录界面类QQClientLogin、用户好友列表界面类Qqfrienlist、用户聊天界面类Qqchat。model包中包含的是用户端各个模块设计类,用户与服务器连接的实现类和用户客户端使用信息类都在其中。tools包中包含的是用户端工作时所要用的工具设计类,用户连接服务器的线程类和各个管理类都在其中。最后commo包中的类与服务器的commo包中的内容是一样的,因为里面都是服务器端和客户端所需共同使用的内容,所以要保持其一致性。在设计编码实现时,刚开始设计的界面编码类是独立的,但是到后面就会将各个界面类嵌套连接起来,除此之外还会应时定义生成其他的类,所以说各个类之间都是

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

34、nel,由两个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=ne

35、w JButton(登 陆); /响应用户点击 jp2_jb1.addActionListener(this);监听当监听点击了用户登录按钮时,会自动跳转执行监听函数 public void actionPerformed(ActionEvent e) /如果用户点击登录 if(e.getSource()=jp2_jb1) QqClientUser qqclientuser=new QqClientUser();到QqClientUser类中执行User u=new User(); 新建一个User对象u.setUserid(jp1_jtf.getText().trim(); 获得User对象的用户账号,是输入框中jp1_jtf中输入的账号u.setPassword(new String(jp1_jpf.getPassword();获得User对象的用户密码,就是输入框中jp1_jpf中输入的内容if(qqclientuser

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922