XMPPFramework - 保持接收错误代码503服务不可用

时间:2012-01-23 08:06:39

标签: ios objective-c xmpp xmppframework

我正在使用Openfire服务器(3.7.1)进行XMPP身份验证,消息传递和文件传输。我正在使用iOS的XMPPFramework与它进行通信。

我已成功建立身份验证,发送和接收状态,发送和接收消息。但是,当我尝试使用文件传输时,我无法完成。

请查看下面的代码。

对于发件人:

NSArray *proxyList = [NSArray arrayWithObjects:self.hostname,nil];
[TURNSocket setProxyCandidates:proxyList];
TURNSocket *fileTransferSocket = [[TURNSocket alloc] initWithStream:self.xmppStream toJID:userJid];
if (fileTransferSocket) {
    [fileTransferSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
}

对于接收者:

- (BOOL)xmppStream:(XMPPStream*)sender didReceiveIQ:(XMPPIQ *)iq {

    if ([TURNSocket isNewStartTURNRequest:iq]) {
        TURNSocket *receiverSock = [[TURNSocket alloc] initWithStream:self.xmppStream incomingTURNRequest:iq];
        [self.turnSockets addObject:receiverSock];
        [receiverSock startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    }
    return YES;
}

还实现了TURNSocket的委托方法:

- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket  {
    NSLog(@"Socket Suceeed Port For File Transfer: %d",socket.localPort);

    if ([self.turnSockets containsObject:sender]) {
        NSLog(@"File Transfer Ulastiiiiiiii");
        NSUInteger indexOfObj = [self.turnSockets indexOfObject:sender];
        [self.turnSockets removeObjectAtIndex:indexOfObj];
    }
}

但是当我尝试启动文件传输过程时,我收到如下错误:

<query xmlns="http://jabber.org/protocol/bytestreams" sid="99DC0DA7-55ED-4A53-9A8F-F65F1706E1B2" mode="tcp">
<streamhost jid="proxy.192.168.12.30" host="192.168.12.30" port="7777"/>
</query>
<error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>

我不明白问题可能是什么。

我唯一想到的是我在连接服务器时没有使用SSL身份验证。可能是原因还是我缺少的其他东西?

感谢。

1 个答案:

答案 0 :(得分:1)

在XMPP中 - 在线代表

使用:[self from] full],将资源充满JID。

1)[self from] user],仅提供Username @ domain 2)[self from] full],给出完整的JID如下

JID:username @ domain / resourceid

希望,以上信息将有所帮助