Unity使用MQTT本地调试测试,Unity的MQTT本地调试BUG记录以及解决方式

Unity实现MQTT服务器 到这服务器与客户端脚本完成,接下来只需要写一些测试脚本,调用上面脚本的接口,即可完成服务器的开启/关闭,客户端连接,收发消息等功能。然后再/Source/MQTTnet/bin/Debug/net452 文件夹中找到生成的文件。解压好后使用vs打开,并生成.dll文件(我这里下载的是4.1.2.350版本)新建unity工程,创建Plugins文件夹,将文件复制到该文件夹内。然后新建脚本MyMqttServer,代码内带有注释。创建脚本MyMqttClient,代码内带有注释。 阅读详情

前言

用于记录我在学习MQTT中 所遇到的问题,在这里做一个记录,防止以后忘记了。

Unity报错部分

MqttCommunicationException: Error in the application.

请添加图片描述
MqttCommunicationException: Error in the application.
uPLibrary.Networking.M2Mqtt.MqttClient.SendReceive (System.Byte[] msgBytes, System.Int32 timeout) (at Assets/MQTT/scripts/MqttClient.cs:953).
上面的报错翻译过来是:连接超时,引发的原因有:

  1. Unity程序中的账号或者密码错误
  2. Unity输入IP或者端口号输入错误
  3. MQTT服务器端没有为tcp连接设置连接的IP和端口号

由于目标计算机积极拒绝

在这里插入图片描述

这个是由于网络的原因(猜测,我也不知道):

  1. 检查UnityIP检查端口号
  2. 检查服务器端的IP和端口号是否正确
  3. 检查服务器端的控制台是否是开启,如果把开启服务器的控台关闭也会提示这个,使用Web客户端会提示:连接异常断开:AMQJS0008I Socket closed.

ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: port
翻译过来说:端口号超过最大的长度
端口号的最大长度是:65535(2的16次方)

端口超过最大的长度

ArgumentOutOfRangeException: Number must be either non-negative and less than or equal to Int32. MaxValue or -1.

翻译过来说是:参数超出范围异常:Number必须是非负且小于或等于Int32。 最大值或-1。
看不懂,暂时没有解决

UnityException: get_isActiveAndEnabled can only be called from the main thread.

UnityException: get_isActiveAndEnabled can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don’t use this function iUnityException: get_isActiveAndEnabled只能从主线程调用。
翻译过来是:当加载场景时,构造函数和字段初始化器将在加载线程中执行。
不要在构造函数或字段初始化器中使用这个函数,而是将初始化代码移动到Awake或Start函数中。 n the constructor or field initializers, instead move initialization code to the Awake or Start function.

解决办法:有的地方在子线程中修改了Unity的gameObject,将对gameobject的操作放到主线中进行,例如将对物体的操作放到timer的方法中。

提供部分代码,限于apollo使用。

Apollo的服务器端口的配置文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements. See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version
  2.0 (the "License"); you may not use this file except in compliance
  with the License. You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0 Unless required by
  applicable law or agreed to in writing, software distributed under
  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
  OR CONDITIONS OF ANY KIND, either express or implied. See the
  License for the specific language governing permissions and
  limitations under the License.
-->

<!--
  For more information on how configure this file please
  reference:

  http://activemq.apache.org/apollo/versions/1.7.1/website/documentation/user-manual.html
  -->
<broker xmlns="http://activemq.apache.org/schema/activemq/apollo">

  <notes>
    The default configuration with tls/ssl enabled.
  </notes>

  <log_category console="console" security="security" connection="connection" audit="audit"/>


  <authentication domain="apollo"/>
  <!-- Give admins full access -->
  <access_rule allow="admins" action="*"/>
  <access_rule allow="*" action="connect" kind="connector"/>


  <virtual_host id="myapollo">
    <!--
      You should add all the host names that this virtual host is known as
      to properly support the STOMP 1.1 virtual host feature.
      -->
    <host_name>myapollo</host_name>
    <host_name>localhost</host_name>
    <host_name>127.0.0.1</host_name>

    <!-- Uncomment to disable security for the virtual host -->
    <!-- <authentication enabled="false"/> -->

    <!-- Uncomment to disable security for the virtual host -->
    <!-- <authentication enabled="false"/> -->
    <access_rule allow="users" action="connect create destroy send receive consume"/>


    <!-- You can delete this element if you want to disable persistence for this virtual host -->
    <leveldb_store directory="${apollo.base}/data"/>


  </virtual_host>

  <web_admin bind="http://127.0.0.1:61680"/><!-- 服务器的IP和端口号-->
  <web_admin bind="https://127.0.0.1:61681"/>

  <connector id="tcp" bind="tcp://127.0.0.1:61613" connection_limit="2000"/><!-- 客户端的IP和端口号 -->
  <connector id="tls" bind="tls://127.0.0.1:61614" connection_limit="2000"/>
  <connector id="ws"  bind="ws://127.0.0.1:61623"  connection_limit="2000"/>
  <connector id="wss" bind="wss://127.0.0.1:61624" connection_limit="2000"/>

  <key_storage file="${apollo.base}/etc/keystore" password="password" key_password="password"/>

