QQ聊天室系统设计

QQ聊天室系统设计

概要

这是对于这学期的大作业的设计的总结与归纳,并在假期后对该练习项目进行重新构建以及功能添加,以下是对大作业原本的设计思路与过程进行记录。(需改进:(1)界面美化,分组功能应加强,(2)添加聊天记录文件并将路径和存入数据库在读出,(3)可以考虑将文件发送到云端实现云文件功能,(4)查找好友另起页面并获取列表,(5)将未登录的好友显示为黑白头像,不再不显示。(6)尝试学习ffmpeg制作视频功能。(7)将手动相对路径改为将绝对路径改为相对路径,由此可以避免之前的仅一个文件夹的图片可用。(8)好友删除(9)背景音乐修改)

一、网络消息设计

使用Java的Sockt并用其构建一套信息的判断及传输的机制,用于用户之间的互传。

1、首先介绍Socket的基础使用方式。

套接字需要相互连接方可使用,其Socket连接模型图如下:
在这里插入图片描述

我们使用一个HashMap来存储我们的服务器与客户端的每一个套接字链接(对于每一次服务器与客户端之间的链接,我们均进行一次判断,当且仅当,登录成功后,服务器会将链接好的套接字放入hashMap中,并使用服务器转发的方式对需要发送的其他用户的信息进行处理)。这样每个客户端仅仅需要与服务器进行信息交互,套接字无需与其他用户的套接字进行连接,这样可以避免套接字连接而产生的套接字争夺问题。(此处HashMap实质上是一个由链表实现的hash表,使用开放寻址法实现而成的。)

2、文件、字符串、表情包发送功能实现思路

对于文件而言,文件的数据大小过大,在传输时如果直接传输,由于TCP协议的不稳定行,极有可能产生数据丢失的情况,因此对于文件的发送,更好的方式是反复发送并通过服务器转发,但是需要注意,在接收方,我们不能使用循环来接收文件的信息。倘若使用循环在客户端接收文件信息,那么由于循环,接受方的客户端便会因为循环接收导致其他信息的接收无法接收,导致无法实现即时接收他人消息的功能,因此需要对该种消息进行特殊处理。如使用一个常量对信息进行标记,然后在接收时对信息进行分类接收处理(同时在发送时应当进行延时处理,避免发送速度过快,导致文件粘包问题。)。同时字符串以及图片信息也应当进行区分,以避免数据接收处理错误。形成聊天效果如下图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、信息接收功能

信息的接收由于无法确定发送方究竟是何时发送信息,且为了满足需求,我们不能将其设计为“回合制“的聊天方式,因此我们应当等待对方的信息以便处理,但同时,等待会导致整个进程阻塞无法执行其他功能,因此我们需要开启一个子线程来帮助我们接收一件处理信息。

4、登录注册界面

登录与注册是获取用户的核心,唯有登录成功才能开启其他功能,因此登录与注册是十分重要的,他们负责连接服务端,开启信息传输的通道。其界面及运行效果如下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

好友界面功能

统一显示各个好友的界面,并通过在该界面中的各个相关事件对信息进行处理。如 好友头像的点击事件会进入聊天界面等,在如在其子线程下,对接收信息的各项处理。
在这里插入图片描述
大概功能如上所述,该联系项目有待完善。
https://download.csdn.net/download/qq_44423125/12611737
项目地址先放CSND上,等放假后放girhub上。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值