java 创建TCP连接并同时接受服务端响应的信息

        java 创建TCP连接发送16进制数据并同时接受服务端响应16进制数据,并解析成可供人们可读的10进制数据返回

简介:


        这是我做一个物联网项目,项目需要我对机器发送一些16进制的字符串指令,然后呢对端机器就会给我返回个一组16进制数据,此时我需要解析成可供人们可读的10进制数据返回给前端,机器的连接方式是TCP不是常规HTTP。

源代码:


建立TCP连接,建立输入以及输出流

  public static void main(String[] args) throws Exception {// 实例化Socket对象,连接端口502服务器建立通信通道Socket socket = new Socket("192.168.87.141", 502);//要传给对端的数据String reqString = "00 00 00 00 00 02 01 03 00 11 00 01";//建立输出流,准备输出数据OutputStream outputStream = socket.getOutputStream();//因为我的数据是16进制需要给他转成对象的字节数组才能传送byte[] bytes = hexStringToByteArray(reqString);//建立输入流,准备接受数据InputStream inputStream = socket.getInputStream();//发送信息outputStream.write(bytes);//将对端返回的数据进行解析Integer count = streamTransStr(inputStream);}

 16进制字符串转换为字节数组

    /*** 16进制字符串转换为字节数组** @param hexString: 16进制化后的字符串* @return byte[]* @author A乐神* date  2023/12/15**/public static byte[] hexStringToByteArray(String hexString) throws InterruptedException {hexString = hexString.replaceAll(" ", "");int len = hexString.length();byte[] bytes = new byte[len / 2];for (int i = 0; i < len; i += 2) {// 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i + 1), 16));}//上述循环有个很大问题,是java本身问题,不睡眠等一下的话,可能代码16进制字符串转字节数组转换还没完成,就已经开始执行下一行了//这个时间可以自行缩短Thread.sleep(1000);return bytes;}

对端返回的tcp信息解析,我的是16进制返回值解析成10进制,读者可以根据自己业务进行更改。

   public static Integer streamTransStr(InputStream inputStream) throws IOException {StringBuilder stringBuilder = new StringBuilder();byte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer)) != -1) {for (int i = 0; i < length; i++) {//对端返回的是16进制数,但是字节需要先用10进制存,下面意思是读取1个字节并用10进制可读取的int表示int tenSys = buffer[i] & 0xFF;// toHexString作用是10进制转16进制数据//需要将16进制数还原处理来,将值转成16进制字符串,一字节等于两位的16进制数stringBuilder.append(Integer.toHexString(tenSys));}}//16进制转成10进制//我的解析值不具备0x,parseInt默认是把10进制字符串转成integer,如果不是10进制需要指明return Integer.parseInt(stringBuilder.toString(), 16);}

------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!小弟在这拜谢了!
如果您觉得我的文章在某些地方写的不尽人意或者写的不对,从而让你对你人生观产生颠覆(概不负责),需要斧正,麻烦在评论区不吝赐教,作者看到后会根据您的提示查阅文章进行修改,还这世间一个公理一片蓝天 

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

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

相关文章

编译 pywinhook v1.6.2 的环境设置和步骤

准备做一个鼠标事件响应程序。 查了一下相关python的第三方类库&#xff0c;发现有 pyhook。 一、起源 pyhook 1、pyhook是最早的版本 pyhook支持的python版本比较低&#xff0c;代码在 https://sourceforge.net/projects/pyhook/ 2、之后产生了两个并行版本 pyHook3 和 p…

来聊聊Spring的循环依赖

文章目录 首先了解一下什么是循环依赖简述解决循环依赖全过程通过debug了解Spring解决循环依赖全过程Aservice的创建递归来到Bservice的创建然后BService递归回到了getAservice的doGetBean中故事再次回到Aservice填充BService的步骤 总结成流程图为什么二级就能解决循环依赖问题…

【Qt开发流程】之UDP

概述 UDP (User Datagram Protocol)是一种简单的传输层协议。与TCP不同&#xff0c;UDP不提供可靠的数据传输和错误检测机制。UDP主要用于那些对实时性要求较高、对数据传输可靠性要求较低的应用&#xff0c;如音频、视频、实时游戏等。 UDP使用无连接的数据报传输模式。在传…

如何实现订单自动取消

由于Redis具有过期监听的功能&#xff0c;于是就有人拿它来实现订单超时自动关闭的功能&#xff0c;但是这个方案并不完美。今天来聊聊11种实现订单超时自动关闭的方案&#xff0c;总有一种适合你&#xff01;这些方案并没有绝对的好坏之分&#xff0c;只是适用场景的不大相同。…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索&#xff08;二&#xff09;&#xff1a;贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特&#xff08;Bellman-Ford&#xff09;算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下&#xff0c;寻找从…

Vue3使用了Vite和UnoCSS导致前端项目启动报错:Error:EMFILE:too many open files

一个 Vue3 的项目&#xff0c;用的是 Vite 打包&#xff0c;通过 npm run dev 运行时&#xff0c;遇到了以下错误&#xff08;尤其是引入了 Element-Plus 后&#xff09;&#xff1a; Error: EMFILE: too many open files&#xff0c;后面是具体的文件路径。。甚至到了 node_mo…

5G工业物联网网关,比4G工业网关强在哪里?

​随着5G技术的广泛应用&#xff0c;越来越多的行业开始探索如何利用5G网络提升效率和创新能力。其中&#xff0c;工业物联网领域是受益最大的领域之一。作为连接物联网设备和网络的关键组件&#xff0c;5G工业物联网网关在这个变革中发挥着至关重要的作用。本文将深入探讨5G工…

惰性加载函数(js的问题)

在web开发中&#xff0c;因为浏览器之间的实现差异&#xff0c;一些嗅探工作总是不可避免。 var addEvent function( elem, type, handler ){if ( window.addEventListener ){return elem.addEventListener( type, handler, false );}if ( window.attachEvent ){return elem.…

指针进阶篇

指针的基本概念&#xff1a; 指针是一个变量&#xff0c;对应内存中唯一的一个地址指针在32位平台下的大小是4字节&#xff0c;在64位平台下是8字节指针是有类型的&#xff0c;指针类型决定该指针的步长&#xff0c;即走一步是多长指针运算&#xff1a;指针-指针表示的是两个指…

Pandas实践_变形

文章目录 一、长宽表的变形1.pivot2.pivot_table3.melt4.wide_to_long 二、索引的变形1.stack与unstack2.聚合与变形的关系 三、其他变形函数1.crosstab2.explode3.get_dummies 一、长宽表的变形 什么是长表&#xff1f;什么是宽表&#xff1f;这个概念是对于某一个特征而言的…

赛氪为第五届全球校园人工智能算法精英大赛决赛选手保驾护航

12月10日&#xff0c;以“智青春算未来”为主题的2023年第五届全球校园人工智能算法精英大赛全国总决赛在河海大学江宁校区举行。本次大赛由江苏省人工智能学会主办&#xff0c;自9月份启动以来&#xff0c;共吸引了全国近400所高校的3000多支参赛团队参加。经过校赛、省赛选拔…

nlp与cv的发展

Transformer的出现,促进了更高容量模型的建立,为大模型的出现奠定基础. &#x1f9d0;大模型通常具有十亿个以上参数(仅供参考) &#x1f62e;左边的蓝色是CV领域、右下绿色是NLP、右上蓝色是多模态&#x1f603;基础模型(Foundational Models)首次由Bommasani等人在《Stanford…

Spring boot 配置参数

# ---------------------------------------- 2 # CORE PROPERTIES 3 # ---------------------------------------- 4 5 # SPRING 相关配置 (ConfigFileApplicationListener) 6 spring.config.name # config file name (default to application) 7 spring.config.location # lo…

服务总线SpringCloudBus

1 简介 为了使用户微服务能够及时感知到Git仓库中配置文件的修改&#xff0c;可以使用SpringCloud Bus来实现配置的自动更新。 SpringCloud Bus底层是基于RabbitMQ实现的&#xff0c;默认使用本地的消息队列服务。它是用轻量级的消息代理将分布式的系统连接起来&#xff0c;用…

和为K的子数组(LeetCode 560)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;枚举方法二&#xff1a;前缀和 哈希表优化 参考文献 1.问题描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列…

HTTP代理服务器脚本录制

1、报错1 target controller is configured to “use recording Controller“ but no such controller exists,ensure_target controller is configured to "use recording -CSDN博客

等等Domino 14.0FP1

大家好&#xff0c;才是真的好。 节奏确实太快了&#xff0c;有时候我深感我也追不上。 以前Notes Domino是三年磨一剑&#xff0c;也就说每三年才发一个大版本&#xff0c;从2019年开始&#xff0c;进行了高频提速&#xff0c;居然一年一个大版本&#xff01; 周末&#xf…

NAT——网络地址转换

目录 一、概念 二、NAT的分类 1.静态NAT 1.1 静态NAT的配置 1.2 利用eNSP小实验加强对静态NAT的理解 2、动态NAT 三、NAPT——端口映射 四、Easy IP 使用一个公网地址可以让所有人都上公网 一、概念 随着Internet的发展和网络应用的增多&#xff0c;IPv4地址枯竭已经成为…

jmeter 如何循环使用接口返回的多值?

有同学在用jmeter做接口测试的时候&#xff0c;经常会遇到这样一种情况&#xff1a; 就是一个接口请求返回了多个值&#xff0c;然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢&#xff1f; 有一定基础的人&#xff0c;可能第一反应就是先提取前一个接口返回…

在Node.js中MongoDB排序的方法

本文主要介绍在Node.js中MongoDB排序的方法。 目录 Node.js中MongoDB排序使用原生的mongodb驱动程序进行排序使用Mongoose库中的排序 Node.js中MongoDB排序 在Node.js中使用MongoDB进行排序&#xff0c;可以使用原生的mongodb驱动程序或者Mongoose库。 使用原生的mongodb驱动…