当前位置: 首页 > news >正文

Spingboot请求tcp 方式


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;/*** 请求tcp接口** @author Mr丶s* @date 2024/7/10 下午3:03* @description*/
@Slf4j
@Service
public class TcpClientUtils {private SocketChannel socketChannel;/*** 创建通道** @param host* @param port* @return*/public String connect(String host, int port) {try {if (socketChannel == null || !socketChannel.isConnected() || !socketChannel.isOpen()) {socketChannel = SocketChannel.open();socketChannel.connect(new InetSocketAddress(host, port));return "Connection successful";} else {return "Already connected";}} catch (IOException e) {e.printStackTrace();return "Connection failed: " + e.getMessage();}}/*** 关闭通道*/public void closeConnection() {try {if (socketChannel != null && socketChannel.isOpen()) {socketChannel.close();}} catch (IOException e) {e.printStackTrace();}}/*** 发送消息** @param host* @param port* @param message* @return*/public String sendMessage(String host, int port, String message) {String response = "";try {if (socketChannel == null || !socketChannel.isConnected() || !socketChannel.isOpen()) {String connectionStatus = connect(host, port);if (!"Connection successful".equals(connectionStatus)) {return "Failed to connect: " + connectionStatus;}}// 发送数据ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());socketChannel.write(buffer);// 读取响应ByteBuffer responseBuffer = ByteBuffer.allocate(1024);socketChannel.read(responseBuffer);responseBuffer.flip();// 输出响应数据StringBuilder stringBuilder = new StringBuilder();while (responseBuffer.hasRemaining()) {stringBuilder.append((char) responseBuffer.get());}response = stringBuilder.toString();log.info("TCP 请求返回: " + response);} catch (IOException e) {e.printStackTrace();response = "Failed to send message: " + e.getMessage();}return response;}public static void main(String[] args) {try {// 创建SocketChannelSocketChannel socketChannel = SocketChannel.open();// 连接服务器socketChannel.connect(new InetSocketAddress("47.114.51.90", 18888));// 发送数据// String message = "P*Hello, Server!*B*K\n";String message = "P*1*55*21*240321002*1*0*8*0*0*0*1722496736654*1*240314002*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*B*K\n";ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());socketChannel.write(buffer);// 读取响应ByteBuffer responseBuffer = ByteBuffer.allocate(1024);socketChannel.read(responseBuffer);responseBuffer.flip();// 输出响应数据while (responseBuffer.hasRemaining()) {System.out.print((char) responseBuffer.get());}// 关闭连接socketChannel.close();} catch (IOException e) {e.printStackTrace();}}
}

相关文章:

Spingboot请求tcp 方式

import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel;/*** 请求tcp接口** author Mr丶s* date 2024/7/1…...

leetcode刷题日记-括号生成

题目描述 题目解析 回溯的题目,不过这个两个if我就感觉有点难以理解了,不过仔细的思考了一下,确实考虑到了每个位置的情况,特别是针对右边括号 题目代码 class Solution:def generateParenthesis(self, n: int) -> List[str…...

小程序按钮分享

使用button设置&#xff1a; open-type"share"&#xff1a;来微信分享&#xff1b; html&#xff1a; <button open-type"share"></button>...

多模态多智能体,在实现系统2(深思熟虑)方面的探索

多模态和多智能体&#xff0c;在系统2&#xff08;深思熟虑&#xff09;方面的探索 提出背景理性的定义为什么理性定义是四大基本原则&#xff0c;而不是其他数量&#xff0c;又为何是这四个&#xff0c;而不是其他&#xff1f;理性 不等于 推理 通过多模态多智能体系统增强理性…...

【CAN通讯系列8】如何准确接收数据?

在 【CAN通讯系列7】波特率是什么&#xff1f;已经介绍了CAN位时间和采样点等概念&#xff0c;每1位由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)四个段组成&#xff0c;这个也成为位时序&#xff0c;采样点位置处于PBS1和PBS2的交界处&#xff0c;如…...

RabbitMQ知识总结(基本概念)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 基本概念 Producer&#xff1a; 消息的生产者&#xff0c;是一个向…...

Prel语言入门学习:一篇全面的指南

引言 在编程语言的海洋中&#xff0c;Prel是一个较少人知的新星。作为一种专为数据处理和分析设计的语言&#xff0c;Prel结合了现代编程语言的简洁性与功能性&#xff0c;提供了一种独特的解决方案&#xff0c;尤其适用于数据科学家和分析师。本文将详细介绍Prel语言的基础&am…...

在云服务器上自动化部署项目,jenkins和gitee

▮全文概述 在编写项目时&#xff0c;很头大的事情就是需要自己手动的上传jar包到服务器上启动。如果出现一点bug&#xff0c;就要重头上传和启动。这是一件很烦的事情&#xff0c;所以&#xff0c;可以使用jenkins和gitee实现项目的自动部署 ▮全流程 在本地提交代码到gitee …...

python 参数输入

在 Python 中&#xff0c;参数输入通常有多种方式&#xff0c;这取决于你要从何处获取参数。以下是几种常见的方法&#xff1a; 1. 命令行参数 使用 sys.argv 获取命令行参数&#xff0c;或者使用 argparse 模块进行更复杂的参数解析。 示例 1: 使用 sys.argv import sys# …...

Spring面试篇章——Spring基本概述

Spring 的基本概述 Spring学习的核心内容—一图胜千言 IOC&#xff1a;控制反转&#xff0c;可以管理 Java 对象AOP&#xff1a;切面编程JDBCTemplate&#xff1a;是Spring提供一套访问数据库的技术&#xff0c;应用性强&#xff0c;相对好理解声明式事务&#xff1a;基于IOC …...

股票预测模型中注意力多层Attention RNN LSTM 的应用

全文链接&#xff1a;https://tecdat.cn/?p37152 原文出处&#xff1a;拓端数据部落公众号 Attention 机制是一种在神经网络处理序列数据时极为关键的技术&#xff0c;它赋予了模型“聚焦”能力&#xff0c;能够自动评估输入序列中各部分的重要性。通过为序列中的每个元素分…...

C语言 | Leetcode C语言题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; int nthSuperUglyNumber(int n, int* primes, int primesSize) {long dp[n 1];int pointers[primesSize];for (int i 0; i < primesSize; i) {pointers[i] 0;}long nums[primesSize];for (int i 0; i < primesSize; i) {nums[i] …...

PHP健身微信小程序系统源码

&#x1f3cb;️‍♀️健身新潮流&#xff01;解锁“健身微信小程序”的全方位塑形秘籍 &#x1f4f1;开篇&#xff1a;掌中健身房&#xff0c;随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗&#xff1f;是时候告别这些束缚&#xff0c;拥抱“健身微信小程序”…...

树组件 el-tree 数据回显

树组件 el-tree 数据回显 树型结构的数据回显问题&#xff1a; 这里我只放了核心代码&#xff0c;主要是如何获取选中的树节点的id集合和如何根据树节点的id集合回显数据 大家根据需要自行更改&#xff01; <el-tree ref"authorityRef" node-key"id" …...

54、PHP 实现希尔排序

题目&#xff1a; PHP 实现希尔排序 描述&#xff1a; 思路分析&#xff1a;希尔排序是基于插入排序的&#xff0c;区别在于插入排序是相邻的一个个比较&#xff08;类似于希尔中h1的情形&#xff09;&#xff0c;而希尔排序是距离h的比较和替换。 希尔排序中一个常数因子n&a…...

linux 虚拟机解压arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2并arm-linux-gcc

解压到当前目录&#xff1a;tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2解压到指定目录&#xff1a;tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2 -C /xx/xxx/xxx-C大写&#xff0c;后面接要解压的路径解压后得到一个 opt文件夹 在/usr/local/bin 下创建新的…...

泛化的最近点迭代法(Generalized-ICP)

Generalized-ICP算法是由斯坦福大学的Aleksandr V. Segal、Dirk Haehnel和Sebastian Thrun提出的&#xff0c;于2009年在Robotics science and system会议上发表。 GICP是一种ICP算法的变体&#xff0c;其原理与ICP算法相同&#xff0c;之所以称为泛化的ICP算法是因为大多数ICP…...

Java | Leetcode Java题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp new int[n 1];int m primes.length;int[] pointers new int[m];int[] nums new int[m];Arrays.fill(nums, 1);for (int i 1; i < n; i) {int minN…...

单细胞数据整合-去除批次效应harmony和CCA (学习)

目录 单细胞批次效应学习 定义 理解 常用的去批次方法-基于Seurat 1&#xff09; Seurat-integration&#xff08;CCA&#xff09; 2&#xff09; Seurat-harmony 去批次代码 ①Seurat-integration&#xff08;CCA&#xff09; ②Seurat-harmony 单细胞批次效应学习 …...

MuRF代码阅读

对图像Size的处理, 以适应Transformer 在MVSPlat 当中使用 Center_Crop 裁剪图像&#xff0c;适用于 Transformer 的32 倍数&#xff0c; 其中 焦距 f 不变化&#xff0c;只改变 cx,cy.MuRF 直接对图像进行 插值&#xff0c;合成理想的 size. 根据 ori_size 和 inference_size…...

Qwen3-32B-Chat API优化:降低OpenClaw任务Token消耗的5个技巧

Qwen3-32B-Chat API优化&#xff1a;降低OpenClaw任务Token消耗的5个技巧 1. 为什么需要关注Token消耗&#xff1f; 当我第一次在本地部署OpenClaw对接Qwen3-32B-Chat模型时&#xff0c;最让我震惊的不是它的推理能力&#xff0c;而是执行简单自动化任务后Token消耗的速度。一…...

深度学习 三次浪潮、三大驱动力与神经科学的恩怨(二)

1. 一个领域&#xff0c;多个名字 很多人以为"深度学习"是一个全新的领域。事实上&#xff0c;它的历史可以追溯到 20 世纪 40 年代——只不过在不同时期&#xff0c;它被叫过完全不同的名字&#xff1a; 1940s-1960s&#xff1a;被称为控制论&#xff08;Cybernetic…...

Excel双坐标折线图保姆级教程:用散点图搞定多组数据对比(附详细步骤图)

Excel双坐标折线图进阶指南&#xff1a;用散点图实现精准数据可视化 在数据分析的日常工作中&#xff0c;我们经常遇到需要同时展示两组量纲差异巨大的数据——比如销售额&#xff08;百万级&#xff09;和增长率&#xff08;百分比&#xff09;。传统的双坐标折线图虽然能解决…...

AI首推路径控制引擎

AI首推路径控制引擎版本&#xff1a;v2.0.0 发布日期&#xff1a;2026年3月26日 发布状态&#xff1a;正式全量发布---一、背景与概述在AI生成式应用中&#xff0c;模型输出的随机性与不可控性一直是业务落地的核心痛点。为解决“如何让AI严格遵循预设逻辑生成答案”的问题&…...

SEO_为什么你的网站需要SEO?关键原因解析

<h3 id"seoseo">SEO:为什么你的网站需要SEO&#xff1f;关键原因解析</h3> <p>在当今数字化时代&#xff0c;拥有一个网站是企业或个人展示品牌、产品和服务的重要途径。仅仅拥有一个网站并不足以吸引足够的访问量和客户。这时&#xff0c;SEO&…...

65R125-ASEMI超结MOS管TO-220封装

编辑&#xff1a;LL65R125-ASEMI超结MOS管TO-220封装型号&#xff1a;65R125品牌&#xff1a;ASEMI沟道&#xff1a;NPN封装&#xff1a;TO-220漏源电流&#xff1a;31A漏源电压&#xff1a;650VRDS(on):125mΩ批号&#xff1a;最新引脚数量&#xff1a;3封装尺寸&#xff1a;如…...

STM32博物馆环境监控系统设计与实现

基于STM32的博物馆展柜环境监控系统设计1. 项目概述1.1 系统背景文物保护工作中&#xff0c;展柜微环境稳定性直接影响文物保存状态。传统人工巡检方式存在响应滞后、数据不连续等问题。本项目设计了一套基于STM32的智能化环境监控系统&#xff0c;可实时监测温湿度、光照、烟雾…...

Python tkinter文件对话框实战:5分钟搞定文件选择与保存功能(附完整代码)

Python tkinter文件对话框实战&#xff1a;5分钟搞定文件选择与保存功能&#xff08;附完整代码&#xff09; 在开发桌面应用程序时&#xff0c;文件选择功能几乎是必不可少的。无论是需要用户上传文件、保存处理结果&#xff0c;还是选择工作目录&#xff0c;一个直观的文件对…...

为什么你的unipush消息收不到?详解个推通道状态检测与事件触发逻辑

为什么你的UniPush消息收不到&#xff1f;深度解析推送失效的7大关键因素 在移动应用开发中&#xff0c;消息推送是维系用户活跃度的核心功能之一。许多开发者在使用UniPush服务时&#xff0c;经常会遇到消息未能如期送达的困扰。本文将系统性地剖析消息推送失效的底层逻辑&…...

用了Qoder写代码飞快,联调时却总因字段不一致返工,问题出在哪?

发版前夜&#xff0c;前端字段对不上后端接口&#xff0c;联调卡了整晚。这种场景在 AI Coding 普及后并不罕见&#xff0c;不少团队用了 Qoder 觉得生成快、跑通快&#xff0c;可一旦要改需求&#xff0c;系统就僵住了。看似工具背锅&#xff0c;其实根子往往不在速度&#xf…...