使用xmppframework创建聊天应用程序。当我尝试连接到服务器时,它连接到&立即断开&抛出以下错误。
error domain=gcdasyncsocketerrordomain code=7 socket closed by remote peer
在Adium(聊天应用)软件上也是如此。想知道在AWS服务器上安装Openfire时出现任何问题。
https://community.igniterealtime.org/thread/50643
请告诉我如果我需要遵循任何步骤等。
感谢阅读。
答案 0 :(得分:0)
请检查此github链接,
Socket closed by remote peer" - GCDAsyncSocket Error Code 7
由于服务器可能因空闲时间而关闭连接。你需要发送继续ping到服务器。
如回答所述,
服务器关闭连接的两个原因:
- 如果客户端闲置,您不会定期发送ping。
- 您使用相同的凭据从某个不同的客户端登录,并且在服务器设置中具有以下设置: 始终踢 - 如果存在资源冲突,请立即启动其他资源。在服务器>服务器设置>资源政策。
醇>
答案 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())!){
...........