2015-09-26 26 views
1

在我當前的.NET項目中,我希望通過MQTT向代理髮布消息,但我嘗試了幾種方法來實現此操作,但它們都不起作用。我想用M2MqttPaho Link),但我也試過MqttDotNet沒有成功。M2Mqtt庫沒有發佈消息,線程退出代碼259

我目前解決這個問題的方法是讓最簡單的可能的實現工作,但即使這個不起作用。我只是創建一個MqttClient實例,連接到代理(調試通過'IsConnected'顯示我的工作),然後發佈消息(簡單字符串'Local:0:user:dev')。儘管如此,我的經紀人從未收到這條消息,我從VisualStudio獲得的唯一反應是這4行:

Der Thread 0x13a8 hat mit代碼259(0x103)geendet。 Der Thread 0x16d4 hat mit Code 259(0x103)geendet。 Der線程0x1ab0帽子代碼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(); 

只是爲了確保,在經紀人的工作,它可以準確地接收通過泛美衛生組織MQTT工具發送相同的消息。我使用.NET 4.0和M2Mqtt 4.0版(因爲最新版本是針對.NET 4.5的)。

我不知道我應該做什麼不同,特別是因爲沒有任何exeption或錯誤消息指出哪裏出了問題。

+0

我不熟悉.net代碼,但是有onConnected回調嗎?如果這樣的話,將發佈和斷開呼叫移到onConnected回調中。您可能在連接完成之前嘗試發送 – hardillb

+0

沒有onConnected回調,缺少的連接不是問題,但它看起來像我(通過'Disconnect')或GC在發佈操作期間關閉套接字。現在我儘可能長時間地保持連接以發送多條消息,無論如何,這應該是更好的練習;) –

回答

1

看起來好像是我通過代碼或GC在發佈操作期間關閉了網絡套接字,所以現在我的解決方案是儘可能長地連接到代理以發送多個消息及其工作。

作爲發佈操作完成後關閉套接字的解決方案,我建議使用MqttMsgPublished事件來斷開客戶端連接。

相關問題