最近有个项目,需要根据卡号生成韦根信号,然后发送给韦根转换器,再让韦根转换器把我发送的内容解析成韦根信号

用的韦根转换器是这家公司的: 韦根26转网络维根转TCP/网络转韦根26TCP转维根
根据人家的协议规定,生成的韦根信号代码如下:

 public String wgTransform(String wgNumber){StringBuilder sb = new StringBuilder();sb.append("02");// 传入的卡号,如果不足 10 位,则在前面以 0 补足if (wgNumber.length() < 10){wgNumber = StringUtils.leftPad(wgNumber, 10, '0');}for (int i = 0; i < wgNumber.length(); i++) {String res = "3" + wgNumber.charAt(i);sb.append(res);}String tailNumber = "0D0A1A03";Integer wg_type = 26;if (34 == wg_type){tailNumber = " 0D0A2203";}sb.append(tailNumber);log.info("wgnumber is : {}", sb.toString());return sb.toString();}

接下来就是将我生成的韦根信号发送给韦根转换器了
因为它是使用 udp 通信的,所以使用 DatagramSocket 即可
详细代码如下:

        // 将传入的卡号转换成韦根信号String result = wgTransform(wgNumber);DatagramSocket socket = null;try {socket = new DatagramSocket();socket.setSoTimeout(2000);String ip = "127.0.0.1";byte[] data = result.getBytes(Charset.forName("ISO-8859-1"));DatagramPacket packet = new DatagramPacket(data, data.length,InetAddress.getByName(ip),3663);socket.send(packet);} catch (Exception e) {e.printStackTrace();} finally {socket.close();}

接下来神奇的事情发生了
比如,我得到的 result 结果是 12345678 ,然后通过 socket.send(packet) 方法发送出去的数据就成了下面这样

在我的 12345678 前面每一个都加了个 3 , emmm
这根本就不是我想要的嘛
这里其实就是进制问题, udp 通信发送的是 16 进制报文,所以将 16 进制的字符串转成字符数组即可
具体代码如下:

    // 将 16 进制的字符串转成字符数组public static byte[] getHexBytes(String str){byte[] bytes = new byte[str.length() / 2];for(int i = 0; i < str.length() / 2; i++) {String subStr = str.substring(i * 2, i * 2 + 2);bytes[i] = (byte) Integer.parseInt(subStr, 16);}return bytes;}

生成完韦根信号之后,直接调用 getHexBytes 方法即可,详细如下:

        String result = wgTransform(wgNumber);DatagramSocket socket = null;try {socket = new DatagramSocket();socket.setSoTimeout(2000);byte[] data = getHexBytes(result);DatagramPacket packet = new DatagramPacket(data,data.length,InetAddress.getByName(relayIp),3663);socket.send(packet);} catch (Exception e) {e.printStackTrace();} finally {socket.close();}

以上


上面聊的是发送的内容
接收到的内容是 16 进制,同样也涉及到将 16 进制内容转换成数组
这个方法也贴一下:

 //将 16 进制的 byte 数组转换成字符串public static String getBufHexStr(byte[] raw){String HEXES = "0123456789ABCDEF";if ( raw == null ) {return null;}final StringBuilder hex = new StringBuilder( 2 * raw.length );for ( final byte b : raw ) {hex.append(HEXES.charAt((b & 0xF0) >> 4)).append(HEXES.charAt((b & 0x0F)));}return hex.toString();}

[计算机网络]java 实现 udp 通信发送 16 进制报文相关推荐

  1. java串口发送16进制数据_MFC串口通信发送16进制数据的方法

    本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下 MFC串口通信会使用m_mscomm控件. 发送数据一般是在edit control 里输入自己想发送的内容,然 ...

  2. http发送16进制报文_阿里云物联网平台使用心得(25)MQTT协议详解UNSUBSCRIBE报文...

    题目 大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖.超子今天给大家介绍一下UNSUBSCRIBE报文. UNSUBSCRIBE报文 从上图中可知,UNSUBSCRI ...

  3. http发送16进制报文_图解HTTP 第三章HTTP报文内的HTTP信息

    1.HTTP报文 1).报文首部 服务器或客户端需处理的请求或响应的内容及属性 2)空行 16进制  0x0a 16进制 0x0d CR(Carriage Return,回车)'\n' LF(Line ...

  4. http发送16进制报文_HTTP系列探索HTTP网络层的”前端性能优化“

    作者:前端学苑 公号 / 前端小贾 (本文来自作者投稿) 编者荐语 性能是前端编码规范.网络层面.辅助工具等相互作用的结果. 这是一个兼顾广度和深度的问题,优化好了可以加快首屏加载速度提高用户留存率, ...

  5. esp32的uart串口发送16进制通信指令调用实例

    esp32的uart串口发送16进制通信指令调用实例 简介 最近想用esp32通过uart发送的16进制指令来控制一个语言播放模块,记录一下调用uart的过程,请大佬斧正.比较愚笨,过程中踩了很多坑, ...

  6. python socket发送16进制数据_Python UDP Socket 16进制数据发送

    注:此篇文章首次发表于我的一篇CSDN博客里边,现转载于此. 今天琢磨了一下Python UDP Socket 16进制数据发送. 原以为UDP发送和接受的都是字符,怎么能够发送16进制?但细想,其实 ...

  7. matlab上位机串口通信中如何发送16进制数,而不是当做ASCII字符发送(已实测成功)

    转载 (找了很长时间,朋友帮忙找到了发送方法) https://zhidao.baidu.com/question/383761631.html 用matlab发送16进制数据,可以用fwrite直接 ...

  8. 使用串口调试助手发送16进制数

    发送16进制的1(即0x01),应该写01,不能去掉前面的0,更不能写成0x01

  9. 串口调试助手 发送16进制与现实16进制数据

    话不多说,直接干货. 使用串口助手发送16进制数据: 如图所示:第一步,选中16进制发送. 第二步:输入你要发送的数据(所有的16进制数据去掉0x符号) 第三步:点击16进制显示 第四步:查看返回值 ...

最新文章

  1. python中for循环和while循环的区别_python中while循环和for循环的定义和详细的使用方法...
  2. 一觉醒来,借呗竟然被封了
  3. 三种地理参考信息模型:WMS,WFS,WCS(转)
  4. Android的sdk、api及工程目录说明
  5. Python爬虫 --- 2.2 Scrapy 选择器的介绍
  6. MAC 电脑里面的“其他”文件是什么占用了
  7. 白盒测试哪种测试效果好_比较常用的白盒测试工具有哪些?
  8. 经典面试题-什么是java序列化,如何实现java序列化?
  9. 上周四的复盘 | 市场回暖了?割肉吗?
  10. JavaScript学习笔记(BOM编程案例)
  11. 网站建设:颜色与线条的选择
  12. 只要400行代码就能自已实现一个绘图机原型固件,esp8266 + micropython 用3d打印机改的绘图机
  13. can和could的用法_情态动词:can与could的用法详解
  14. 微信小程序实战_商城1
  15. 远程桌面连接和防火墙设置
  16. elementplus中表格组件使用固定列时出现滚动条粘性布局固定表头
  17. 图像特征(三)——纹理特征(GLCM、LBP)
  18. EcmaScript 6 新特性
  19. PCL 基于惯性矩与偏心率的描述子进行包围盒提取
  20. 绘制炫酷逼真的三维地形图

热门文章

  1. 导览Linux 文件系统类型
  2. IOS 键盘的显示与关闭
  3. c语言fscanf函数的用法,fscanf - C语言库函数
  4. Nvidia Jetson TX1 安装无线网卡附型号(20221125)Nvidia Jetson TX1 wireless module
  5. Win10修改软件安装默认路径
  6. 修改Android Studio默认配置路径
  7. Minecraft 1.16.5mod开发(1.Forge开发环境的配置)
  8. 一点一点学习C++之笔记002
  9. java 正则 g_Java中的正则表达式“ \ G”元字符
  10. 思维导图:C语言总结