ImageVerifierCode 换一换
格式:DOCX , 页数:44 ,大小:732KB ,
资源ID:21142455      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21142455.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于JAVA的聊天系统的设计与实现Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于JAVA的聊天系统的设计与实现Word格式文档下载.docx

1、 首先验证登陆,如果成功,则建立与服务端的socket连接,服务端新开启一个线程专门为它服务,将打包好的Message发送给服务器端,服务器端根据Message里面的信息,再将信息转发给其他用户。一个标准的C/S模式。2、Swing技术 Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。用来实现客服端的界面设计。3、Java web和struts2技术 采用B/S的结构实现服务器端,对用户和在线用户进行增删改查,和踢用户下线,以及开启服务器和关闭服务器。4、系统的构建 客户端采用C/S结构,管理端采用B

2、/S的结构,用Tomcat 作为服务器,MySQL作为数据库,还使用到了WindowBuilder开源框架进行界面开发。第2章 即时通讯系统的相关研究2.1 C/S开发模式 C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个: 而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护

3、。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。(大多数没法自动升级而需要人工升级) 对客户端的操作系统一般也会有限制。可能适应于Windows 98,但不能用于Windows 2000或Windows XP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。2.2 B/S开发模式B/S结构(Browser/Server结构)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Se

4、rver)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、速度快、效果优。2.3即时通

5、讯原理 登陆进入聊天软件后,即显示出好友列表,在线的显示亮头像,不在线的显示灰色头像。双击好友头像即会显示出聊天界面。在聊天页面上,有发送文字,发送截图,和发送文件的功能按钮。点击“发送”按钮之后,程序就会把输入的信息的种类,信息内容、本人的ID号、对方的ID号以及当前的时间等内容打包成一个Message对象通过Socket发送到服务器端。服务器接收到Message之后,按照协议进行解析和转发。这样,双方的即时通讯就实现了。2.4 Java Web 、struts2、Ajax、javascript应用技术通过这些技术,实现服务器的后台管理端,对用户和在线用户进行增删改查,和踢用户下线,以及开启

6、服务器和关闭服务器。以及用户的注册,前台验证等等2.5 MySQL数据库应用技术使用MySQL存储用户信息,采用JDBC技术对其进行增删改查。2.6 Socket通信技术Socket程序的工作过程:1、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。2、数据通信:利用虚拟连接通道传送数据信息进行通信。3、关闭:通信结束时,再将所建的虚拟连接拆除。具体如下:服务器 图 2-1 socket通信2.7 开发环境的搭建客户端采用C/S结构,管理端采用B/S的结构,用Tomcat 作为服务器,MySQL作为数据库,还使用到了WindowBuilder开源框架进行界面

7、开发。第3章 系统分析3.1 系统基本功能描述客户端可以实现注册,即时聊天,相互之间收发文件,发送截图,查看历史聊天记录等功能。收发消息时,可以实现离线接收。服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。在后台管理系统,可以到对用户进行增删改查,查看在线用户,和踢用户下线3.2 可行性分析本系统的可行性分析包括以下几个方面的内容:(1) 技术可行性使用Swing 和socket技术,可以很轻松地开发出实用、简便、高效的基于网络的

8、即时通讯系统。因此技术上是可以实现的。(2) 经济可行性计算机网络已经普及,因此在网络设备上不需要进行大的投入。本系统需要一个MySQL数据库服务器,由于并发使用人数比较少,tomcat可以作为web服务器,所以成本很低。(3) 操作可行性只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题。如果要实现internet上通讯,只需要将服务器端运行在一个有固定IP的公网上就可以。综上所述,即时Java即时通讯系统是可行的。3.3 系统需求分析3.3.1功能分析本系统要实现的功能如下:1)注册服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别

9、,籍贯,个人资料等,接受完毕后,便通过JDBC与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码。客户收到服务器返回的信息后,便打开窗口登陆。2)登陆在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JDBC读取数据库,然后与用户输入的信息进行比对,如果成功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该请求,从数据库中取出好友列表,然后向客户端发送这些信息,客户收到后就在主窗口显示好友。3)聊天客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。例如服务器接收到一个A发给B的消息,先判断B

