SpringBoot结合Socket传输数据并且在前端显示

消息中间件之二:kafka详解 概述 Kafka是一种分布式的,基于发布/订阅的消息系统。 整理中…… 阅读详情

在前端想使用socket可以使用websocket,在这里提供另外一种方式来解决socket接收的数据在web前端显示的问题。

首先socket还是采用最常见的java语言中的socket类,这里需要将socket client置为Spring容器管理的类,这里将socket client置为service,并且为其配置一个list缓存接收到的数据,然后在controller中提供一个数据访问接口供ajax访问,并且添加一个runner,在Springboot启动的时候启动这个runner。

Talk is cheap,show me the code.

runner表示:

@Component
@Order(value = 1)
public class SocketRunner implements ApplicationRunner {//或者也可以实现这个接口CommandLineRunner
    @Autowired
    SocketClientImpl client;
    @Override
    public void run(ApplicationArguments args) throws Exception {
        client.doWork();
    }
}

client表示:

@Service
public class SocketClientImpl implements SocketClient {
    @Autowired
    private Position position;

    @Override
    public void doWork() {
        Socket client = null;
        InputStream inputStream = null;
        OutputStream outputStream = null;
        ObjectOutputStream writer = null;
        ObjectInputStream reader = null;
        try {
            client = new Socket();
            InetAddress inetAddress = InetAddress.getLocalHost();
            InetSocketAddress inetSocketAddress = new InetSocketAddress(inetAddress, 6666);
            client.connect(inetSocketAddress);
            inputStream = client.getInputStream();
            outputStream = client.getOutputStream();
            writer = new ObjectOutputStream(outputStream);
            if (client.isConnected()) {
                writer.writeInt(999);
                writer.flush();
            }
            reader = new ObjectInputStream(inputStream);
            int length = 1;
            while (length != -1) {
                length = reader.readInt();
                byte[] bytes = new byte[length];
                reader.read(bytes);
                System.out.println(new String(bytes));
                position.getList().add(new String(bytes));
                writer.writeInt(999);
                writer.flush();
                System.out.println(position.list.size() + ":" + position.list.hashCode());
                TimeUnit.SECONDS.sleep(3);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            try {
                if (client != null) {
                    client.close();
                }
                if(inputStream!=null){
                    inputStream.close();
                }
                if(outputStream!=null){
                    outputStream.close();
                }
                if(writer!=null){
                    writer.close();
                }
                if(reader!=null){
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    @Override
    public Position getResult() {
        return position;
    }
    }

controller层表示:

@GetMapping("socket")
@ResponseBody
public String socket(){
    String message=socketClientImpl.getResult().getList().get(0);
    socketClientImpl.getResult().getList().remove(0);
    return message;
}

前端Ajax表示:

function loadXMLHttp(){
    var xmlHttp;
    if (window.XMLHttpRequest){
        xmlHttp=new XMLHttpRequest();
    }else{
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlHttp.open("GET","/socket","true");
    xmlHttp.send();
    xmlHttp.onreadystatechange=function () {
        if (xmlHttp.readyState==4 && xmlHttp.status==200){
            doYourWork();
        }
    }
}
window.setInterval(loadXMLHttp,4000);
SpringBoot+SOCKET服务端客户端 通过以下两个类实现了springboot启动类,启动socket服务端 SOCKET客户端连接测试 模拟测试客户端连接-主测试类 可以使用线程池或者多个线程类start都可以就是我注释的地方 模拟监测服务心跳线程类 补充一下目录结构分布 是先启动springboot在启动客户端连接服务 服务端打印客户端发来的业务数据消息 客户端发送消息,并且接收服务端反馈的消息打印结果 我们开了两个客户端socket一个是心跳socket一个是业务socket 我们在客户端socket敲入任意信息可以在服务端输出打 阅读详情

相关推荐

Springboot整合socket服务端

使用springboot框架实现socket通信的服务端,接收客户端发来的消息。 随项目启动而启动。 package com.socket; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels

普通还不自信的程序员 1万+

Java socket server接收并返回数据(多线程socket)

服务之间的通信,有基于应用层的http,也有基于底层的tcp协议。通信会涉及到数据的发送、接收以及拆组包,信息控制等网络流程。网络分层分为两种:五层、七层。java socket 套接字编程指的是编写跨多台计算机执行的程序。在这些计算机之间都是通过网络进行连接。)用户数据报协议和)传输控制协议。因此socket是属于传输层。UDP和TCP的主要区别:UDP是无连接传输模式,这意味着客户端与服务端没有会话。TCP是面向连接传输模式,意味着必须首先要在客户端与服务端建立一个连接(排他性连接),以便于通信。

qq_43842093的博客 3468

Springboot 整合 Socket 实战案例 ,实现 单点发送、广播群发,1对1,1对多

7步学会 springboot整合 socket

默默不代表沉默 8220

Springboot基于Socket的文件传输 JAVA客户端、服务端

Springboot基于Socket的文件传输 JAVA客户端、服务端

qq_39693854的博客 1496

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1196

SFF-8654接口引脚定义全解析:从SAS到U.2的高速硬件连接核心

在高速数据存储与传输领域,接口标准是连接主机与存储设备、确保信号完整性与协议互通性的物理基础。其核心原理在于通过精确定义的物理引脚和电气特性,承载不同的高速串行通信协议,如SAS和PCIe。这类高密度连接器的技术价值在于以紧凑的形态支持多协议兼容与高速率传输,满足了企业级存储、高性能计算对带宽和可靠性的苛刻要求。典型的应用场景包括服务器硬盘背板连接、NVMe U.2固态硬盘直连以及外部存储扩展。本文聚焦于SFF-8654(亦称Mini SAS HD)这一关键接口,深入剖析其引脚定义、信号分区(如高速数据通道

weixin_29188043的博客 710

Qt多线程服务器-回声(将客户端发来的数据返回给客户端)

关键点是要重写QTcpServer中的一个虚函数void incomingConnection(qintptr socketDescriptor)当有新连接时会自动调用此函数。参数qintptr socketDescriptor为原始套接字,相当于连接后与客户端通讯的套接字。 下面以客户端带ui,服务器端未设计ui但有ui文件widget来简要说明。 服务器端相应文件 myserver.h及myserver.cpp文件 #ifndef MYSERVER_H #define MYSERVER_H #incl

A315776的博客 1025

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

Redis除了做缓存--Redis做消息队列/Redis做分布式锁/Redis做接口限流

1、用Redis实现消息队列 用命令lpush入队,rpop出队 Long size = jedis.lpush("QueueName", message);//返回存放的数据条数 String message = jedis.rpop("QueueName");//从队列中取数据 用rpop会存在一个问题,及需要不停调用rpop方法查看List中是否有未处理的消息,每次调用都会发起一...

weixin_30301449的博客 442

Spring AI提示词模板应用

本文介绍了使用SpringAI提示词模板的配置方法,主要步骤包括:1)在JDK17和SpringBoot3.4.4环境下引入spring-ai-alibaba1.0.0.2依赖;2)配置application.yml文件;3)创建测试控制器类处理提示词模板(.st文件);4)通过模板变量动态生成AI回复内容。演示了如何通过@RequestParam设置默认参数,实现无需前端传参即可测试AI回复功能,最终完成了一个SpringAI提示词模板的应用Demo。

wjianwei666的专栏 198

基于龙虾Claw的会议纪要自动提取与重点内容总结办公场景实践

本文介绍如何使用龙虾Claw构建会议纪要自动提取与重点内容总结系统,实现会议内容的智能处理。

一键难忘的博客 253

springboot socket长连接 发送 接收_手把手教你写 Socket 长连接

点击上方“刘望舒”,选择“星标”8点43分打卡 就是真爱本文转载自公众号 玉刚说,由玉刚说写作平台[1]提供写作赞助原作者:水晶虾饺[2]版权声明:本文版权归微信公众号玉刚说所有,未经许可,不得以任何形式转载本篇我们先简单了解一下 TCP/IP,然后通过实现一个 echo 服务器来学习 Java 的 Socket API。最后我们聊聊偏高级一点点的 socket 长连接和协议设计。T...

weixin_39572152的博客 3842

YOLO蒸馏原理篇之---MGD、CWD蒸馏

本文详细介绍了特征蒸馏中的两种经典有效方法,MGD和CWD蒸馏

qq_41920323的博客 3241

CC2538 uDMA控制器深度解析:从基础DMA到Scatter-Gather高级应用

直接内存访问(DMA)是嵌入式系统中提升数据传输效率、解放CPU计算资源的核心技术。其原理在于允许外设与内存之间直接进行数据交换,无需CPU介入每个字节的搬运,从而大幅降低系统延迟并提高吞吐量。这项技术的核心价值在于优化实时数据流处理,尤其在无线传感网络、高速通信和实时数据采集等场景中至关重要。深入掌握DMA的高级模式,如Scatter-Gather(分散-聚集),能进一步应对复杂数据缓冲区管理需求。本文聚焦于德州仪器CC2538 SoC内置的uDMA控制器,详细剖析其六种传输模式的工作原理与配置流程,并重

weixin_30345577的博客 340

机器人的“大脑”进化论:从专用控制器到高性能SoC的异构计算时代

摘要:随着AI与机器人技术融合,高性能芯片成为机器人智能化的关键。本文分析了机器人对芯片的核心需求,包括多模态数据处理、实时控制和智能决策能力。系统级芯片(SoC)因集成CPU、GPU/NPU等模块而成为主流选择。市场呈现分层格局:中低端设备(如扫地机器人)采用"MCU+轻量SoC"方案,满足基础功能;高端机器人则依赖"高性能SoC+独立GPU"处理复杂任务。除主控芯片外,完整的机器人系统还需传感器接口、驱动、通信等配套芯片。未来,芯片技术的进步将持续推动机器人智能化

致力于lidar应用开发 82

在 SAP 中实现“租赁资产”管理,核心是把 IFRS16/ASC842 等新租赁准则的要求落地到系统

摘要:本文详细介绍了在SAP S/4HANA系统中实现IFRS16/ASC842租赁准则的具体操作流程。主要内容包括:1) 系统前置配置,如激活租赁会计组件、定义租赁类型和会计科目;2) 租赁合同创建与主数据维护;3) 初始确认的会计处理;4) 日常折旧计提和租金支付流程;5) 合同变更与终止管理。通过RE-FX-LM模块与固定资产模块的集成,系统可自动生成使用权资产和租赁负债,支持从合同创建到报表披露的全生命周期管理,确保符合新租赁准则要求。

