【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了

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间序列预测实战(十四)Transformer模型实现长期预测并可视化结果(附代码+数据集+原理介绍)

论文地址->Transformer官方论文地址 官方代码地址->暂时还没有找到有官方的Transformer用于时间序列预测的代码地址 个人修改地址-> Transformer模型下载地址CSDN免费 一、本文介绍 这篇文章给大家带来是Transformer在时间序列预测上的应用,这种模型最…

jupyter lab常用插件集合

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

笔试题之指针和数组的精讲

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

【电源专题】低功耗设备如何解决POE协议要求的PD最小功耗?

要让PD正常工作起来除了需要与PSE握手协商外,还要求PD有一个最小功耗输出。 其原因是如果PD没有在一定时间内给出一个最小功耗,那么PSE将会认为PD设备断开而自动关闭,将功率分配给其他网口。对于不同的类别PD,其要求也不一样。如下所示为Type 1/2/2/4最小电流的要求:如类…

面试官问 Spring AOP 中两种代理模式的区别?很多面试者被问懵了

面试官问 Spring AOP 中两种代理模式的区别?很多初学者栽了跟头,快来一起学习吧! 代理模式是一种结构性设计模式。为对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,并允许在将请求提交给对象前后进行一…

【Python小程序】浮点矩阵加减法

一、内容简介 本文使用Python编写程序,实现2个m * n矩阵的加、减法。具体过程如下: 给定两个m*n矩阵A和B,返回A与B的和或差。 二、求解方法 将两个矩阵对应位置上的元素相加。 三、Python代码 import numpy as np# 用户输入两个矩阵的维…

25.4 MySQL 函数

1. 函数的介绍 1.1 函数简介 在编程中, 函数是一种组织代码的方式, 用于执行特定任务. 它是一段可以被重复使用的代码块, 通常接受一些输入(参数)然后返回一个输出. 函数可以帮助开发者将大型程序分解为更小的, 更易于管理的部分, 提高代码的可读性和可维护性.函数在编程语言…

如何在CentOS上安装SQL Server数据库并通过内网穿透工具实现远程访问

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,…

【2021集创赛】Risc-v杯三等奖:基于E203 ShuffleNet的图像识别SoC

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位:中国科学技术大学 队伍名称:Supernova 总决赛奖项:三等奖 1.项目简介 本设计以E203处理器为核心,添加协处理器、神经网…

在CentOS7环境下安装Mysql

1.卸载已有的不需要的环境 使用如下命令,查看系统中是否已经存在mysql和mariadb(mysql的一个子分支) ps ajx | grep mariadb ps ajx | grep mysql 如果显示与我相同,则代表系统中已经存在这些环境并且已经停止 如果不相同则需要…

支付宝支付==沙盒

地址 登录 - 支付宝 可以看到有买家和卖家账户了 完整代码 https://gitee.com/hebian1994/demo-zhifubao.git

el-table解决数据过少小于高度有留白的问题

问题:给el-table设置个高度,高度为500px,之后就添加如下4条数据,那么底部就没数据,直接就空白了,本文章就是为了解决这个问题,如果底部留白那么就添加几条空数据就行了.如果数据已达到高度了那么就不会留白了 1.效果 这个空列可以根据高度来决定添加几个空格子去铺满列表&…