</broker>

使用

https://127.0.0.1:61681
http://127.0.0.1:6168

来访问服务器的网站,网站的账号(admin)密码(password),在客户端使用根据使用的协议访问不同的网站以及IP,参照下面的代码,如果更改需要重新启动客户端。

<connector id="tcp" bind="tcp://127.0.0.1:61613" connection_limit="2000"/><!-- Unity客户端,以及使用tcp协议的客户端所需要连接的IP以及端口号 -->
  <connector id="tls" bind="tls://127.0.0.1:61614" connection_limit="2000"/>
  <connector id="ws"  bind="ws://127.0.0.1:61623"  connection_limit="2000"/><!-- web客户端 -->
  <connector id="wss" bind="wss://127.0.0.1:61624" connection_limit="2000"/>

Unity客户端连接部分

如果是拷贝的上面的配置文件
则连接部分为

    private void btnConnect_Click()
    {
        //IP127.0.0.1    PORT  61613
        string txtIP = inputIP.text;
        string txtPort = inputPort.text;
        string clientId = Guid.NewGuid().ToString();
        string username = "admin";
        string password = "password";

        client = new MqttClient(IPAddress.Parse(txtIP), int.Parse(txtPort), false, null);

        client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;
        client.MqttMsgSubscribed += Client_MqttMsgSubscribed;
        client.Connect(clientId, username, password);
        Debug.Log("开始连接");
    }

并未进行更改,增加了IP和端口号的注释,用于以后的记录。

Enjoy!

有不会的可以私信,

Unity MQTT MQTT(消息队列遥测传输) 是一种轻量级的消息传输协议,它可以用于连接 IoT 设备和应用程序。MQTT 由 IBM 在 1999 年首次开发,现在已成为一个开放的 OASIS 标准。MQTT 的设计目标是提供一个简单、可靠、低功耗、易于实现的消息传输协议,适用于各种网络环境和设备。 阅读详情

相关推荐

Unity集成MQTT实现物联网通讯:从协议原理到实战避坑指南

发布/订阅模式是构建松耦合、可扩展分布式系统的核心消息通信范式,它通过主题路由机制,实现了消息生产者与消费者的完全解耦。MQTT协议正是这一范式的杰出代表,作为专为低带宽、不稳定网络环境设计的轻量级消息传输协议,其核心价值在于为物联网、移动应用和实时数据推送场景提供了高效、可靠的双向通信能力。在Unity实时3D内容开发中,集成MQTT能够无缝连接数字孪生、多人在线协作等应用与物理世界的海量设备及服务,实现从传感器数据实时可视化到用户操作毫秒级同步等丰富场景。本文将以MQTTnet库为例,深入剖析在Unit

weixin_34367257的博客 541

WPF图表库LiveChart异常问题处理-System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围

在使用liveChart处理一个以时间为X轴的曲线时,遇到一个报错:指定的参数超出了有效值的范围:“Specified argument was out of the range of valid values. Arg_ParamName_Name” 指定的参数超出了有效值的范围报错位置发生在框架内的代码PageSegmentCollection中,非自己写的代码,无法定位。

海盗Sharp的博客 1914

OpenHarmony与Unity跨平台物联网系统开发实战:地月数字孪生架构解析

物联网系统开发涉及嵌入式设备与上位机应用间的实时数据交互与协同控制,其核心在于构建稳定高效的跨平台通信架构。从技术原理层面看,这通常需要整合嵌入式操作系统的高可靠性与轻量化特性,以及上位机平台强大的可视化与交互能力。在工程实践中,通过自定义二进制协议或采用MQTT等物联网专用协议,可以实现设备端与客户端间的指令与数据同步,有效应对网络延迟与不稳定等挑战。这种架构在数字孪生、远程监控和模拟仿真等场景中具有重要价值。本文以OpenHarmony作为嵌入式端节点、Unity构建3D交互界面的具体项目为例,深入探讨