金牌架构师 985

Java Socket实战之七 使用Socket通信传输文件

本文地址:http://blog.youkuaiyun.com/kongxx/article/details/7319410 Java Socket实战之一 单线程通信 Java Socket实战之二 多线程通信 Java Socket实战之三 传输对象 Java Socket实战之四 传输压缩对象 Java Socket实战之五 使用加密协议传输对象 Java Socket实战之六 使用NI

cofice的专栏 474

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

个人笔记篇-SpringBoot集成Socket

SpringBoot简单集成WebSocket初步了解后,本次再进行一个深入通俗的理解。Socket作为一种通信机制,通常也被称为"套接字"。它类似于人们之间的"打电话行为"。

qq_33351639的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Springboot集成socket通信并采用线程池处理多客户端请求

而socket.shutdownInput()表示告知客户端这边已经写完了,那么客户端收到消息后,就能知道已经读取完消息,如果客户端有要返回给客户的消息那么就可以通过服务端的输出流发送给客户端,如果没有,直接关闭Socket。因为有多客户端请求,因此本文用到。但某些场景下,需要服务器主动向客户端推送数据,保持客户端与服务器数据的实时与同步,这就用到socket接口来通信。HTTP连接是常用的C-S通信方式,按照“请求—响应”的方式,即客户端先向服务器发出请求,服务器端再回复数据。因此,这里建议了解一下。..

