我正在尝试使用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)")
}