人人聊-项目总结【MySQL+Java+socket+swing】

项目介绍:

功能技术简介:

本项目是一个在线多人聊天室,主要的功能模块有登录注册模块,好友列表模块,私聊群聊窗口等。通过Swing实现可视化界面,登录注册提交等按钮通过后台线程监控,点击会触发事件。利用MySQL做数据存储,连接池采用的是druid数据源。客户端和服务端的连接交互使用了Socket,实现了即时通信。利用多线程实现用户并发操作。

效果展示:

多个用户登录界面:
在这里插入图片描述
用户注册界面:
在这里插入图片描述
用户注册成功界面:
在这里插入图片描述
数据库成功插入数据:
在这里插入图片描述
登录成功提示:
在这里插入图片描述
跳转好友列表界面:
在这里插入图片描述
当有另一个用户登录时,当前在线的用户就会获得提示:
在这里插入图片描述
当点击好友列表里的标签时,就会生成私聊界面:

在这里插入图片描述
当发送消息后,接收方就会跳出私聊界面,并显示聊天对话,聊天界面会缓存在后台中,即使关闭了对话框,再打开也会显示历史聊天记录:
在这里插入图片描述
点击创建群聊按钮,跳出群聊选择界面,动态的显示可勾选的好友名称:
在这里插入图片描述
点击提交,显示好友列表界面,在我的群组中显示创建的群聊数量技群聊名称:
在这里插入图片描述
点击群聊名称标签,右侧显示统一群聊好友:
在这里插入图片描述
当发送消息后,同一群聊内的用户均收到消息,群聊界面缓存在后台中,关掉群聊界面后重新打开界面历史记录还保存着:
在这里插入图片描述

项目搭建过程:
  • JDBC连接MySQL数据库,用druid数据源。在IDEA中导入依赖:
    在这里插入图片描述

  • 目录结构:
    项目文件格式:

  • client包(java目录下的包)

    • dao包(把数据库的信息读到程序,吧程序中的信息写回数据库)
      • AccountDao:具体业务层,用来描述账户的增删查改
      • BasedDao:顶级父类层,用来描述jdbc与数据库之间的加载数据源,获取连接,关闭资源操作
    • entity包(数据库的实体)
      • User:数据库的实体类,用来描述数据库表中的属性
    • server包(服务端)
      • MultiThreadServer:服务器端,建立线程任务,处理客户端的请求任务
    • service包(界面包):
      • ConnecteToServer:封装了客户端与服务端建立的连接,以及输入输出流。
      • UserLogin:用户登录界面
      • UserReg:用户注册界面
      • FriendList:好友列表界面
      • CreatGroupGUI:创建群聊界面
      • GroupChatGUI:群聊界面
      • PrivateChatGUI:私聊界面
    • util包:
      • CommUtil:封装所有的公共方法,包括加载源文件和json序列化与反序列化操作
    • vo包(多层都会用到的) :
      • MessageVo:服务端与通信端都会用到的载体
  • Resource资源配置文件(与Java目录同级)


按照以上目录结构分配的相关功能逐步完成项目,关键点在于客户端与服务端的连接和信息的传送:

  • 登录部分:
    • 服务器: 建立线程,等待客户端连接
    • 客户端:点击登录后,就已经开始和服务端建立连接。连接要一直保持持续的获取输入流与输出流,因此要将建立的连接和输入流和输出流封装起来。
  • 登录成功后跳转好友列表界面:
    • 服务端:保存当前登录用户上线信息,将当前所有在线用户信息都发送给新用户,当有新用户上线时把新用户上线信息发送给所有在线用户。
    • 客户端:和服务端建立连接,把自己登录的用户名和socket保存到服务端缓存;读取服务端已经缓存的在线好友,并且在有新好友上线时不断收到服务端的信息,因此需要一个后台线程来监听服务端发送的消息。
  • 私聊:
    • 客户端:
      • 信息发送方:点击要私聊的用户的标签,new一个私聊界面,并将这个界面存入缓存。按照指定的协议向服务器发送消息。
      • 信息接收方:判断服务器发来的消息是否是私聊消息,若是,则在缓存中判断是否有此私聊界面, 按照指定的协议来读取内容和发送消息。
    • 服务端:收到客户端发来的消息,取出目标端的socket做信息转发。
  • 群聊:
    • 客户端:
      • 群聊发起者:点击群名称标签,弹出群聊界面,按指定协议将群聊信息发送给服务端。
      • 群聊接收者:如果是第一次接受到该群的消息,则刷新群聊列表,弹出群聊界面。
    • 服务端:收到群信息,解析出群名,根据群名找到群内的所有用户名,根据用户名找到用户的socket,做信息的转发。

在传送信息的时候传送的是字符串,复杂的字符串利用json的系列化和反序列化会更好的传送和解析。


自定义的信息传送协议:
type:功能的分类:

1:用户的注册
2: 私聊
3:注册群信息
4:群聊

content:要发送的内容:

发送用户名 - 发送的信息

to:聊天信息发送的目标客户端名称


测试部分:

