MQTT服务器在swift 3.1中断开连接

时间:2017-06-13 09:39:15

标签: ios sockets swift3 mqtt

我正在尝试使用https://github.com/emqtt/CocoaMQTT创建mqtt套接字连接。服务器连接但很快断开连接后,发出错误:Error Domain = GCDAsyncSocketErrorDomain Code = 7" Socket由远程对等设备关闭" UserInfo = {NSLocalizedDescription =由远程对等方关闭的套接字}。我配置服务器的代码是:

let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
self.mqtt = CocoaMQTT(clientID: clientID, host: "cabs.jellyfishtele.com", port: 61612)
self.mqtt?.willMessage = CocoaMQTTWill(topic: "new", message: "someMessage")
self.mqtt?.keepAlive = 10
self.mqtt?.backgroundOnSocket = true
self.mqtt?.secureMQTT = true
self.mqtt?.cleanSession = true
self.mqtt?.delegate = self
self.mqtt?.connect()

上面的代码在viewDidLoad中。我在didConnectAck方法中获得了连接确认。我想维持该连接,以便接收运行时消息并显示它们。请帮忙!

控制台日志:

didConnect cabs.jellyfishtele.com:61612
Delegate: mqttDidDisconnect
Error Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by remote peer" UserInfo={NSLocalizedDescription=Socket closed by remote peer}

我的代表职能:

func mqtt(_ mqtt: CocoaMQTT, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Void) {
    self.mqtt?.allowUntrustCACertificate = true

    completionHandler(true)
}

func mqtt(_ mqtt: CocoaMQTT, didConnect host: String, port: Int) {
    print("didConnect \(host):\(port)")
    mqtt.subscribe("topic1")
//        mqtt.ping()
}

func mqtt(_ mqtt: CocoaMQTT, didConnectAck ack: CocoaMQTTConnAck){
    print("didConnectAck: \(ack),rawValue: \(ack.rawValue)")

    if ack == .accept {
        mqtt.subscribe("topic1", qos: CocoaMQTTQOS.qos1)
    }
}

func mqtt(_ mqtt: CocoaMQTT, didPublishMessage message: CocoaMQTTMessage, id: UInt16) {
    print("didPublishMessage with message: \(message.string!)")
}

func mqtt(_ mqtt: CocoaMQTT, didPublishAck id: UInt16) {
    print("didPublishAck with id: \(id)")
}

func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16 ) {
    print("didReceivedMessage: \(message.string!) with id \(id)")

}

func mqtt(_ mqtt: CocoaMQTT, didSubscribeTopic topic: String) {
    print("didSubscribeTopic to \(topic)")
}

func mqtt(_ mqtt: CocoaMQTT, didUnsubscribeTopic topic: String) {
    print("didUnsubscribeTopic to \(topic)")
}

func mqttDidPing(_ mqtt: CocoaMQTT) {
    print("didPing")
}

func mqttDidReceivePong(_ mqtt: CocoaMQTT) {
    _console("didReceivePong")
}

func mqttDidDisconnect(_ mqtt: CocoaMQTT, withError err: Error?) {
    _console("mqttDidDisconnect")
    print(err!)
//        mqtt.autoReconnect = true
}

func _console(_ info: String) {
    print("Delegate: \(info)")
}

0 个答案:

没有答案