远程对等方关闭了套接字gcdasyncsocket。

5
使用xmppframework创建聊天应用。每当我尝试连接服务器时,它会立即连接并断开,并抛出以下错误。
error domain=gcdasyncsocketerrordomain code=7 socket closed by remote peer

在 Adium 软件上发生了同样的问题。想知道在设置 AWS 服务器上的 Openfire 时是否设置有误。

https://community.igniterealtime.org/thread/50643

请告诉我是否需要遵循任何步骤或其他操作。

谢谢阅读。

3个回答

2

当委托方法socket:didAcceptNewSocket被调用时,您必须存储新的套接字

@property (nonatomic, strong) NSMutableArray *socketsArray;

- (void)viewDidLoad {
    _socketsArray = [[NSMutableArray alloc] init];
}

- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket {
    [_socketsArray addObject:newSocket];
}

1
当我尝试使用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.

0
请检查这个GitHub链接, Socket closed by remote peer" - GCDAsyncSocket Error Code 7 这是因为服务器可能由于空闲时间而关闭连接。您需要向服务器发送连续的ping。
如答案所述,
当服务器关闭连接时有两个原因:
1. 如果客户端处于空闲状态,您没有发送定期的ping。 2. 您正在使用相同凭据从其他客户端登录,并且在服务器设置中具有以下设置: 始终踢出 - 如果存在资源冲突,立即踢出其他资源。在服务器>服务器设置>资源策略中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接