分析需求:

  • 项目要求有登录,注册,好友列表,创建群聊,群聊,私聊界面。

  • 用户注册用户id长度11不可为空自增,用户名长度最长20不可为空,密码最长100不可为空,个性签名最长100可为空;

  • 新用户上线,获取已上线用户信息,呈现在用户列表上,老用户获得新用户上线信息,在线用户列表刷新添加新上线用户信息。

  • 点击用户列表名称标签,弹出私聊界面,第一次弹出界面上没有历史信息,若不是第一次弹出私聊界面,再次打开界面会保留历史记录,输入框内输入信息,按enter键发送。

  • 接收私聊信息用户在信息发送后弹出私聊界面,消息框显示发来的消息,输入框输入信息,按enter键发送。

  • 点击好友列表界面的创建群聊按键,弹出创建群聊界面,界面上显示可勾线的当前在线好友,在输入框输入群名,点击提交按钮,跳转到好友列表界面,创建群聊的用户的我的群组里刷新出新建的群聊名称,点击群聊名称标签,弹出群聊界面,界面右侧显示当前群聊中包含的好友用户名称。

  • 群聊输入框里输入信息,按enter发送信息,群里所有好友出了发送消息用户自己外均弹出群聊界面,消息框显示收到的信息。好友列表我的群组界面刷新,显示已弹出的群名称。

  • 用户并发数量为后台设置,在不同设置情况下,进行性能压力测试。

测试用例:

  • 功能:

    • 登录功能:
      • 用户名输入框可输入长度:0(失败),20(成功),21(失败)(公共测试用例)
      • 用户名输入字符类型:无限制(公共测试用例)
      • 密码输入字符类型:无限制(公共测试用例)
      • 密码输入框可输入长度:0(失败),100(成功),101(失败)(公共测试用例)
      • 用户名和密码是否可以复制(公共测试用例)
      • 用户名与密码组合和后台数据库数据一致(成功)/不一致(失败)
      • 服务器断开登录成功(异常)
      • 服务器断开登录失败(正常)
    • 注册功能:
      • 用户名输入框长度,密码输入框长度,是否可以复制,字符类型:公共测试用例
      • 个性签名输入框长度:0(成功),100(成功),101(失败)
      • 输入用户名与数据库数据用户名重复(失败)/不重复(成功)
      • 服务器断开注册成功(异常)
      • 服务器断开注册失败(正常)
    • 私聊功能:聊天公共测试用例
      • 输入框输入长度:不限制长度
      • 接收私聊信息:不限制信息长度
      • 输入为空发送信息失败(正常)
      • 输入为空发送信息成功(异常)
      • 接收私聊信息用户弹出私聊界面
      • 消息框里的消息能复制粘贴
      • 打开私聊界面:
        • 第一次打开,信息框为空
        • 非第一次打开,信息框有历史记录
    • 群聊功能:
      • 聊天公共测试用例
      • 输入为空发送信息失败(正常)
      • 输入为空发送信息成功(异常)
      • 非创群用户,在收到群聊信息后刷新群聊列表
      • 非群聊内选择的用户不能收到信息
      • 服务器断开发送消息失败(正常)
      • 服务器断开发送消息成功(异常)
      • 消息框里的消息能复制粘贴
    • 创建群聊功能:
      • ‘’请输入群名‘’输入框长度:0(失败:点击提交没有创建群组)不限制长度(成功:点击提交创建了新的群组,并在我的群组显示)
      • 勾选框勾选0个用户:输入群名长度大于1,可成功创建群成员只有用户自己
      • 勾选框勾选>0个用户:输入群名长度大于1,可成功创建含勾选群成员群组
  • 性能:

    • 多个用户同时登陆:
      • 用户名和密码组合与数据库一致(成功)/不一致(失败)
      • 用户名重复登录(失败)
    • 多个用户同时注册:
      • 注册用户名相同(失败)
      • 注册用户名长度超出(失败)
      • 注册不填用户名/密码(失败)
    • 多个用户同时私聊:
      • 两个用户同时点击对方名称标签,发送信息
      • 在用户给一位好友发送信息时同时接收到多位好友发来的信息
      • 在用户登录后收到多位好友发送的信息
      • 用户接收信息的长度对信息的传输速度的影响
    • 多个用户同时群聊:
      • 多个用户同时创建群组的耗时
      • 多个用户同时在自己创建的群组里发送消息
      • 处于同一群组的多个用户同时接收到群聊信息先后顺序是否和发送顺序一致
      • 用户接收信息的长度对信息的传输速度的影响
  • 界面:

    • 登录界面:界面整洁美观,正常显示图片,userName,passWord输入框,登录按钮,注册按钮

    • 登录成功界面:提示登录成功

    • 登录失败界面:提示登录失败

    • 注册界面:界面整洁美观,正常显示用户名,密码,个性签名输入框,提交按钮

    • 注册成功界面:提示注册成功

    • 注册失败界面:提示注册失败

    • 好友列表界面:界面整洁美观,正确显示用户名

      • 首个用户上线:好友列表,群聊列表没有用户或群聊显示
      • 非首个用户上线:其他在线好友列表界面提示新用户上线通知,刷新好友列表和群聊列表,上线用户界面刷新显示在线用户。
    • 创建群聊界面:显示在线可勾选用户,按钮可单个勾选,可多个勾选,可不勾选。

  • 易用性:

    • 点击按钮弹出相应界面
    • 聊天界面按enter键发送信息
    • 关闭好友列表界面,登录界面下线,关闭其他界面回到好友列表界面不下线
    • 关闭聊天界面,再次打开还有历史记录。
  • 安全性:

    • 用户名重复登录(失败)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值