【问题标题】:socket closed by remote peer gcdasyncsocket远程对等 gcdasyncsocket 关闭的套接字
【发布时间】:2016-08-20 01:43:30
【问题描述】:
使用 xmppframework 创建聊天应用程序。当我尝试连接到服务器时,它会立即连接并断开连接并引发以下错误。
error domain=gcdasyncsocketerrordomain code=7 socket closed by remote peer
在 Adium(聊天应用)软件上也是如此。想知道在 AWS 服务器上设置 Openfire 时是否有任何设置错误。
https://community.igniterealtime.org/thread/50643
如果我需要执行任何步骤等,请告诉我。
感谢阅读。
【问题讨论】:
标签:
ios
sockets
mqtt
openfire
xmppframework
【解决方案1】:
委托方法socket:didAcceptNewSocket被调用时必须存储新的socket
@property (nonatomic, strong) NSMutableArray *socketsArray;
- (void)viewDidLoad {
_socketsArray = [[NSMutableArray alloc] init];
}
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket {
[_socketsArray addObject:newSocket];
}
【解决方案2】:
当我尝试使用 1885 端口号时遇到了同样的错误。
我在现有代码中添加了以下代码:
mqttReference?.dispatchQueue = DispatchQueue.global(qos: .userInitiated)
//mqttReference?.logLevel = .debug
mqttReference?.enableSSL = true
mqttReference?.sslSettings = [
GCDAsyncSocketManuallyEvaluateTrust: NSNumber(booleanLiteral: true),
GCDAsyncSocketUseCFStreamForTLS: NSNumber(booleanLiteral: false),
kCFStreamSSLPeerName as String: "" as NSString,
GCDAsyncSocketSSLProtocolVersionMin: NSNumber(integerLiteral: Int(SSLProtocol.tlsProtocol1.rawValue)),
GCDAsyncSocketSSLProtocolVersionMax: NSNumber(integerLiteral: Int(SSLProtocol.tlsProtocol12.rawValue)),
]
我现在的完整代码:
// let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
mqttReference = CocoaMQTT(clientID: "", host: mqttProfile.baseURL, port: UInt16(mqttProfile.port))
mqttReference?.username = mqttProfile.userName
mqttReference?.password = mqttProfile.password
mqttReference?.allowUntrustCACertificate = true
mqttReference?.dispatchQueue = DispatchQueue.global(qos: .userInitiated)
//mqttReference?.logLevel = .debug
mqttReference?.enableSSL = true
mqttReference?.sslSettings = [
GCDAsyncSocketManuallyEvaluateTrust: NSNumber(booleanLiteral: true),
GCDAsyncSocketUseCFStreamForTLS: NSNumber(booleanLiteral: false),
kCFStreamSSLPeerName as String: "" as NSString,
GCDAsyncSocketSSLProtocolVersionMin: NSNumber(integerLiteral: Int(SSLProtocol.tlsProtocol1.rawValue)),
GCDAsyncSocketSSLProtocolVersionMax: NSNumber(integerLiteral: Int(SSLProtocol.tlsProtocol12.rawValue)),
]
mqttReference?.autoReconnect = true
mqttReference?.backgroundOnSocket = mqttProfile.allowBackgroundMQTT
mqttReference?.delegate = self
do {
if((mqttReference?.connect())!){
...........
Now it's working fine.