weixin_34059951的博客 428

Specified argument was out of the range of valid values.

HttpCachePolicy.UtcSetLastModified errorSpecified argument was out of the range of valid values.Parameter name: utcDate Description: An unhandled exception occurred during the execution of the curre...

weixin_34099526的博客 1849

Unity全功能开发环境搭建:从合法授权到高效工具链配置

在游戏开发与实时3D内容创作领域,Unity引擎因其跨平台特性和强大的编辑器功能而广受开发者青睐。其核心原理在于通过组件化架构和可视化编辑界面,大幅降低了交互式内容的开发门槛。掌握Unity全功能生态的技术价值在于,开发者能够充分利用性能分析、高级渲染管线、团队协作工具等专业模块,显著提升项目的视觉品质、运行效率和可维护性。这在实际应用场景中,对于开发复杂游戏、工业仿真、数字孪生等高质量应用至关重要。本文聚焦于如何通过官方渠道合法获取Unity专业功能,并系统性地配置包括版本控制、性能分析工具和高效插件在内

weixin_30565199的博客 1242

Unity游戏开发AI提示词实战:无代码生成角色控制与特效

在游戏开发领域,AI辅助编程正成为一种高效的技术实践。其核心原理是利用大语言模型的自然语言理解与代码生成能力,将开发者的意图转化为可执行代码。这一技术的核心价值在于降低编程门槛,提升原型开发与问题排查效率,尤其适用于快速实现基础功能模块与解决特定技术难题。在Unity游戏开发场景中,开发者可通过结构化提示词,精准描述需求,引导AI生成如角色控制器、粒子系统特效、UI组件等代码。本文聚焦于如何设计有效的提示词模板,解决诸如第一人称移动、ParticleSystem的Ring Buffer Mode应用、Tex

weixin_34060299的博客 410

