Skip to content

Java大作业,基于socket实现的在线多人聊天室,但是写的时候还没学过数据库,存盘方式比较简陋

Notifications You must be signed in to change notification settings

TJhaitang/ChatProj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 

Repository files navigation

待实现功能

  • 时间格式转换问题
  • 待发送消息队列
  • 登录时本地和服务器端消息同步
  • 服务器与本地的文件创建
  • 用户界面的map
  • 本地消息的处理
  • 服务器消息的转发
  • 加好友
  • 建群
  • 依时间排列的消息列表
  • 打开聊天窗时再次点击使得窗口弹出(获得焦点)
  • 文件路径问题

下一步工作

  • 加好友
  • 群组功能:
  1. 向服务器提交建群申请(成员、群名
  2. 服务器向本地传回群ID,并将群名、id群成员保存在服务器
  3. 服务器向群成员发送加群申请
  4. 服务器接受申请、将群成员更新,并将更新发送给现有群成员
  • 发送图片(文件类似)
  1. 聊天窗内按下发送图片按钮,选择图片发送
  2. 本地将图片放入聊天文件夹中,并给图片重命名
  3. 本地通过msg发送聊天记录,通过file发送图片。服务器读取msg后从file读取图片
  4. 服务器将图片保存在文件中,并将信息用同样的方式转发给目标用户,转发完毕后删除服务器端图片。

更新日志


210605xjz

增加

  1. 完善了加好友与加群的逻辑,现在应该没有什么bug了

修复

  1. 修复了加群时交互错乱的问题

210530xjz

增加

  1. 增加了加好友、建群的本地与服务器逻辑
  2. 增加了ClientWindow::addMessage(String str)方法,用以在消息展示框展示信息

改动

  1. 调整了未找到消息记录时的逻辑

其他

  1. 加好友的格式为:好友1|好友2|好友3|……
  2. 加群的格式为:群名:群成员1|群成员2|……
  3. 输入格式检查还未写,现在写的好像不能用
  4. 现在在主界面创建之前消息就想往MsgList推了,会推失败
  5. 有关建群的功能还有相当多的bug

210529xjz

增加

  1. 增加了消息列表、消息选项卡。推送消息时需重写消息选项卡中的Send与getMsgString方法
  2. 增加了用户信息展示框
  3. 增加了加好友与建群的方法接口

改动

  1. 将好友列表、群组列表、消息列表改为了继承了JPanel类的TargetList
  2. 在TargetList中重写了add与remove方法,现在可以直接调用这两个方法以自动调整大小

其他

  1. 用户名有禁止字符:| ; \n G(还没实装)
  2. 发送消息:MsgList.add(new MsgPane(){@override});

210529nyz

增加

补充用户最近聊天消息及时间

210528nyz

改动

  1. 改动用户主面板UI,建立滚动界面;
  2. 显示用户头像以及用户名称修改位置

210528xjz

改动

  1. 完善了服务器端的消息暂存
  2. 完善了服务器端的群组消息转发
  3. 将secondPerson密码改为123456
  4. 将消息格式末尾加了一个TargetId--好友为好友名、群组为群Id(过去的消息不受影响)

其他

  1. 群id格式:'G'+number

210527xjz

增加

  1. 增加了服务器端的群组消息分发

改动

  1. 将聊天窗口设置为可改变大小,并对其中的组件进行了动态调整

210527nyz

增加

  1. 增加文件操作类(MyUtil.java)
  2. 实现登录时服务器与客户端的同步,包括文件对比、写入的过程
  3. 增加缓冲区,实现文件接受的过程
  4. 增加本地消息队列

改动

  1. 重写客户端HandSession类

210526xjz

增加

  1. 增加了群组选项卡,本地群组列表的格式为"群组ID\n群组名",具体见文件

改动

  1. 将ClientWindow中的hashmap的元素类型由FriendWindow改为了ChatWindow以适应GroupWindow
  2. 删除了目前的全部用户信息,进行了重新注册,以测试注册用户功能以及整理一下文件格式.admin:123456;secondPerson:qwerttt
  3. 将选项卡的创建改为类的实例化,并适配了群组选项卡

修复

  1. 修复了用户界面聊天对象默认背景颜色为灰色的问题

其他

  1. 出现了群组发送消息时的问题
  2. 调整了一下信息标签,还没调整完

210525xjz

增加

  1. 增加了服务器端对暂存信息的入队
  2. 增加了发送图片的自动适配大小功能

改动

  1. html不好用,换了一种方法插入图片

修复

  1. 修复了图片的对齐问题
  2. 修复了用户输入“|”时的错误逻辑判断,加强了对用户输入的监督

其他

  1. 服务器端消息队列还没写完,主要还剩对信息的写入文件

210523xjz

增加

  1. 增加了服务器端在用户未在线时的消息暂存功能入口
  2. 增加了一个程序图标

改动

  1. 重写了服务器端HandleAsession的代码

修复

  1. 修复了接收消息格式问题
  2. 修复了转发消息队列不生效的问题,但我不明白为什么修好了

其他

  1. secondPerson消息记录打开时位置不在最下方
  2. 转发消息队列不生效
  3. Reciever和Sender的线程似乎有问题

210522xjz

增加

  1. 增加了消息展示框对双方消息的不同对齐展示
  2. 增加了消息展示框对日期与内容的不同颜色展示
  3. 增加了创建文件失败时的提示框
  4. 增加了聊天窗的html支持,现在可以在里面放图片了(但还不能发图片)

改动

  1. 在creatNewUser方法中加入了文件与图片文件夹
  2. 将聊天记录格式加上了一个标签(TEXT,IMG,FILE)
  3. 将服务器端用户密码保存方式改为MD5码保存(不安全,后续可能换为PBKDF2)

修复

  1. 修复了聊天框没法使用换行的问题:将\n明文保存

其他

  1. 现在图片格式无法调整:对齐方式、大小、文字环绕等
  2. 信息过互联网延迟过高,应该简化与服务器的交互流程
  3. 在加载图片的时候如果没有找到图片应该加入一个default
  4. 内网穿透软件稳定性不高,而且挂国外节点网速不高
  5. 要不要把发信息也放到HandleAsession里面?

210521xjz

增加

  1. 实现了局域网内的连接
  2. 实现了互联网的连接
  3. 增加了服务器端对消息(TEXT)的转发
  4. 增加了对用户退出行为服务器端的应对

改动

  1. 将发送信息的反馈取消,后续将放在用户端的接收器中

修复

  1. 修复其他账号登录时好友列表加载错误的问题
  2. 修复了局域网内连接不上的问题:关闭防火墙

其他

  1. 有关历史记录在聊天框中展示的问题:
    如果聊天记录过多的话应该不能全部展示,那便需要“仅仅展示五十条”之类的操作,为了降低复杂度这里应该从最新的消息向前搜索五十条,这样的话就需要把消息反向插入展示框中
  2. 对于用户的账号密码存储问题,咱们可以加上服务器端的安全措施,就是将账号密码的哈希值存在服务器端

210521nyz

增加

本地创建新用户;补充服务器创建新用户

服务器发送消息接受初步

改动

修改创建窗体位置,使其适用于不同设备


210519nyz

增加

采用map存储打开聊天窗,便于对聊天窗口进行操作

改动

修改删除聊天窗机制,现在关闭聊天窗即可释放资源

README以后在下面更新吧,最上面放待完成功能/问题

修复

可以无限打开同一聊天窗的bug


210518nyz

增加

  1. 初步建立用户主窗口,与聊天窗口建立连接,可多开聊天窗
  2. 主窗口初步与服务器相连

改动

修改文件读取方式:System.getProperty("user.dir") + "/src/client/users/" 在login中获取用户姓名 优化创建选项卡中滚动窗的代码,提供拓展能力


210516xjz

增加

  1. 增加了用户聊天窗口的父类,对其中的大体结构进行了确定
  2. 增加了聊天窗口的历史信息读取,消息记录文件应在加好友时创建
  3. 增加了服务器端的用户登录输出

改动

修复

其他

服务器与本地文件匹配时,保证服务器数据先于本地,同步时为服务器端数据下载到本地-匹配方式:md5HashCode

  1. 聊天框内可以加入9-patch图片背景
  2. 聊天信息展示框使用JTextPane,可以实现html语言插入从而展示图片(包括gif).
  3. 美化等后面再做吧我现在是做不下去了
  4. 本地文件中群组名由服务器确定
  5. 目前输入框无法输入回行

210515xjz

增加

  1. 增加了连接类,创建了sever:TargetConnection与client:ServerConnection来建立连接,实现了其中的对应逻辑.
  2. 增加了服务器端的HashMap用以存储用户

改动

  1. 将之前的信号全部换为了Flag接口中的常量

修复

  1. 修复了用户端关闭后偶尔出现的服务器崩溃问题

其他

  1. 很多类都写成了内部类,不知道这样做是好是坏
  2. 以后在服务器端加一点用户的状态输出

210514xjz

  • 会不会出现同时向服务器发送多个请求的情况,这时候服务器端该怎么接收呢?


一个可联网的网上聊天系统

设想功能:

  • 用户:用户的注册、登录、退出、建立与删除好友关系、(查看对方是否在线)
  • 文本对话:好友间进行即时聊天
  • 群组对话:用户发起与删除对话群组、用户接受、拒绝群组邀请、用户退出群组
  • 朋友圈功能:用户发送好友可见的广播式信息(朋友圈)、(可设置消息“不让ta看”、“不看ta”)——非即时、需用户主动刷新 可能扩展:
  • 文件:文件的发送、云端暂存与接收
  • 聊天扩展:图片与音频的发送与接收、展示

实现方法

服务器端

  1. 存储(文件)

所有用户 ID,密码;朋友圈内容
好友关系矩阵
群组ID,群主,用户ID

  1. 准备消息队列:目标ID,内容

逻辑:
与用户交换信息:

  1. 一对一:

接受 - 找对象 - 在线:发 / 没有在线:存文件
收什么发什么

  1. 群:

接收 - 找群ID - 给群中所有人发信息 - 在线/不在线

  1. 朋友圈:

接受 - 存文件
用户端给信号 - 用户的所有好友的朋友圈按时间顺序发 (对比标记更新)

本地端

  1. 存储(文件)

本地文件存储结构

  1. 聊天记录(本地/服务器):
  2. 索引文件夹:

交互对象文件:<时间><对象(群)><已读?><内容地址>

  1. 资源文件夹: 资源:文件名:内容
  2. 用户配置信息:
  1. 本地逻辑:
  1. GUI :
  2. 登陆: >>* 注册:用户名/密码 >>* 登陆:用户名/密码 >>* 构建用户界面:读本地 - 更新信息(对比标记) - 接受信息 界面内容:…………
  3. 新窗口:对象
  4. 向服务器发信息:
    ……
  • 内容: >>1. 一对一:<时间><来源><对象><内容索引(大体积内容:图片)> //先发索引再发图片 >>2. 群: <时间><来源><群ID><内容索引> >>3. 朋友圈:<时间><内容>
  1. 由服务器接受信息: >>* 处理

。。

About

Java大作业,基于socket实现的在线多人聊天室,但是写的时候还没学过数据库,存盘方式比较简陋

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages