【问题标题】:iOS using XMPP connects to ejabberd failed使用 XMPP 的 iOS 连接到 ejabberd 失败
【发布时间】:2014-02-06 03:22:49
【问题描述】:

我正在使用https://github.com/robbiehanson/XMPPFramework 连接到我自己的 ejabberd 服务器,但协商后总是失败。

这是我得到的日志: 2014-01-17 07:14:40.780 聊天 [48246:70b] 错误:(空)

2014-01-17 07:14:40.789 聊天[48246:70b] xmppStreamWillConnect

2014-01-17 07:14:46.076 聊天[48246:70b] socketDidConnect

2014-01-17 07:14:46.077 聊天[48246:70b] xmppStreamDidStartNegotiation

2014-01-17 07:14:51.799 Chat[48246:70b] xmppStreamDidDisconnect:错误域=GCDAsyncSocketErrorDomain Code=7“远程对等方关闭套接字”UserInfo=0x918d2e0 {NSLocalizedDescription=远程对等方关闭套接字}

这里是代码:


- (void)viewDidLoad
{
    [super viewDidLoad];

    self.stream = [[XMPPStream alloc] init];
    self.stream.myJID = [XMPPJID jidWithString:@"test@gmail.com"];
    self.stream.hostName = @"my host ip";
    self.stream.hostPort = 5222;
    [self.stream addDelegate:self delegateQueue:dispatch_get_main_queue()];

    self.reconnect = [[XMPPReconnect alloc] init];
    [self.reconnect activate:self.stream];

    self.muc = [[XMPPMUC alloc] init];
    [self.muc activate:self.stream];

    NSError *error = nil;
    if (![self.stream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) {
        NSLog(@"error: %@", error);
    }
    NSLog(@"error: %@", error);
}


- (void)xmppStreamWillConnect:(XMPPStream *)sender
{
    NSLog(@"xmppStreamWillConnect");
}

- (void)xmppStream:(XMPPStream *)sender socketDidConnect:(GCDAsyncSocket *)socket
{
    NSLog(@"socketDidConnect");
}

- (void)xmppStreamDidStartNegotiation:(XMPPStream *)sender
{
    NSLog(@"xmppStreamDidStartNegotiation");
}

- (void)xmppStream:(XMPPStream *)sender willSecureWithSettings:(NSMutableDictionary *)settings
{
    NSLog(@"willSecureWithSettings: %@", settings);
}

- (void)xmppStreamDidSecure:(XMPPStream *)sender
{
    NSLog(@"xmppStreamDidSecure");
}

- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    NSLog(@"xmppStreamDidConnect");
    NSError *error = nil;
    [self.stream authenticateAnonymously:&error];
    NSLog(@"authenticate: %@", error);
}

- (void)xmppStreamDidRegister:(XMPPStream *)sender
{
    NSLog(@"xmppStreamDidRegister");
}

- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error
{
    NSLog(@"didNotRegister: %@", error);

}

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    NSLog(@"xmppStreamDidAuthenticate");
}

- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
{
    NSLog(@"didNotAuthenticate: %@", error);
}

- (void)xmppStreamWasToldToDisconnect:(XMPPStream *)sender
{
    NSLog(@"xmppStreamWasToldToDisconnect");
}

- (void)xmppStreamConnectDidTimeout:(XMPPStream *)sender
{
    NSLog(@"xmppStreamConnectDidTimeout");
}


- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error
{
    NSLog(@"xmppStreamDidDisconnect: %@", error);
}

【问题讨论】:

  • 嘿@disorderdev 你解决了这个问题......然后放一些代码......我有同样的问题......

标签: ios xmpp ejabberd xmppframework


【解决方案1】:

检查此处报告的解决方案 https://github.com/robbiehanson/XMPPFramework/issues/131 是否解决了您的问题。

一般当服务器关闭连接时,你会得到这个 error/ 服务器关闭连接时的两个原因:

  1. 如果客户端空闲,您不会发送常规 ping。
  2. 您正在使用相同的凭据从某些不同的客户端登录,并且在服务器设置中有以下设置: 总是踢 - 如果有资源冲突,立即踢另一个资源。在服务器>服务器设置>资源策略。

【讨论】:

  • 我遇到了同样的问题......如何从客户端定期 ping 到服务器你能给出想法或建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多