【JAVA学习笔记】69 - 多用户通信系统

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/QQClient

https://github.com/yinhai1114/Java_Learning_Code/tree/main/QQServer

〇、环境设置以及前言

          

该项目内会弱化UI界面的设计,因为JAVA本质不是用来开发界面的。 

项目开发流程

对于单主机,如何启动多个main方法执行程序

点击run就可以在控制台看到多个main程序了

一、需求分析

1.用户登录

2.拉取在线用户列表

3.无异常退出(客户端、服务端)

4.私聊

5.群聊

6.发文件

7.服务器推送新闻

二、界面设计

1.用户登录

2.拉取在线列表

3.私聊

4.群聊

5.发文件

6.文件服务器推送新闻

三、功能实现

1.用户登录

1.功能说明因为还没有学习数据库,我们人为规定用户名/id = 100,密码123456就可以登录,其它用户不能登录,后面使用HashMap模拟数据库,可以多个用户登录.

参考上面的图,需要很多代码才能实现打通管道并保持管道。

2.拉取在线用户列表

服务端发送在线列表给客户端通过Message

3.无异常退出 

我们现在的程序只是退出了main主线程,但是和服务器的通信线程并没有结束,所以就会导致程序实际还在运行

4.私聊

5.群聊

该功能跟私聊的功能基本类似

6.发文件

也比较简单,有socket管道之后直接传入数据流即可,

7.服务器推送新闻

本质上是群发消息

8.拓展 离线功能

1.实现离线留言,如果某个用户没有在线,当登录后,可以接受离线的消息

2.实现离线发文件,如果某个用户没有在线,当登录后,可以接受离线的文件

文件大同小异,麻烦的还是面向对象和haspmap的基础要搞好,不然添加会很混乱,代码就不拷贝到这里了,直接放在git了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/138086.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Final Cut Pro X for Mac:打造专业级视频剪辑的终极利器

随着数字媒体技术的不断发展,视频剪辑已经成为各行各业不可或缺的一部分。Final Cut Pro X for Mac作为一款专业的视频剪辑软件,凭借其强大的功能和易用性,已经成为Mac用户的首选。本文将向您详细介绍Final Cut Pro X for Mac的优势、功能以及…

联想笔记本怎么录屏?这个方法请你收好

“联想笔记本怎么录屏呀?开学刚买的联想笔记本,本来打算用来上网课,现在老师叫把网课录制下来,用来课后复习,可是我不会录屏呀,这怎么办呀,希望大家帮帮我!” 屏幕录制已经成为人们…

Android 基本属性绘制文本对象FontMetrics

FontMetrics对象 它以四个基本坐标为基准,分别为: ・FontMetrics.top ・FontMetrics.ascent ・FontMetrics.descent ・FontMetrics.bottom 如图: 要点如下: 1. 基准点是baseline 2. Ascent是baseline之上至字符最高处的距离 3. Descent是ba…

【中国知名企业高管团队】系列66:老板ROBAM

昨天华研荟为您介绍了厨电领域的TOP企业——方太FOTILE的发展历程,以及作为企一代茅理翔和企二代茅忠群的创业故事。 今天为您介绍同处浙江的老板电器。 一、关于老板电器 以下内容来自老板电器官网介绍: 杭州老板电器股份有限公司创立于1979年&…

DC电源模块的电阻或电位器对输出电压的调节

BOSHIDA博电科技 DC电源模块的电阻或电位器对输出电压的调节 DC电源模块是电子设备中广泛应用的一种电源模块,它能够将交流电转换为稳定的直流电,并为其他电路或设备提供所需的电源。在一些场合中,需要对DC电源模块的输出电压进行调节&#…

postman的使用

Postman的环境变量以及全局变量 设置接口的环境变量(环境变量就是全局变量),设置接口的全局变量(全局变量是能够在任何接口里面访问的变量) 全局变量通过 {{变量名}} 获取 接口关联 场景:需要将“登录接口…

轻松理解 Transformers (4) :Decoder 和 Output 部分

编者按:Transformers凭借其卓越的性能,已经成为自然语言处理领域的代表性模型架构。但是Transformers的内在机制却比较复杂,对许多读者来说可能还存在一定的难度。本系列对 Transformer各组件进行逐一剖析,我们可以更直观地理解这…

