使用CocoaMQTT连接到我的mqtt代理时遇到问题

时间:2019-07-11 06:21:38

标签: ios swift mqtt

我正在制作一个与Mqtt代理进行通信的iOS应用程序,主要用于发布消息。但是,当我尝试使用CocoaMQTT库与代理连接时,总是在连接时出现错误。

我正在尝试使用CocoaMQTT的最新版本以及1.1.3版本。但是两者都无法连接并给我错误

  

(错误域= kCFStreamErrorDomainNetDB代码= 8“节点名或servname   提供,还是未知” UserInfo = {NSLocalizedDescription = nodename或   servname(提供或未知)}

 formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
    let dateString = formatter.string(from: date)
    let clientID = "smart-curtain-"+dateString
mqttClient = CocoaMQTT.init(clientID: clientID, host: 
    contantData.MQTT_BROKER_URL, port: UInt16(1883))
        mqttClient.username = nil
        mqttClient.password = nil
        mqttClient.autoReconnect = true
        mqttClient.allowUntrustCACertificate = true
        mqttClient.keepAlive = 60
       mqttClient.enableSSL = false

因此,它总是以mqttDidDisconnect委托方法结束。我的经纪人网址是tcp://xyz.com(xyz只是示例),端口是1883。我尝试从iPhone上使用2-3个Mqtt收费应用程序来连接经纪人详细信息,但没有人能够连接它。 >

但是相同的设置在Android应用中可以正常工作。 (它使用的是net.igenius:mqttservice:1.6.4)(此代理无需身份验证)

2 个答案:

答案 0 :(得分:1)

如CocoaMQTT doc中所示,host方法中的init条目应仅为主机名,而不是URI:

let clientID = "CocoaMQTT-" + String(NSProcessInfo().processIdentifier)
let mqtt = CocoaMQTT(clientID: clientID, host: "localhost", port: 1883)
mqtt.username = "test"
mqtt.password = "public"
mqtt.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout")
mqtt.keepAlive = 60
mqtt.delegate = self
mqtt.connect()

例如应该是xyz.com而不是tcp://xyz.com

答案 1 :(得分:0)

    var session = CocoaMQTT.init(clientID: "user1", host: "xx.xx.xxx.xx", port: 1883)
    session.allowUntrustCACertificate = true

不需要像在android中一样发送tcp://xx.xx.xxx.xx:port,您可以通过分别删除tcp://和端口号来传递xx.xx.xxx.xx。