Java网络多线程
网络相关概念:




关于访问: IP+端口
因为一个主机上可能有多个服务, 一个服务监听一个端口,当你访问的时候主机通过端口号就能知道要和哪个端口发生通讯.因此一个主机上不能有两个及以上的服务监听同一个端口.


协议简单来说就是数据的组织形式
好像是两个人交流一样,要保证自己说的对方能够听懂, 网络传输协议就是规定了一种数据组织形式,发送数据按照这种形式组织数据, 接受数据方按照这种协议对应的方式来解析获取传输的数据.

相关类:

Socket:

TCP网络编程:


设置结束标记: socket.shutdownOutput()
服务器端在想客户端发送数据时, 如果不在outputStream之后设置结束标志,客户端就会一直等待,因为无法判断是否输入完成
而至于为什么在服务器端不返回给客户端信息的例子中在客户端不需要设置结束标志可能是因为客户端不需要接受数据,程序执行完毕, 服务器就结束读取.(文心一言的解释:当客户端程序结束时,连接的自然关闭将足以通知服务器所有数据都已发送完毕。)
在使用字符流传输数据时,首先将字节输出流转化成字符输出流,使用nextline()插入一个换行符作为结束标志, 这就要求接收数据方一定要使用readline()方法来读取数据,否则读不到结束标志.
文件上传示例:

在C:\Users\86150\Desktop\Java_c_a\net\giao_12_25中
TCP网络通信编程:
现在的windows中打不开dos控制台了, 在cmd控制台也能执行这个命令
netstat -anb 可以查看是端口是哪个应用程序在监听(需要管理员权限)

UTP网络通讯编程:



作业3:

可以利用这种技术将文件都放在服务器的磁盘中, 然后对于接收端发送请求,服务端发送对应的文件,接收端对文件进行接收处理, 我想像一些歌曲视频播放的软件或网站应该就是这样实现的.(文件源放在服务器中, 接收端发送请求来获取文件).
作业的实现代码路径:C:\Users\86150\Desktop\Java_c_a\net\giao_12_25项目下的Homework3包下.
项目开发流程:

多用户及时通信系统:
项目地址:







项目整体分析:

简单来说,就是客户端和服务器端都有多个socket, 客户端的每个socket分别用于传输不同的信息(这样进行分类便于管理),一个客户端可以和服务器端有多个连接
客户端和服务器端都有多个线程, 每个线程中有一个socket, socket用集合hm来进行管理
serialVersionUID字段:
在传输过程中是使用Object,所以User和Message类要是能实现序列化, 即实现序列化接口,然后最好显式地声明serialVersionUID字段
Java官方强烈建议所有要序列化的类都显式地声明serialVersionUID字段
它主要用于在序列化和反序列化过程中进行版本校验,确保序列化的对象能够正确地被反序列化回原始对象或兼容的对象
项目模块:
整体实现思路:
对于客户端和服务端对于每个连接都建立一个线程, 也就是说,每个Socket用一个线程管理, 再建立一个集合用于管理线程
这个线程类要继承Thread, 里面有属性Socket
整个传输都是使用的类, 所以使用了ObjectInputStream和ObjectOutputStream
对于客户端和服务端都要实时读取Socket上的信息, 所以要使用一个死循环来一直执行run方法,在run方法里面时刻读取信息
针对读取到的信息的类型分别进行对应的处理
服务器有一点特殊的是,他要比客户端提前运行, 先建立连接,然后才能发送消息
所以需要服务端一开始就要有一个死循环来建立连接
建立连接后, 首先收到的信息是User,进行判断用户名和密码的正确性,然后将信息放在一个Message中返回去
因为此时已经建立连接了, 所以将此Socket放在线程中, 再将线程放在集合中,在执行线程的start方法,来时刻保持和客户端的通讯
对于客户端, 当与服务端建立连接并发送User时, 也要将此Socket放在线程中,将程序放在集合中,再启动线程的start方法来保持和用户端的通讯
对于信息的接收都是放在线程的run方法中的, 因为它是随时的,所以要使用死循环
对于信息的发送则是分布在很多的方法中,针对不同的需求编写不定的方法发送信息
1.登录模块:
首先要建立客户端和服务器是连接, 两个用于传输的类: User, Message
User: 用于做用户登录和注册判断, 包含用户名, 用户密码属性
Message: 用于传输信息,包含发送者,接收者, 消息类型, 消息内容
在登录判断中, 客户端传输User对象给服务端,服务端做判断后传输Message给客户端
客户端在线程中接收到Message后针对其内容进行相应的处理(登录成功/失败)
2.拉取在线用户:
这是客户端的一个请求, 在一个方法中发送Message, Message中声明的信息类型, 服务端针对信息类型得知是一个返回在线用户的请求, 然后通过集合获取所有在线用户,处理成String, 然后放在Message中通过ObjectOutputStream返回客户端.
3.无异常退出:

4.发送文件:

5.服务端推送消息:

在服务端专起一条线程用于做这个事
6.离线消息文件推送服务:

用一个集合存放离线信息, 待用户上线后发送
当服务器接收到sender的Message时先判断getter是否在线, 如果不在线则将信息存进集合.
实现思路: 在做判断用户登录成功后要发送登录成功或失败的信息给客户端, 如果是登陆成功的话, 则紧接着去集合中去找是否有发给这个用户的离线信息, 如果有就发给他,然后将此信息从集合中删除.
相关文章:
Java网络多线程
网络相关概念: 关于访问: IP端口 因为一个主机上可能有多个服务, 一个服务监听一个端口,当你访问的时候主机通过端口号就能知道要和哪个端口发生通讯.因此一个主机上不能有两个及以上的服务监听同一个端口. 协议简单来说就是数据的组织形式 好像是两个人交流一样,要保证自己说…...
【H2O2 | 软件开发】Axios发送Http请求
目录 前言 开篇语 准备工作 正文 概念 封装工具包 示例 结束语 前言 开篇语 本系列为短篇,每次讲述少量知识点,无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的,希望对诸位有所帮助。 如…...
VScode 运行LVGL
下载vscode解压 环境安装 安装mingw64,gcc 版本必须8.3以上 安装cmak 系统环境变量Path中添加(以实际安装目录为准) C:\Program Files\mingw64\bin C:\Program Files\CMake\bin 将GUI-Guider生成的代码目录拷贝一份放到vscode项目目录…...
AIP-165 按条件删除
编号165原文链接https://google.aip.dev/165状态批准创建日期2019-12-18更新日期2019-12-18 有时API需要提供一种机制,按照一些过滤参数删除大量资源,而非提供待删除的各资源名字。 这是一个稀有的场景,用于用户一次性删除数千或更多资源的…...
React Next项目中导入Echart世界航线图 并配置中文
公司业务要求做世界航线图,跑了三个ai未果,主要是引入world.json失败,echart包中并不携带该文件,源码的world.json文件页面404找不到。需要自己寻找。这是整个问题卡壳的关键点,特此贴出资源网址。 目录 一、安装 二…...
QT与网页显示数据公式的方法
一.网页中显示数学公式通常有三种主要方法 1.图片方式 原理:将公式转换为图片(如 PNG、SVG),通过 <img> 标签嵌入网页。 实现步骤: 使用工具(如 LaTeX dvipng、在线生成工具)将公式渲…...
深入解析APP订阅页的运作机制(订阅页如何运作)
在当今数字经济的背景下,订阅模式已成为许多企业获取稳定收入的重要方式。无论是软件、视频流媒体还是电子商务,订阅服务都能为用户提供持续的价值体验。然而,如何有效地设计和运作一个订阅页,是决定用户是否愿意订阅的关键因素。…...
Golang倒腾一款简配的具有请求排队功能的并发受限服务器
golang官方指南[1]给了一些代码片段,层层递进演示了信道的能力: 1>. 信号量2>. 限流能力 var sem make(chan int, MaxOutstanding) func Serve(queue chan *Request) {for req : range queue {req: reqsem <- 1 go func() { // 只会开启MaxOutstandin…...
【运维】服务器系统从centos7重装为ubuntu22.04
目录 一、硬盘准备二、系统安装三、安装基本系统组件四、挂载机械硬盘五、问题解决 一、硬盘准备 【注意:这一步会把硬盘的数据清空,所以需要找一个空的U盘或者把U盘数据备份】 ubuntu22.04下载 需要先安装 bittorrent 下载完之后会打开一个网页 然后…...
创新技术引领软件供应链安全,助力数字中国建设
编者按 随着数字化转型的加速,针对软件供应链的攻击事件呈快速增长态势,目前已成为网络空间安全的焦点。如何将安全嵌入到软件开发到运营的全流程,实现防护技术的自动化、一体化、智能化,成为技术领域追逐的热点。 悬镜安全作为…...
【设计模式】建造者模式——工厂模式
三、建造者模式——工厂模式 3.1 工厂模式 创建一个类对象的传统方式是使用关键字new, 因为用new 创建的类对象是一个堆对象,可以实现多态。工厂模式通过把创建对象的代码包装起来,实现创建对象的代码与具体 的业务逻辑代码相隔离的目的(将对象的创建和…...
Java基础:枚举类enum入门案例
1.基础枚举定义与使用: package com.zxy;public class Main {public static void main(String[] args) { // 获取枚举值cars car cars.BMW;switch (car){case BMW :System.out.println("BMW");break;case BENZ :System.out.println("BENZ&…...
蓝桥备赛(18)- 红黑树和 set 与 map(上)
对于二叉搜索树 , 平衡二叉树 , 以及红黑树 , 目前只需要了解背后的原理 , 不做代码实现的要求 , 重要的就是了解各种操作的时间复杂度即可 , 为set 与 map 做铺垫 一、二叉搜索树 1.1 基本概念 相较与于堆…...
Spring Boot集成EasyExcel
1. 初始化Spring Boot项目 首先,使用Spring Initializr(https://start.spring.io/)生成一个基本的Spring Boot项目。选择以下依赖项: Spring WebLombok (用于减少样板代码)SLF4J (用于日志记录) 2. 添加依赖 在你的pom.xml文件…...
obeaver 连接oracle 库 模式乱码
下载orai18n-12.1.0.2.0.jar 库--添加文件--把提前下载好的jar 随便放在一个文件夹下--添加文件选中,然后点击找到类, 选择类,确定即可正常 下载地址:https://download.csdn.net/download/weixin_42845364/88368302...
ChatGPT 使用教程:深度探索AI常用功能技巧
文章目录 前言一、ChatGPT介绍1.1 人工智能与自然语言处理的发展1.2 ChatGPT 的诞生与意义 二、ChatGPT 基础入门2.1 注册与登录2.2 对话界面介绍2.3 基本提问方式 三、常用功能详解3.1 文本生成3.2 问题回答3.3 语言翻译3.4 代码生成与调试 四、高级使用技巧4.1 指令优化4.2 多…...
無人機的應用程序有那些可以部署在linux server 系統
Dronecode Project:由 Linux Foundation 主導的開源項目,提供無人機航空操作系統和導航工具的開發框架,適合開發者使用。 DeepSeek-R1:這是一個人工智能模型,適用於無人機的數據處理和分析,支持在 Linux 系…...
[HUBUCTF 2022 新生赛]messy_traffic
下载附件 看到文件类型直接用wireshark打开,对MySQL协议进行追踪流,并没有什么发现,后面对NO.437发现有用信息,http追踪流 发现**system(‘cat passwd.txt’);**这里是在打开查看passwd.txt,密码是"SignUpForHUBU…...
铁人三项(第五赛区)_2018_rop题解
先启动靶机连接看看。 直接ls,就给我输出句话,看来不能直接拿flag。 那走下流程。 查下位数和其他信息: 可以看到是32位的包,开了NX,但没开其他保护。 用ida32打开looklook。 主函数就是个这,看到了弹出的…...
package.json 依赖包约束及快速删除node_modules
文章目录 一、package.json版本约束1、初始项目安装2. 已有 yarn.lock 文件的项目安装3. 特殊情况手动修改 package.json 版本:使用 yarn upgrade 命令: 二、快速删除node_modules三、depcheck 检测npm未使用的依赖 一、package.json版本约束 1、初始项…...
Compose 实践与探索六 —— 动画的流程控制与 Transition
1、Block 参数:监听每一帧 animateTo() 与 animateDecay() 中都有一个函数类型的 block 参数: suspend fun animateDecay(initialVelocity: T,animationSpec: DecayAnimationSpec<T>,block: (Animatable<T, V>.() -> Unit)? null): An…...
虚拟机Contos7为啥不能被本机电脑访问?
1.查看防火墙是否开启 systemctl status firewalld.service 2.如果防火墙关闭就可以直接被访问 3.如果防火墙打开了我们需要开放端口(下面为防火墙一系列指令) # 关闭防火墙 systemctl stop firewalld.service# 打开防火墙 systemctl start firewalld.service# 关闭开启自启…...
【21】单片机编程核心技巧:if语句逻辑与真假判断
【21】单片机编程核心技巧:if语句逻辑与真假判断 七律 条件分野 if语句判真假,括号条件定乾坤。 非零为真零为假,大括号内藏玄门。 省略虽简风险在,代码规范护本根。 单片逻辑由心控,条件分支自成文。 注释…...
Java 实现 Android ViewPager2 顶部导航:动态配置与高效加载指南
Java 实现:明确使用的编程语言。Android ViewPager2:技术栈和核心组件。顶部导航:功能点。动态配置与高效加载指南:突出动态配置的灵活性和性能优化的重点。 在 Android 中使用 Java 实现 ViewPager2 和 TabLayout 的顶部导航也是…...
Python :数据模型
一. 什么是数据模型? Python数据模型是Python对象系统的抽象,通过一组特殊方法(如__init__、__len__等)和协议(如迭代协议、上下文管理协议),定义了对象如何与语言的内置功能(如…...
idea超级AI插件,让 AI 为 Java 工程师
引言 用户可在界面中直接通过输入自然语言的形式描述接口的需求,系统通过输入的需求自动分析关键的功能点有哪些,并对不确定方案的需求提供多种选择,以及对需求上下文进行补充,用户修改确定需求后,系统会根据需求设…...
施磊老师c++笔记(五)
继承与多态-深入掌握oop语言最强大的机制 文章目录 继承与多态-深入掌握oop语言最强大的机制1.继承的基本意义2.派生类的构造过程3.重载,隐藏,覆盖4.虚函数, 静态绑定和动态绑定--面试重点5.虚析构函数--重点在于什么呢时候用6.再讨论虚函数和动态绑定7.理解多态到底是什么8.理…...
µCOS-III从入门到精通 第十四章(软件定时器)
参考教程:【正点原子】手把手教你学UCOS-III实时操作系统_哔哩哔哩_bilibili 一、软件定时器简介 1、定时器的概念与种类 (1)定时器的概念:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件&…...
MySQL数据库复杂的增删改查操作
在前面的文章中,我们主要学习了数据库的基础知识以及基本的增删改查的操作。接下去将以一个比较实际的公司数据库为例子,进行讲解一些较为复杂且现时需求的例子。 基础知识: 一文清晰梳理Mysql 数据库基础知识_字段变动如何梳理清楚-CSDN博…...
KCD 北京站丨Volcano 邀您畅聊云原生智能调度技术与应用
AI与云原生技术正以前所未有的速度改变着我们的世界,而云原生技术则如同一座坚实的桥梁,连接着传统IT与现代化的数字世界。当AI与云原生相遇,它们相互赋能,相互促进,为开发者们打开了一个全新的技术宇宙。 3 月 15 日&…...