HTML表单的基本应用

注释很详细,直接上代码 效果: 涉及内容: 1.信息输入框 2.单选框 3.复选框(多选框) 4.文本输入框 5.下拉栏 6.隐藏域(用于防脚本) 7.确认按钮 8.重置按钮 9.普通按钮 10.禁用部件 11.下拉栏默认选…

Git常用指令以及常见问题解决

摘要:记录本人Git常用指令以及常见问题解决 1.Git流程 2.具体操作 git init:初始化目录(一般直接git clone远端的工程,这一步都可以省略掉); 输入命令“git config --global user.name xxx”来配置你的用…

MySQL最新2023年面试题及答案,汇总版(6)【MySQL最新2023年面试题及答案,汇总版-第三十六刊】

文章目录 MySQL最新2023年面试题及答案,汇总版(6)01、MySQL中DATETIME和TIMESTAMP的区别?02、简单描述MySQL中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写…

【毕业论文】基于微信小程序的大学生互助平台设计与实现

完整下载链接https://download.csdn.net/download/No_Name_Cao_Ni_Mei/88519756 基于微信小程序的大学生互助平台设计与实现 Design and Implementation of a College Student Assistance Platform based on WeChat Mini Program 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.…

文案神器:8款AI文案工具轻松搞定文案

无论你是否准备好,它们都已经来了。如果你知道如何使用它们,AI文案工具可以成为你的新朋友。 现在AI文案工具无处不在,眼花缭乱,从内容生成器到电子商务聊天机器人。原因很简单:AI可以节省大量时间和金钱。这是我们都…

GaussDB SQL基础语法示例-循环语句

目录 一、前言 二、GaussDB数据库总的循环语句 三、GaussDB中常用循环语句(语法 示例) 1、LOOP循环语句 2、WHILE … LOOP 循环语句 3、FOR … LOOP循环语句(integer变量) 4、FORALL循环语句(批量查询&#xf…

RK3568驱动指南|第七期-第63章 dtb展开成device_node实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

C++——const成员

这里先用队列举例&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <assert.h> using namespace std; class SeqList { public:void pushBack(int data){if (_size _capacity){int* tmp (int*)realloc(a, sizeof(int) * 4);if (tm…

el-upload上传附件预览只能上传一个,上传玩没有+号

el-upload上传附件预览只能上传一个&#xff0c;上传玩没有号 一、效果图二、主要代码 一、效果图 二、主要代码 实现原理是通过控制css显隐hideUpload 字段 <template><div id"uploadOne"><!-- 预览附件上传一个 --><el-upload:class"{ h…

ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架11.13

ChatkBQA&#xff1a;一个基于大语言模型的知识库问题生成-检索框架 摘要1 引言3 准备工作4 方法4.1 ChatKBQA概述4.2 在LLMS上进行高效微调4.3 用微调LLMS生成逻辑形式4.4 实体和关系的非监督检索4.5 可解释查询执行 摘要 基于知识的问答&#xff08;KBQA&#xff09;旨在从大…

C 语言递归

C 语言递归 在本教程中&#xff0c;您将借助示例学习使用C语言编程编写递归函数。 调用自身的函数称为递归函数。并且&#xff0c;这种技术称为递归。 递归如何工作&#xff1f; void recurse() {... .. ...recurse();... .. ... }int main() {... .. ...recurse();... .. …

【C++初阶】类与对象(三)

目录 一、再谈构造函数1.1 初始化列表1.1.1 初始化列表写法1.1.2 哪些成员要使用初始化列表 1.2 初始化列表的特点1.2.1 队列类问题解决1.2.2 声明顺序是初始化列表的顺序 1.3 explicit关键字1.3.1 explicit关键字的作用 二、static成员2.1 类的静态成员概念2.2 类里创建了多少…

GPTS应用怎么创建?GPTS无法创建应用很卡怎么办

在首届开发者大会上&#xff0c;OpenAI宣布推出了GPTs功能&#xff0c;也就是GPT Store&#xff0c;类似App Store的应用商店&#xff0c;任何用户都可以去参与创建应用。那么GPTS应用该如何创建?碰到应用无法创建很卡怎么办呢?下面就为大家带来GPTS应用创建图文教程&#xf…