10、是否已经在线,如果在线就将信息发送过去。如果B不在线则把信息储存在服务器,等B上线了在发送给他。B接收到A发来的信息,如果是未建立对话窗口,则自动打开显示。4)发送截图客户端A点击截图按钮,将屏幕锁定,截取图片,将图片储存在byte数组中发送到服务器端。服务器端根据发送人信息和接收者信息来转发。B接收到A发来的截图信息,会根据byte构造图片,将图片显示出来。同样,如果是未建立对话窗口,则自动打开显示。5)发送文件客户端A点击发送文件按键,从本地选择文件,将文件在byte数组中分批次发送到服务器端。B接收到A发来的文件信息,会根据文件发送的状态和byte构造文件。6)日志客户端发送和接收到的信

11、息都会储存在文本文档中。默认储存在C盘下面,会以用户的登录账号为名。7)对用户的操作 管理员通过B/S的系统对用户进行增加,修改,删除,查找等操作,对系统进行维护。8)在线用户的操作 管理员通过B/S的系统对在线用户操作,可以踢用户下线。第4章 系统设计4.1 数据库设计本系统中所涉及的主要实体及其属性有:用户(用户账号,用户名,密码,个性签名,头像ID,年龄,性别) E-R模型如图所示。图 4-1系统实体及其属性表4-1 User字段名数据类型字段说明键引用备注accountint(6)IDPK主键(自动增一)namevarchar(20)用户名称非空password用户密码signatur

12、eVarchar(255)签名profileIDint(2)头像IDageint(3)年龄sexsex char(2)性别4.2 系统模块设计4.2.1 聊天系统工作原理图 图 4-2 系统工作原理4.2.2 系统功能模块图:图 4-3 系统模块4.2.3 系统用例图:普通用户的用例图:图 4-4 普通用户用例图后台管理员的用例图:图 4-5 后台用户用例图4.2.4 活动图:1)用户登陆活动图首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。如果不正确,返回一个提示信息。如果登陆成功,就更新在线状态。通知所有好友自己已经上线。服务器再检查是否有他的离线消息,如果有这立即发送给用户。图

13、 4-6 用户登录活动图2)发送消息活动图短消息发送以后,服务器端对应的监听线程会接收到一个数据包。此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者。如果不在线,存在服务器端,等它上线在发送。图 4-7发送消息活动图4.3 系统类设计4.3.1 Message类的设计:客户端和服务器端通信时,发送的都是Message类的对象,因此Message类的设计很重要。 表4-2 Message属性名作用private Integer msgType;信息类型private String content;信息的文本内容private Integer senderAccount;发送者acc

14、ountprivate Integer receiverAccount;接收者accountprivate String time;发送时间private User myself;private List friends;自己本身对象,用与好友列表头好友列表 private transient Image img;图片对象(不传送)private byte imageByte;图片的内容private String fileName;文件名称private byte fileByte;文件的长度private int length;/文件长度,以KB为单位文件的内容private int st

15、ate;文件传输的状态:0是不接受文件,1是接受文件,2请求发送文件,3文件传输中,4文件传送完成 private Integer msgType消息的类型有这么几种:public interface MessageType Integer message_succeed=1;/表明是登陆成功 Integer message_login_fail=2;/表明登录失败 Integer message_comm_mes=3;/普通信息包 Integer message_get_onLineFriend=4;/要求在线好友的包 Integer message_ret_onLineFriend=5;/

16、返回在线好友的包 Integer message_offline=6;/下线通知包 Integer message_img=7;/图片包 Integer message_file=8;/文件包4.3.2 截图类的设计:截图类的实现类为:class Screenshot extends JFrame implements MouseListener,MouseMotionListener。图 4-8 Screenshot类截图类的核心是JDK中:Robot类中createScreenCapture(RectanglescreenRect) 创建包含从屏幕中读取的像素的图像。先用截取全部屏幕的图片

