【问题标题】:Unable to connect iPhone device with the ejabberd server无法将 iPhone 设备与 ejabberd 服务器连接
【发布时间】:2014-07-16 04:40:09
【问题描述】:

我是 iOS 开发的新手,尝试将我的 iPhone 设备与 ejabberd 服务器连接。我遵循 Xmpp.org 文档。我也彻底遵循了这个“http://code.tutsplus.com/tutorials/building-a-jabber-client-for-ios-interface-setup--mobile-7188”文档。这是一个很棒的教程。这对我有帮助在我的 mac 中设置一个 ejabberd 服务器并能够通过 ejabberd 服务器连接到两个不同的应用程序(iMessage 和 Adium),但我在启动 iPhone 应用程序时遇到了一些问题。

首先我得到 XMPP 导入错误。但我解决了它,在我使用 [XMPPStream addDelegate: self delegateQueue:dispatch_get_main_queue() ] 方法时应用程序崩溃之后。那个时候编译器说“发送了无法识别的选择器”。所以我把它改成@ 987654323@.Error 已删除。

最后我收到警告消息,告诉我“无法连接到服务器”,最后无法连接到服务器。 我想在本地测试客户端-服务器连接,所以我用我的 Mac Ip 更改了服务器地址。但仍然无法连接。 请帮助我....如果可能的话,请建议我如何进一步处理以及关于 XMPP 的任何其他文档。 非常感谢。

我在应用程序启动时调用此连接函数。

- (BOOL)connect {

    [self setupStream];

    NSString *jabberID = [[NSUserDefaults standardUserDefaults]stringForKey:@"userID"];

    NSString *myPassword =[[NSUserDefaults standardUserDefaults] stringForKey:@"userPassword"];

    if (![xmppStream isDisconnected]) {

        return YES;
    }

    if (jabberID == nil || myPassword == nil) {

        return NO;
    }

    [xmppStream setMyJID:[XMPPJID jidWithString:jabberID]];

    password = myPassword;
    NSError *error = nil;

    if (![xmppStream connect:&error]){

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Can't connect to server %@", [error localizedDescription]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];

        [alertView show];
        [alertView release];

        return NO;
    }
    return YES;
}

- (void)setupStream {

    xmppStream = [[[XMPPStream alloc] init] autorelease];
    [xmppStream addDelegate:self];
    //[xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
}

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {

    NSString *presenceType = [presence type]; // online/offline
    NSString *myUsername = [[sender myJID] user];
    NSString *presenceFromUser = [[presence from] user];

    if (![presenceFromUser isEqualToString:myUsername]) {

        if ([presenceType isEqualToString:@"available"]) {

            [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"MYSERVER"]];

        } else if ([presenceType isEqualToString:@"unavailable"]) {

            [_chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"MYSERVER"]];
        }
    }
}

【问题讨论】:

  • 您是否使用完整的 JID 注册?
  • 是的先生,我正在注册完整的 JID。有没有其他方法可以将 iPhohe 与 xmpp 服务器连接。
  • 您是否尝试过从其他客户端(如 pidgin)使用相同的 JID 和密码登录?

标签: ios xmpp ejabberd


【解决方案1】:

如果您使用教程中提到的 ejabberd,请在连接方法中尝试使用这两行代码

xmppStream.hostName = @"localhost";
xmppStream.hostPort=5222;

我遵循相同的教程,添加这些行后它对我有用..在

中放置断点
- (void)xmppStreamDidConnect:(XMPPStream *)sender

委托方法检查是否连接

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2014-11-16
    • 2018-07-12
    • 2013-03-04
    相关资源
    最近更新 更多