M2Mqtt 库未发布消息,线程以代码 259 退出

Posted

技术标签:

【中文标题】M2Mqtt 库未发布消息,线程以代码 259 退出【英文标题】:M2Mqtt library not publishing message, threads exiting with code 259 【发布时间】:2015-09-26 10:20:28 【问题描述】:

在我当前的 .NET 项目中,我想通过 MQTT 将消息发布到代理,但我尝试了几种方法来实现这一点,但都没有奏效。我想使用M2Mqtt (Paho Link),但我也尝试了MqttDotNet,但没有成功。

我目前解决这个问题的方法是让最简单的实现工作,但即使这个也行不通。我只是创建了一个 MqttClient 实例,连接到代理(调试显示我可以通过 'IsConnected' 工作)然后我发布一条消息(简单字符串'Local:0:user:dev')。尽管如此,我的经纪人从未收到此消息,我从 VisualStudio 得到的唯一反应是以下 4 行:

Der Thread 0x13a8 帽 mit 代码 259 (0x103) geendet。 Der 线程 0x16d4 帽 mit 代码 259 (0x103) geendet。 Der 线程 0x1ab0 帽 mit 代码 259 (0x103) geendet。 Der Thread 0xa48 hat mit Code 259 (0x103) geendet。

此消息为德语,与提到的线程退出消息here 相同。

我正在使用此代码来连接、发布和断开连接,并且我已经尝试了相同的代码,但没有“断开连接”部分。

MqttClient client = new MqttClient("127.0.0.1");
client.Connect("client");
client.Publish("cdj/new", Encoding.UTF8.GetBytes(message));
client.Disconnect();

只是为了确保代理正在工作并且它可以接收通过 Paho MQTT 实用程序发送的完全相同的消息。我正在使用 .NET 4.0 和 M2Mqtt 4.0 版(因为最新版本适用于 .NET 4.5)。

我不知道我应该做些什么不同,特别是因为没有异常或错误消息表明那里出了什么问题。

【问题讨论】:

我不熟悉.net代码,但是有onConnected回调吗?如果是这样,将 Publish 和 Disconnect 调用移到 onConnected 回调中。您可能尝试在连接完成之前发送 没有 onConnected 回调,丢失的连接不是问题,但似乎我(通过“断开连接”)或 GC 在发布操作期间关闭了套接字。现在我尽可能长时间地保持连接以发送多条消息,无论如何这应该是更好的做法;) 【参考方案1】:

似乎我通过代码或 GC 在发布操作期间关闭了网络套接字,所以现在我的解决方案是尽可能长时间地保持与代理的连接以发送多条消息及其工作。

作为在发布操作完成后立即关闭套接字的解决方案,我建议使用 MqttMsgPublished 事件断开客户端。

【讨论】:

以上是关于M2Mqtt 库未发布消息,线程以代码 259 退出的主要内容,如果未能解决你的问题,请参考以下文章

库未正确导出功能

Cudafy 线程已退出,代码为 259

通过集群的方式解决基于MQTT协议的RabbitMQ消息收发

编辑构建定义 - 超过 259 个字符的路径

Dyld 消息:库未加载:/System/Library/Frameworks/FileProvider.framework/FileProvider

线程结束,GetExitCodeThread后结束值一直STILL_ACTIVE,259的问题