【问题标题】:How to enters in the chat room + xmpp?如何进入聊天室+xmpp?
【发布时间】:2014-06-17 21:10:50
【问题描述】:

我正在使用 XMPP 框架研究聊天概念。我成功地与服务器建立连接。现在我的下一步是进入给定的房间。

        NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
        NSString *room = [@"myroom" stringByAppendingString:@"@app.xmpp.syn.in"];
        [presence addAttributeWithName:@"to" stringValue:room];
        NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"http://jabber.org/protocol/muc"];
        NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
        [history addAttributeWithName:@"maxstanzas" stringValue:@"50"];
        [x addChild:history];
        [presence addChild:x];
        XMPPIQ *iq = [XMPPIQ iq];
        [iq addChild:presence];
        [xmppStream sendElement:presence];

我已尝试使用上述代码,但它不起作用。它不会转到以下方法。

- (void)sendElement:(NSXMLElement *)element
{
    if (element == nil) return;
    dispatch_block_t block = ^{ @autoreleasepool {
        if (state == STATE_XMPP_CONNECTED)
        {
            [self sendElement:element withTag:TAG_XMPP_WRITE_STREAM];
        }
        else
        {
            NSError *error = [NSError errorWithDomain:XMPPStreamErrorDomain
                                                 code:XMPPStreamInvalidState userInfo:nil];
            [self failToSendElement:element error:error];
        }
    }};

    if (dispatch_get_specific(xmppQueueTag))
        block();
    else
        dispatch_async(xmppQueue, block);
}

我是第一次实现这个。进入 MUC 房间可能是我错了。请更正或建议我解决此问题。

【问题讨论】:

  • @iPatel 我必须进入房间它是服务器端的静态聊天室
  • 好的..我只是把我从谷歌找到的链接放在上面,否则我对XMPP框架没有任何经验..:)快乐编码:)
  • @Sudha 这可能会对您有所帮助。 stackoverflow.com/questions/19268629/…

标签: ios objective-c xmpp xmppframework


【解决方案1】:

首先,这些行是错误的:

    XMPPIQ *iq = [XMPPIQ iq];
    [iq addChild:presence];

XMPP 使用的 3 节是 <presence><message><iq>。您将这些作为 XML <stream:stream> 的单独子项发送。在智商中包装存在是没有意义的。但是在您的示例代码中,您在执行此操作后没有使用 iq,因此这可能不是导致您出现问题的原因。

其次,您应该将您的出席信息发送到完整的 JID,而不是纯 JID。完整的 JID 是包含资源的 jid,因此是 myroom@app.xmpp.syn.in/resource,而不是 myroom@app.xmpp.syn.in。您指定为资源的内容将是您在聊天中的昵称。见Example 18 in XEP-0045。因此,您应该做类似的事情:

    NSString *room = [[@"myroom" stringByAppendingString:@"@app.xmpp.syn.in"] stringByAppendingString:@"/nickname"];
    [presence addAttributeWithName:@"to" stringValue:room];

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多