17、,然后显示出来,覆盖住整个屏幕。然后监听鼠标事件,再用createScreenCapture(RectanglescreenRect)方法截图。双击表示截图成功,右键表示取消截图。4.3.3 聊天记录类的设计:记录日志的功能被封装在MessageRecord类中,所在包为com.im.client.record,在发送或接受到数据后,将其写入日志文件。 图 4-9 MessageRecord类如果是图片则显示出,发送时间和图片大小。如果是文件则显示出请求发送时间,同意接收时间,接收完成时间,和文件大小。 日志文件格式如下:图 4-10 记录文件4.3.4 服务端线程的设计:服务器端的核心是对应

18、客户的线程,每个socket对应一个线程,也就是每一个客户端都在服务器端有一个相应的线程。它负责转发客户端发来的消息。线程类为ClientThread:表4-3 ClientThread类public void notifyOnline()通知其他线程,自己上线了,让客户方更新头像public void run() 线程的主题,转发消息public void notifyOffline()通知其他线程,自己下线了,让客户方更新头像public void send(Object o) 发送消息public Object receive() 接收消息第5章 系统实现5.1 实现概况本系统可分为登录

19、、聊天、文件、用户管理和注册五个功能模块。“登录”模块为用户提供登录界面,并在用户登录显示好友列表;“聊天”模块实现用户的即时传送信息,即多用户即时聊天,可以发送文字或者截图;“文件”模块主要实现一用户向另一用户发送文件,对方可以选择接受或者拒绝。聊天记录会以文本文档格式保存。“用户管理”模块即管理员对用户进行增删改查,和踢用户下线的操作。下面详细介绍各个模块的具体实现。5.2 注册模块5.2.1 流程图图 5-1 用户注册流程图5.2.2 关键代码注册的前台页面是showDetail.jsp,后台是UserAction类,UserAction类中有方法: public String save

20、OrUpdate() us.saveOrUpdate(user); return refresh; saveOrUpdate则是用到了Userservice里面的方法:public void saveOrUpdate(User u) System.out.println(u.getAccount()=+u.getAccount(); if(u.getAccount()=null) ud.save(u); else ud.update(u);DAO类中的方法:public void save(User u) conn=getConnection(); try ps=conn.prepareSta

21、tement(SAVE); ps.setString(1, u.getName(); ps.setString(2, u.getPassword(); ps.setString(3, u.getSignature(); ps.setInt(4, 1); ps.setInt(5, u.getAge(); ps.setString(6, u.getSex(); ps.execute(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); finally close(); 网页上显示用户的acc

22、ount图 5-2 用户注册信息5.3 登录模块5.3.1 流程图图 5-3 登录流程图5.3.2 关键代码 1)客户端代码 登录事件是定义在class IMClientLogin extends JFrame 这个类的监听事件中。登录成功后,立即向服务器请求自己的好友列表。 /登录事件 login.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) / cus=new IMClientUserServer();/ System.out.println(cus.getServer()

23、; User u=new User(); u.setAccount(Integer.parseInt(account.getText().trim(); u.setPassword(new String(passwordField.getPassword();/ 登陆成功 if(cus.checkLogin(u) /向服务器发送数据包,请求在线人得信息 ClientConnToServerThread t=Manager.THREAD; Message m=new Message(); m.setMsgType(MessageType.message_get_onLineFriend); m.

24、setSenderAccount(u.getAccount(); try t.send(m); catch (IOException e1) e1.printStackTrace(); dispose(); else JOptionPane.showMessageDialog(null, 用户名或密码错误, 错误, JOptionPane.ERROR_MESSAGE); );登录逻辑是在public class IMClientUserServer 里面,认证成功者就会新建一个线程,专门负责接收服务器端发来的信息class ClientConnToServerThread extends Th

25、read 。public boolean checkLogin(Object o) boolean success=false; Message msg=(Message) server.sendLoginInfo(o);/ System.out.println(msg.getMsgType();/ System.out.println(MessageType.message_succeed); if(msg.getMsgType().intValue()=MessageType.message_succeed.intValue() success=true; User u=(User) o; /将好友列表放到管理器中,进行上下线操作 IMFriendList fl=new IMFriendList(msg.getMyself(),msg.getFriends(); Manager.FRIEND_

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

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