无法将iPhone设备与ejabberd服务器连接

时间:2014-05-27 10:04:38

标签: ios xmpp ejabberd

我是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() ]方法崩溃后,我解决了这个问题。那时编译器说" 无法识别的选择器已发送&#34 ;。所以我将其更改为[XMPPStream addDelegate:self ]。错误已删除。

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

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

- (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"]];
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在connect方法中也尝试使用这两行,如果你正在使用教程中提到的ejabberd

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

我正在遵循相同的教程,在

中添加这些line..put断点后,它对我有用
- (void)xmppStreamDidConnect:(XMPPStream *)sender

委托方法检查其连接是否