`2020-12-28 18:08:38 星期一` ------------ ### 该仓库共有三项目 ### [SocketDemo](http://39.108.133.138:3000/weiyong/202012G09/src/master) - 初版 ### [LinkChat](http://39.108.133.138:3000/weiyong/202012G09/src/linkchat) - 拓展 ### [ChatRoom](http://39.108.133.138:3000/weiyong/202012G09/src/chatroom) - 终版 ------------ # SocketDemo ## 『 环境 』 #### jdk:1.8 #### 数据库 : MySQL5.7 #### 建表如下: ![表](https://s3.ax1x.com/2020/12/28/rTYqbQ.png "表") #### 注:is_online在线时为1,离线时为0。(默认为0) ## 『 模式 』 #### 采用C/S模式,使得各个客户端通过服务端转发来实现即时通讯的功能。 ## 『 思路 』 #### 由于202012G09小组的成员都没有服务器 #### 但我们又有着手实现的迫切需求 于是提出下面的思路: > 如下图: ![思路1](https://s3.ax1x.com/2020/12/28/r7kqde.png "思路1") #### - 将服务端内置到客户端 两端一体 #### - 每个客户端都成为自己的服务器 则免去中间服务器端 #### - 如此一来,发送和接收都在本机上不同客户端进行 ## 『 模块 』 - ### Register(注册) ##### 绘制窗口(注册界面) ##### 实现注册功能 >Tip: 监听注册事件 不能空输入,输入的两次密码必须一致。 插入数据库=>将注册客户的账号密码存储 自动插入前面一位+1的端口 - Dialogs1: 绘制注册验证对话框(确认注册成功并跳转至登录界面) - ### Login (登录) ##### 绘制窗口(登录界面) ##### 实现登录功能 >Tip: 监听注册按钮 点击注册跳转注册界面 监听登录事件 查询数据库=>验证账号密码及在线状态(存在且离线才能登录) 更新数据库=>更新客户在线/离线状态 查询数据库=>查询客户的服务端端口 开启服务端,开启客户端 - Dialogs4: 绘制登录验证对话框(确认登录成功并跳转至好友列表) - ### Online (线上) ##### 绘制窗口(好友列表) ##### 实现好友列表 >Tip: 监听选择/聊天/退出登录事件 查询数据库=>查询在线用户 显示用户到好友列表 更新数据库=>退出时更新用户在线/离线状态 点击聊天跳转至聊天界面 - ### Connect (连接) ##### 绘制窗口(聊天界面) ##### 实现聊天功能 >Tip: 通过多线程分别创建/开启客户端和服务端 客户端连接聊天对象的服务端,服务端连接聊天对象的客户端 循环不断的发送和接收/写入和读取 将接收和发送的数据在界面上显示 断开时关闭聊天功能的一切服务 ## 『 效果 』 >![注册](https://s3.ax1x.com/2020/12/30/rqXbPx.png "注册") >![登录](https://s3.ax1x.com/2020/12/30/rqXTaR.png "登录") >![好友列表](https://s3.ax1x.com/2020/12/30/rqX7I1.png "好友列表") >![聊天]( https://s3.ax1x.com/2020/12/28/rTggrd.png "聊天")