TCP通信——端口转发(重点内容)
实现多人群聊
Client(客户端)建立通信
package com.zz.tcp.case1;import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String args[]) throws Exception {//1.创建Socket对象,并同时请求与服务端程序连接Socket socket = new Socket("127.0.0.1", 8888);//创建一个独立的线程,负责随机从socket中接收服务端的发送过来的消息new ClientReaderThread(socket).start();//2.从socket通信管道中的到一个字节输出流,用来发送数据OutputStream os = socket.getOutputStream();//将低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);Scanner sc = new Scanner(System.in);while(true){System.out.println("请说:");String msg = sc.nextLine();//一旦用户输入了exit就退出客户端程序if("exit".equals(msg)){System.out.println("欢迎您下次光临!");dos.close();socket.close();break;}//4.开始写数据出去dos.writeUTF(msg);//5.刷新数据,防止数据留在管道dos.flush();}}
}
ClientReaderThread(服务端线程类)——实现接收服务端转发的消息
package com.zz.tcp.case1;import java.io.*;
import java.net.Socket;public class ClientReaderThread extends Thread{private Socket socket;public ClientReaderThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);while (true) {try {String msg = dis.readUTF();System.out.println(msg);//把这个消息发送给全部客户端进行接收sendMsgToAll(msg);} catch (Exception e) {System.out.println("自己下线了" + socket.getRemoteSocketAddress());dis.close();socket.close();break;}}} catch (IOException e) {e.printStackTrace();}}private void sendMsgToAll(String msg) throws IOException {//发送给全部在线的socket的管道接收for (Socket onLineSocket: Server.onLineSockets) {OutputStream os = onLineSocket.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(msg);dos.flush();}}
}
Server(服务端)负责接收客户端的消息,通过8888端口建立连接
package com.zz.tcp.case1;import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;public class Server {public static List<Socket> onLineSockets = new ArrayList <>();public static void main(String args[]) throws Exception{System.out.println("========服务端启动========");//1.创建ServerSocket的对象,调用一个accept方法,等待客户端的连接请求ServerSocket serverSocket = new ServerSocket(8888);while (true){//2.使用ServerSocket对象,调用一个accept方法,等待客户端的连接请求Socket socket = serverSocket.accept();onLineSockets.add(socket);System.out.println("有人上线了" + socket.getRemoteSocketAddress());//3.把这个客户端对应的socket通信管道,交给一个独立的线程复制处理new ServerReaderThread(socket).start();}}
}
ServerReaderThread(客户端线程类)——负责接受客户端发的消息,然后转发给其他客户端
package com.zz.tcp.case1;import java.io.*;
import java.net.Socket;public class ServerReaderThread extends Thread{private Socket socket;public ServerReaderThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);while (true) {try {String msg = dis.readUTF();System.out.println(msg);//把这个消息发送给全部客户端进行接收sendMsgToAll(msg);} catch (Exception e) {System.out.println("有人下线了" + socket.getRemoteSocketAddress());Server.onLineSockets.remove(socket);dis.close();socket.close();break;}}} catch (IOException e) {e.printStackTrace();}}private void sendMsgToAll(String msg) throws IOException {//发送给全部在线的socket的管道接收for (Socket onLineSocket: Server.onLineSockets) {OutputStream os = onLineSocket.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(msg);dos.flush();}}
}
相关文章:
TCP通信——端口转发(重点内容)
实现多人群聊 Client(客户端)建立通信 package com.zz.tcp.case1;import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void mai…...
乐乐音乐鸿蒙版-支持krc歌词(动感歌词、翻译和音译歌词)
简介 乐乐音乐主要是基于HarmonyOS开发的音乐播放器,它支持lrc歌词和动感歌词(ksc歌词、krc歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 开发环境 ArkTS、Stage模型、SDK3.1、 API 9 注:没试过在真机条件下调试。 功…...
批量删除 rabbitmq中随机队列
批量删除 amq.gen–* 随机队列 操作错误产生了无效随机队列,需要批量删除 进入MQ集群中 docker psdocker exec -it c2d28e816894 /bin/bash过滤列出指定amq.gen–队列 # 列出 指定 vhost/qq 以amq.gen开头的所有队列 rabbitmqctl list_queues --vhost / | grep ^…...
docker 数据卷
Docker数据卷是Docker中的一个核心机制,用于实现容器间数据的持久化和共享。它是宿主机上的一个特殊目录,可以供一个或多个容器使用。容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。 …...
【开发工具】Ubuntu复制CSDN代码多余符号的去除
在Ubuntu中使用CSDN复制的代码时,可能会出现\u200的符号,这个符号会影响代码的编译和运行,因此需要找到一种快速删除这种符号的方法。 通过搜索找到了一种替换为空的删除方式,笔者编写了一个适用于Rust的shell脚本,需要…...
【微服务篇】深入理解微服务注册中心与配置中心
注册中心 设计一个注册中心时,需要关注多个关键方面,以确保其稳定性、可靠性、性能和可扩展性。以下是一些重要的考虑因素: 服务发现机制:注册中心的核心功能是允许服务相互发现。这意味着当一个服务实例启动时,它需…...
数据库安全(redis、couchdb、h2database)CVE复现
redis服务默认端口:6379;我们可以通过端口扫描来判断是否存在该服务。 Redis 是一套开源的使用ANSI C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。 Redis 如果在没有开启认证的情况下,…...
道可云元宇宙每日资讯|元宇宙标准化工作组成立大会召开
道可云元宇宙每日简报(2024年3月28日)讯,今日元宇宙新鲜事有: 元宇宙标准化工作组成立大会召开 3月21日,元宇宙标准化工作组成立大会暨第一次全体委员会议在浙江省丽水市青田县召开。元宇宙标准化工作组的建立&#…...
20240322-2-Catboost面试题
Catboost面试题 1. 简单介绍Catboost? CatBoost是一种以对称决策树 为基学习器的GBDT框架,主要为例合理地处理类别型特征,CatBoost是由Categorical和Boosting组成。CatBoost还解决了梯度偏差以及预测偏移的问题,从而减少过拟合的…...
【PSINS工具箱】EKF与UKF滤波
描述 对工具箱SINS/GPS,153例程的修改,将EKF和UKF放在一个文件里面,一次运行可以得到两个滤波的结果。 片段 运行截图 程序完整源代码 在有工具箱的情况下,直接运行此代码,即可得到结果 % 基于PSINS工具箱的IMU数据…...
UOS部署oceanbase
安装docker环境。 镜像可在本文档中下载4.2版本的oceanbase 加载镜像 docker load -i oceanbase_4212_x86_64_20231214.tar.gz注意事项 确保挂载点大于200GLOCAL_IP 部署服务器ipNIC_NAME 部署服务器对应的网络OBCLUSTER_IP_LIST 部署服务器ip 启动容器 sudo docker run …...
Hive查询转换与Hadoop生态系统引擎与优势
目录 摘要一、Hive是什么二、HDFS是什么三、Hive与HDFS的关系四、什么是HiveQL五、什么是mapreduce六、Hive如何将查询转为mapreduce任务七、Hadoop生态系统中的高性能引擎八、使用Hadoop的优点 摘要 Hadoop生态系统中包含了多个关键组件,如Hive、HDFS、MapReduce等…...
WPF上使用MaterialDesign框架---下载与配置
一、介绍: Material Design语言的一些重要功能包括 系统字体Roboto的升级版本 ,同时颜色更鲜艳,动画效果更突出。杜拉特还简要谈到了新框架的一些变化。谷歌的想法是让谷歌平台上的开发者掌握这个新框架,从而让所有应用就有统一的…...
鸿蒙ARKTS--简易的购物网站
目录 一、media 二、string.json文件 三、pages 3.1 登录页面:gouwuPage.ets 3.2 PageResource.ets 3.3 商品页面:shangpinPage.ets 3.4 我的页面:wodePage.ets 3.5 注册页面:zhucePage.ets 3. 购物网站主页面ÿ…...
LabVIEW转动设备故障诊断系统
LabVIEW转动设备故障诊断系统 随着工业自动化技术的不断进步,转动设备在电力、化工、船舶等多个行业中扮演着越来越重要的角色。然而,这些设备在长期运行过程中难免会出现故障,如果不能及时诊断和处理,将会导致生产效率下降&…...
uniapp h5 touch事件踩坑记录
场景:悬浮球功能 当我给悬浮球设置了 position: fixed; 然后监听悬浮球的touch事件,从事件对象中拿到clientY和clientX赋值给悬浮球的left和top属性。当直接赋值后效果应该是这样子: 注意鼠标相对悬浮球的位置,应该就是左上角&a…...
webpack.prod.js(webpack生产环境配置文件)
生产环境:只打包不运行本地服务器 对于在config目录下的webpack.prod.js 1.在根目录下运行 npx webpack --config ./config/webpack.prod.js 2.在package.json文件中配置 "build":"npx webpack --config ./config/webpack.prod.js" const …...
利用python做模拟数据(测试数据),连接数据库和服务器接口,涉及雪花id服务
import datetime import jsonimport pymysql import requests import snowflake.client from faker import Faker#cmd启动snowflake服务: #snowflake_start_server --addresslocalhost --port8910 --dc1 --worker1 def create_testers():# 创建一个中文Faker实例fak…...
大模型日报2024-03-30
大模型资讯 提升大型语言模型推理速度:高效部署技术 摘要: 随着GPT-4、LLaMA和PaLM等大型语言模型(LLMs)不断拓展自然语言处理的边界,研究人员正在探索加速这些模型推理过程的技术。这些技术旨在提高模型部署的效率,以…...
【ARM 嵌入式 C 入门及渐进 14 -- C 代码中取余与取模的使用介绍】
请阅读【嵌入式开发学习必备专栏 】 文章目录 背景示例 背景 有些文件每行是固定的字符个数,那么如果任意给个字符的序号,怎么通过C 代码获取该字符所在的行呢? 处理这个问题就要用到 C 语言中的取余和取模运算了。 示例 在 C 语言中&…...
C++入门知识详细讲解
C入门知识详细讲解 1. C简介1.1 什么是C1.2 C的发展史1.3. C的重要性1.3.1 语言的使用广泛度1.3.2 在工作领域 2. C基本语法知识2.1. C关键字(C98)2.2. 命名空间2.2 命名空间使用2.2 命名空间使用 2.3. C输入&输出2.4. 缺省参数2.4.1 缺省参数概念2.4.2 缺省参数分类 2.5. …...
pytorch中的torch.hub.load():以vggish为例
pytorch提供了torch.hub.load()函数加载模型,该方法可以从网上直接下载模型或是从本地加载模型。官方文档 torch.hub.load(repo_or_dir, model, *args, sourcegithub, trust_repoNone, force_reloadFalse, verboseTrue, skip_validationFalse, **kwargs)参数说明&a…...
mysql 用户管理-权限管理
学习了用户管理,再学习下权限管理。 3,权限管理 权限管理主要是对登录到MySQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中,不合理的权限规划会给MySQL服务器带来安全隐患。数据库管理员要对所有用户的权限进行合理规…...
RabbitMQ--04--发布订阅模式 (fanout)-案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 发布订阅模式 (fanout)---案例前言RabbitListener和RabbitHandler的使用 1.通过Spring官网快速创建一个RabbitMQ的生产者项目2.导入项目后在application.yml文件中配…...
基于java+SpringBoot+Vue的网上书城管理系统设计与实现
基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含: 网上书城管理系统是一个基于互联网的在线购书平台&#…...
PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)
PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十五六) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 写论文当然用RANSAC的优化变种算法MSAC啊,RANSAC太土太LOW了哈哈 MSAC算法(M-estimator Sample Consensus)是RANSAC(Random Sample Consensus)的一种…...
通过WSL在阿里云上部署Vue项目
参考: 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统,还有其他的进入方式。 选择ubuntu系统(和WSL使用相同的系统)。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…...
240330-大模型资源-使用教程-部署方式-部分笔记
A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门(一),利用Transformers,Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…...
uni-app 富文本编辑器
<template><view class"container"><view>标题:<u-input placeholder"请输入标题"></u-input></view><view class"page-body"><view classwrapper><view classtoolbar tap"…...
3D汽车模型线上三维互动展示提供视觉盛宴
VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代,它不仅颠覆了传统展览的局限,还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理,这一在线展…...
建设微信商城网站/国内新闻摘抄2022年
很多人都知道内存这个词,但是真正有了解内存的寥寥无几,下面我来给大家分析下Android内存: 由于Android应用的沙箱机制,每个应用所分配的内存大小是有限度的,内存太低就会触发LMK——Low Memory Killer 机制。那么到底…...
星裕建设网站/seo岗位有哪些
突然想写写自己的伞。 研究生三年使用的伞。 第一把伞,是大学时候就有的伞。时至今日,我还清晰的记得它的来路,那正是我暑假回学校下火车的那天,西安下着大雨,而我,忘了带伞,从出站口大妈手里&a…...
海尔网站建设目标/长沙seo网站排名
Mosquitto库依赖libuuid和openssl库,所以我们在交叉编译Mosquitto之前需要先交叉编译他所需要的依赖库,这里作者已经把需要的源码都下载好了,大家可以在这个文档的目录下找到。不建议大家下载和我不一致的版本,可能会出问题。 mq…...
做ppt哪个网站好/免费行情网站app大全
一、特殊选择器 1、* 用于匹配任何的标记 2、> 用于指定父子节点关系 3、E F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F 4、E ~ F 匹配所有E元素之后的同级元素F 5、名称[表达式] 5.1 E[att] 匹配所有具有att属性的E元素([att]获取所有的定义…...
生产软件/seo优化与品牌官网定制
摘要: 手把手教你用(Python)零起步数学神经网络入门!在这篇文章中,我们将在Python中从头开始了解用于构建具有各种层神经网络(完全连接,卷积等)的小型库中的机器学习和代码。最终,我们将能够写出如下内容:假…...
如何将图片插入网站/二手交易平台
Kubernetes(k8s)理论与实战双飞 ①理解控制器: ②网络详解: ③伸缩原理: ④认证与调度: ⑤服务原理: ⑥镜像自动拉取: ⑦节点就绪问题之一: ⑧节点就绪问题之二…...