Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何进入聊天室+;xmpp?_Ios_Objective C_Xmpp_Xmppframework - Fatal编程技术网

Ios 如何进入聊天室+;xmpp?

Ios 如何进入聊天室+;xmpp?,ios,objective-c,xmpp,xmppframework,Ios,Objective C,Xmpp,Xmppframework,我正在使用XMPP框架研究聊天的概念。我成功地与服务器建立了连接。现在我的下一步是进入给定的房间 NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"]; NSString *room = [@"myroom" stringByAppendingString:@"@app.xmpp.syn.in"]; [presence addAttributeWithName:@"t

我正在使用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室是错的。请更正或建议我解决此问题。

首先,这些行是错误的:

    XMPPIQ *iq = [XMPPIQ iq];
    [iq addChild:presence];
XMPP使用的三节是
。您可以将它们作为XML的独立子项发送
。用智商来包装自己的存在毫无意义。但在您的示例代码中,您在执行此操作后没有使用
iq
,因此这可能不是导致问题的原因

其次,你应该让你的存在成为一个完整的JID,而不是一个赤裸裸的JID。完整JID是包含资源的JID,因此
myroom@app.xmpp.syn.in/资源
,而不是
myroom@app.xmpp.syn.in
。您指定为资源的内容将是您在聊天中的昵称。看见因此,你应该做类似的事情:

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

@iPatel我必须进入房间,它是endok服务器上的静态聊天室。。我只是把我从谷歌找到的链接放在上面,否则我对XMPP框架没有任何经验:)快乐编码:)@Sudha这可能对你有帮助。