Java后端技术栈 4022

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SpringBoot整合SOCKET 启动成功后Controller失效不能访问的问题。

SpringBoot整合SOCKET 启动成功后Controller失效不能访问的问题

somdip的博客 1940

利用网络编程Socket类实现在控制台聊天

服务端代码 ServerSocket:此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。 package org.lanqiao; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net....

weixin_43926171的博客 363

springboot +netty-socket使用详细说明

springboot 实现socket通信

陌上花开然不归矣 4776

实现一个简单实时展示数据的spring boot项目

1.通过SSE技术,创建一个连接,后端通过连接通道,定时向前端发送实时数据。劣势是SSE不会一直保持连接,会有断开的情况,因此控制台会一直输出错误信息;优势是会写的简单,不会写的难,并且会少许多前后端对接问题。一:做一个定时器,每隔一段时间间隔向别的服务或API发送请求,将获取的数据存到数据库或是成员变量中,并向消息队列发送获取的数据;三:服务启动后,定时将阻塞队列中的数据发送给前端。二:消息队列监听有新消息传过来时,将消息中的数据放到阻塞队列中;另外,本人采取的JS脚本的方式。

user_xlg的博客 775

springboot2.x 建立websocket服务端和客户端(前后端)使用,支持socket集群

springboot 对于websocket 的使用与处理

Qensq的博客 4478

springboot集成socket通信并采用线程池处理多客户端请求

首先推荐一篇不错的文章https://www.cnblogs.com/yiwangzhibujian/p/7107785.html 这篇文章已经非常清晰的讲述了socket通信的基础和应用,本文在此基础上展示socket通信应用于springboot。 本文默认读者已经对socket通信有所了解,建立在此基础上,开启springboot集成socket之...

wangyan_z的博客 1万+

springboot集成socket服务

*** Date: 2023 /7/25 上午11:06*/@Slf4j//SnowFlakeUtil 雪花ID生成工具类,后面会统一给出//这里的StringUtil是自己写的工具类,后面会统一给出= null) {log.info("监听到客户端消息:{},监听日志ID为:{}" , requestInfo, logId);log.error("与客户端:[{}:{}]通信异常!

qq_36189997的博客 7936
上一篇: Linux进程调度--O(1)调度算法和CFS调度算法
下一篇: 为什么TCP三次握手要有最后一个ACK
DanLongChen
博客等级 码龄9年 13粉丝 54原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值