我正在制作一个与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)(此代理无需身份验证)
答案 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。