套接字由远程对等方gcdasyncsocket

时间:2016-04-26 09:52:38

标签: ios iphone sockets openfire xmppframework

使用xmppframework创建聊天应用程序。当我尝试连接到服务器时,它连接到&立即断开&抛出以下错误。

error domain=gcdasyncsocketerrordomain code=7 socket closed by remote peer

在Adium(聊天应用)软件上也是如此。想知道在AWS服务器上安装Openfire时出现任何问题。

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

请告诉我如果我需要遵循任何步骤等。

感谢阅读。

3 个答案:

答案 0 :(得分:0)

请检查此github链接,

Socket closed by remote peer" - GCDAsyncSocket Error Code 7

由于服务器可能因空闲时间而关闭连接。你需要发送继续ping到服务器。

如回答所述,

服务器关闭连接的两个原因:

  
      
  1. 如果客户端闲置,您不会定期发送ping。
  2.   
  3. 您使用相同的凭据从某个不同的客户端登录,并且在服务器设置中具有以下设置:   始终踢 - 如果存在资源冲突,请立即启动其他资源。在服务器>服务器设置>资源政策。
  4.   

答案 1 :(得分:0)

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

@property (nonatomic, strong) NSMutableArray *socketsArray;

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

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

答案 2 :(得分:0)

当我尝试使用 1885 端口号时,我遇到了同样的错误。

我在现有代码中添加了以下代码:

@if(!$data->isEmpty())

        {!! $data->render() !!}

    @else

    <p></p>
    
    @endif 

我现在的完整代码:

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())!){
           ...........