SocketTool、串口调试助手、MQTT中间件基础

devtools/2025/2/28 22:46:25/

目录

一、SocketTool

二、串口通信

三、MQTT中间件

一、SocketTool

1、TCP 通信测试:

1)创建 TCP Server

2)创建 TCP Client

  1. 连接 Socket

4)数据收发

在TCP Server发送数据12345

在 TCP Client 端的 Socket 即可收到数据12345

2. UDP 通信测试:

1)分别创建 UDP Server 和 UDP Client

2)先由 UDP Client 发送数据

UDP Servers 收到数据才能看到对方端口

在 UDP Server 收到过 UDP Client 的数据后,其对方 IP 地址和 UDP 端口均可确定 下来,然后 UDP Server 也可以向 UDP Client 发送数据了

二、串口通信

先创建两个虚拟串口,这里用到了Configure Virtual Serial Port Driver

然后打开串口调试工具,调整串口设置后打开串口COM2

接着在代码里开启另一个串口CMO1

import com.fazecast.jSerialComm.SerialPort;
import java.util.Scanner;public class SerialCommunicationExample {public static void main(String[] args) {// 尝试打开 COM1 端口,你可以根据需要修改这个值SerialPort serialPort = SerialPort.getCommPort("COM1");if (serialPort.openPort()) {try {// 设置串口参数,这些值应与你的设备匹配serialPort.setComPortParameters(9600, 8, 1, SerialPort.NO_PARITY);serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 2000, 0);// 获取用户输入的消息Scanner scanner = new Scanner(System.in);System.out.print("Enter message to send: ");String messageToSend = scanner.nextLine();// 发送消息serialPort.writeBytes(messageToSend.getBytes(), messageToSend.length());// 等待接收到回复(注意:这里可能需要更复杂的逻辑来处理接收数据)byte[] buffer = new byte[1024];int numRead;StringBuilder receivedMessage = new StringBuilder();while ((numRead = serialPort.readBytes(buffer, buffer.length)) > 0) {receivedMessage.append(new String(buffer, 0, numRead));}System.out.println("Received message: " + receivedMessage);} catch (Exception ex) {System.out.println("Error: " + ex.getMessage());} finally {// 关闭串口if (serialPort.isOpen()) {serialPort.closePort();}}} else {System.out.println("Error: Could not open the serial port.");}}
}

在串口工具COM2发送数据,COM1能收到,COM1发送的在工具里也能接收到

三、MQTT中间件

先启动mqtt服务

然后订阅和推送

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;public class SubscribeSample {public static void main(String[] args) {String broker = "tcp://localhost:1883";String topic = "mqtt/test";String username = "emqx";String password = "public";String clientid = "subscribe_client";int qos = 0;try {MqttClient client = new MqttClient(broker, clientid, new MemoryPersistence());// 连接参数MqttConnectOptions options = new MqttConnectOptions();
//            options.setUserName(username);
//            options.setPassword(password.toCharArray());options.setConnectionTimeout(60);options.setKeepAliveInterval(60);// 设置回调client.setCallback(new MqttCallback() {public void connectionLost(Throwable cause) {System.out.println("connectionLost: " + cause.getMessage());}public void messageArrived(String topic, MqttMessage message) {System.out.println("topic: " + topic);System.out.println("Qos: " + message.getQos());System.out.println("message content: " + new String(message.getPayload()));}public void deliveryComplete(IMqttDeliveryToken token) {System.out.println("deliveryComplete---------" + token.isComplete());}});client.connect(options);client.subscribe(topic, qos);} catch (Exception e) {e.printStackTrace();}}
}import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;public class PublishSample {public static void main(String[] args) {String broker = "tcp://localhost:1883";String topic = "mqtt/test";String username = "emqx";String password = "public";String clientid = "publish_client";String content = "Hello MQTT";int qos = 0;try {MqttClient client = new MqttClient(broker, clientid, new MemoryPersistence());// 连接参数MqttConnectOptions options = new MqttConnectOptions();// 设置用户名和密码
//            options.setUserName(username);
//            options.setPassword(password.toCharArray());options.setConnectionTimeout(60);options.setKeepAliveInterval(60);// 连接client.connect(options);// 创建消息并设置 QoSMqttMessage message = new MqttMessage(content.getBytes());message.setQos(qos);// 发布消息client.publish(topic, message);System.out.println("Message published");System.out.println("topic: " + topic);System.out.println("message content: " + content);// 关闭连接client.disconnect();// 关闭客户端client.close();} catch (MqttException e) {throw new RuntimeException(e);}}
}


http://www.ppmy.cn/devtools/163463.html

相关文章

react使用拖拽,缩放组件,采用react-rnd解决

项目中需求,要求给商品图片添加促销标签,并且可拉伸大小,和拖拽位置 最后选择用react-rnd来实现 话不多说,直接上代码!!! 1.在项目根目录下执行以下代码,引入react-rnd yarn add r…

【Arxiv 大模型最新进展】北大 Parenting 方法登场:参数魔法解锁检索增强语言模型新高度!

【Arxiv 大模型最新进展】北大 Parenting 方法登场:参数魔法解锁检索增强语言模型新高度! 🌟 嗨,你好,我是 青松 ! 🌈 自小刺头深草里,而今渐觉出蓬蒿。 NLP Github 项目推荐&#…

利用python和gpt写一个conda环境可视化管理工具

最近在学习python,由于不同的版本之间的差距较大,如果是用环境变量来配置python的话,会需要来回改,于是请教得知可以用conda来管理,但是conda在管理的时候老是要输入命令,感觉也很烦,于是让gpt帮…

windows下适用msvc编译ffmpeg 适用于ffmpeg-7.1

需要的工具: visual studio 2019 (可以是其他版本,只是本人电脑上装的为2019) msys2 ffmpeg-7.1源码 1. 修改msys2_shell.cmd 在msys2目录修改msys2_shell.cmd 打开后找到行set MSYS2_PATH_TYPEinherit 删除开头的rem 2. 运行msys2 运行x64 Native Tools Command …

电脑键盘知识

1、键盘四大功能区 1. 功能区 2. 主要信息输入区 3. 编辑区 4. 数字键盘区 笔记本电脑键盘的功能区,使用前需先按Fn键 1.1、功能区 ESC:退出 F1:显示帮助信息 F2:重命名 F4:重复上一步操作 F5:刷新网页 …

【大模型系列篇】如何解决DeepSeek-R1结构化输出问题,使用PydanticAl和DeepSeek构建结构化Agent

今日号外:🔥🔥🔥 DeepSeek开源周:炸场!DeepSeek开源FlashMLA,提升GPU效率 下面我们开始今天的主题,deepseek官方明确表示deepseek-r1目前不支持json输出/function call,可…

在 MySQL 中,删除数据库和表后,自动递增的值通常会被重置为初始值,一般是 1。但如果自动递增不为零,可能有以下原因及解决办法:

在MySQL中,删除数据库和表后,自动递增的值通常会被重置为初始值,一般是1。但如果自动递增不为零,可能有以下原因及解决办法: 原因 数据文件残留:MySQL的数据存储在数据文件中,虽然删除了数据库…

Elasticsearch 数据量大时如何优化查询性能?

Elasticsearch 数据量大时如何优化查询性能? 在面试中,如果你被问到:“Elasticsearch(ES)在数据量很大的情况下(数十亿级别)如何提高查询效率?” 那么面试官其实是在测试你是否有实…