Unity+vuforia虚拟按键连接MQTT(EMQX)实现AR+IOT(Unity C#代码实现)(一)(初步AR实现)

Unity+vuforia虚拟按键连接MQTT(EMQX)实现AR+IOT(Unity C#代码实现)(一)(初步AR实现)

weixin_61908666的博客 3496

Unity WebGL与MQTT实时数据通信实战指南

实时数据通信是物联网与数字孪生领域的核心技术底座。在浏览器端呈现三维交互场景,同时保证设备数据实时刷新,是工业监控、智能家居等场景的常见需求。由于浏览器沙箱无法直接使用TCP套接字,基于WebSocket承载的MQTT over WebSocket成为主流方案。MQTT协议以低带宽、高实时性著称,配合Unity WebGL的3D渲染能力,可快速构建无需安装插件的网页级数字孪生大屏。从环境配置到桥接层设计,从连接参数调优到常见故障排查,一套可靠的技术链路能显著降低开发成本。本文围绕Unity打包WebGL与M

weixin_34348174的博客 371

Unity MQTT架构实战:从异步通信到服务层拆分的最佳实践

在物联网与数字孪生场景中,高效可靠的实时数据通信是系统稳定运行的基石。MQTT作为一种轻量级消息传输协议,凭借其发布/订阅模型与低带宽消耗,成为智能设备、传感器数据采集与远程控制的主流选择。然而,在Unity这类游戏引擎中直接使用MQTT,开发者常面临连接管理混乱、线程安全问题、断线重连与订阅恢复机制缺失等挑战。本文从异步通信的基本概念出发,解释MQTT协议的核心原理与工程价值,并结合Unity开发中的实际痛点,系统阐述了如何通过配置模块、连接状态机、订阅发布服务层三层解耦,构建一套清晰、可维护的MQTT服

weixin_34037173的博客 373

ESP32+巴法云+Unity三端联动:MQTT物联网远程控制与3D仪表盘实战

物联网设备与外部应用之间的通信,往往受限于局域网穿透和IP地址暴露等难题。MQTT协议凭借发布/订阅模型,成为解决这类问题的核心方案。通过云端Broker进行消息中转,设备端与应用端只需主动外连同一主题,即可实现双向数据传输,无需公网IP。巴法云作为国内可用的MQTT云服务,提供了免费、稳定的中转通道,让开发者专注于业务逻辑而非服务器搭建。这种架构广泛适用于智能家居远程监控、工业设备可视化、多端协同控制等场景。基于这一原理,利用ESP32接入传感器数据并发布至巴法云,同时在Unity中通过MQTTnet订阅

weixin_26742753的博客 211

unity连接mqtt服务器测试,订阅主题,获取实时消息

unity连接mqtt服务器测试,支持导出pc端exe,web端没试过,支持订阅主题,获取实时消息。

Unity 2022.3集成MQTTnet 4.3.7实现物联网数据实时通信

MQTT作为一种轻量级的发布/订阅消息传输协议,是物联网设备通信的基石。其核心原理基于TCP/IP协议,通过主题过滤机制实现高效的一对多消息分发,具有低带宽、低功耗和高可靠性的技术价值,广泛应用于智能家居、工业监控和实时数据推送等场景。在Unity引擎中,通过集成MQTT客户端库,开发者可以将游戏对象或虚拟场景与物理世界的传感器数据联动,实现数字孪生或状态同步。本文以Unity 2022.3的.NET Standard 2.1环境为例,详细解析如何手动引入兼容的MQTTnet 4.3.7的DLL文件,并编写

weixin_34037515的博客 419

USRP B210 运行gnuradio时 FPGA固件版本冲突错误解决方法

事情起源于昨天拿到USRP后开始调试,结果整了一个下午都没解决这个问题。 昨天晚上自己思考了一下,觉得还是版本问题。 首先,uhd_find_devices和uhd_usrp_probe均可以正常运行,没有报错,固件正常加载,序列号也可看到。 teray@teray-X550JK:~$ uhd_find_devices [INFO] [UHD] linux; GNU C++ version 7.5...

斯哈研究所 4243

MQTT Broker 项目教程

MQTT Broker 项目教程 1. 项目目录结构及介绍 mqtt-broker/ ├── .github/ │ └── workflows/ │ └── fuzzfuzz ├── mqtt-v5-broker/ ├── mqtt-v5/ ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ...

gitblog_00058的博客 379

AG16K MCU ARM Cortex M3

其中,Input文件为Keil生成的mcu程序文件,输出为合成后的存储格式Bin文件,Program address 为上方表格中“程序运行 RAM 地址(4bytes)”,即 Keil 中设置的程序运行地址。其中 MCU 程序的地址,根据 mcu.ip 中设置的 FLASH_BIAS 进行设置。AG16K MCU 的 FPGA 工程中,需调用 alta_mcu_m3 的硬核 IP,包含在 alta_sim.v 的库文。Quartus II。//MCU 程序在 FLASH 中存放的首地址。

Embeded_FPGA的博客 1805

IEC 104电力规约详细解读(五) - 遥控

主站下发遥控选择命令,子站进行遥控选择返校,若成功则回答遥控选择成功报文,若失败则回答失败报文。主站下发取消遥控命令或者遥控执行命令行。子站皆以报文的镜像确认。遥控命令用来实现对一个可操作设备状态的改变。在配电自动化中,包括单点命令和双点命令。通常,单点命令用于控制单点信息对象;双点命令用于控制双点信息对象。

张二狗的博客 7350

Unity AR工业数据可视化实战:Nano-Banana Studio集成与性能优化

在工业物联网与增强现实(AR)应用开发中,实时数据可视化是连接物理设备与数字孪生的核心技术。其原理在于将来自传感器、PLC等多源异构的实时数据流,通过高效的通信协议与数据绑定机制,驱动虚拟场景中的UI、模型与特效,从而实现设备状态的透明化监控与交互。这项技术的核心价值在于极大提升了远程维护、操作培训等场景的效率和安全性。面对工业级应用对数据高频、低延迟、高保真的严苛要求,传统开发方式往往陷入网络编程与数据处理的复杂性泥潭。本文以Unity AR Foundation为开发平台,深入探讨如何利用Nano-Ba

weixin_30719711的博客 356

已经下载了WSL2但Docker依然显示版本过旧无法使用,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2906

WebSocket与MQTT选型实战:工业IoT实时通信避坑指南

实时数据传输是物联网系统的核心能力,其本质是解决端到端低延迟、高可靠的消息投递问题。WebSocket提供全双工TCP隧道,适合人机交互场景,但缺乏内置可靠性机制;MQTT则是面向发布/订阅的消息中间件,具备QoS分级、遗嘱消息、会话保持等工业级保障。技术价值在于匹配不同终端能力(如ESP32-S3资源受限)、网络环境(Wi-Fi/NB-IoT)与业务SLA(≤200ms延迟、≤0.001%丢包)。典型应用场景包括工厂设备状态监控、嵌入式音频流传输、Web前端实时看板。当需求中出现'esp32s3 max9

weixin_30740581的博客 462

移动机器人路径规划中噪声环境下的鲁棒性测试仿真

设计一个二维或三维环境模型,包括静态障碍物和可能存在的动态障碍物。

amy_mhd的博客 126

YOLOv11-seg改进系列 | 引入CMTFNet(TGRS2023)+TransNeXt(CVPR2024)的C3k2_MSMHSA_CGLU模块,多尺度空洞注意力扩大感受野,增强复杂背景下

本文提出一种改进YOLOv11分割模型的C3k2_MSMHSA_CGLU模块,融合多尺度多头自注意力(MSMHSA)和卷积门控线性单元(CGLU)。MSMHSA通过多尺度空洞卷积提取不同感受野特征,生成跨尺度注意力,降低计算量同时保留全局上下文。CGLU采用卷积门控机制增强特征变换能力。实验表明,改进后模型参数量仅增加7.8%,GFLOPs增加4.2%,显著提升了多尺度目标检测性能,尤其适用于遥感图像等复杂场景。该模块有效解决了原始C3k2感受野有限、缺乏全局建模能力的问题。

qq_44224801的博客 200

Pico+MicroPython实现稳定MQTT订阅的工程实践

MQTT是一种轻量级发布/订阅消息传输协议,广泛应用于物联网边缘设备通信。其核心原理包括连接保活(Keep Alive)、QoS服务质量分级、主题过滤与报文状态管理,对资源受限的嵌入式平台提出严苛要求。技术价值在于以极低开销实现可靠双向通信,支撑传感器数据采集、远程控制与状态同步等关键场景。在树莓派Pico这类仅264KB RAM的MCU上,MicroPython环境下的MQTT订阅极易因内存溢出、心跳失配或字节流解析异常而失效。本文聚焦Pico平台,深入解析SUBSCRIBE报文构造、状态机驱动的连接管理

weixin_33834910的博客 388

【WRF-Chem工具】anthro_emiss 详解:生成人为排放数据

anthro_emiss 详解:生成人为排放数据

WW、forever的博客 2055

IoT模块安全连接AWS Cloud:从证书到MQTT的完整实践

物联网设备云接入是构建智能系统的基石,但设备身份与通信链路安全往往被忽视。本文从X.509证书体系、TLS加密传输、MQTT协议等基础概念出发,阐述设备认证、最小权限策略、安全连接建立的核心原理,以及设备影子、OTA签名校验等工程实践。这些技术能有效防止设备仿冒、数据窃取和恶意固件注入,广泛应用于智能照明、配电监测等大规模IoT场景。在AWS Cloud环境下,如何让IoT模块安全、稳定地完成上云连接,正是需要系统掌握的关键能力。

weixin_30851867的博客 371

redhawk:STA timing data file解析

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?STA timing data file分为以下几个部分:• Header• Name Map• Footer这部分报告设计的基本信息,例如文件类型,设计名称,分隔符等。...

m0_61544122的博客 1154

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Unity实战:从API到动画,快速构建数据驱动的数字孪生演示Demo

数字孪生作为连接物理世界与数字空间的关键技术,其核心原理在于通过数据映射与实时渲染,实现对实体状态的动态可视化。这项技术的价值在于将抽象的物联网数据转化为直观的视觉反馈,从而在工业监控、智慧城市等应用场景中,大幅提升状态感知与决策效率。本文以游戏引擎Unity为实践工具,深入讲解如何构建一条从数据接入到三维动画驱动的完整技术链路。通过解析JSON数据与配置化映射,开发者可以快速实现传感器数据(如转速、温度)对3D模型旋转、颜色变化的实时驱动,并利用Unity强大的动画系统与UI工具链,打造出交互式演示原型。

weixin_30892763的博客 422

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: C#对象转实体,C#实体转对象,Unity使用Json作为配置文件,Json读取之后全部为乱码
下一篇: Unity报错但VS(代码编辑器)不报错,Unity提示需要继承自MonoBehavior,Unity提示缺少命名空间或者DLL,Unity点击UI或者GameObject无法在Hierarchy锁定
先生沉默先
博客等级 码龄6年 920粉丝 146原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值