【问题标题】:XMPPFramework - Keep Receiving Error Code 503 Service UnavailableXMPPFramework - 不断收到错误代码 503 服务不可用
【发布时间】:2012-02-16 15:01:12
【问题描述】:

我正在使用 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 身份验证。可能是原因还是我错过了什么?

谢谢。

【问题讨论】:

  • 我发现了关于错误 503 的问题,因为我没有将资源标签附加到 JID(而不是 tolga@mydomain/f48sasd 我只是发送 tolga@mydomain)。现在我没有收到 erro 503 service not available 但是这次我开始收到以下错误并且我找不到问题。 有人知道吗?谢谢
  • 嗨。你让这个工作了吗?我有与您原来的问题类似的问题,但我不认为我错过了资源标签。 stackoverflow.com/questions/10205758/…
  • 事实上,当我继续研究时,也许我还需要将资源标签附加到 JID 中。我只是在努力寻找在我的代码中执行此操作的位置。您的代码是否基于本教程...mobile.tutsplus.com/tutorials/iphone/…
  • 嘿,你能告诉我如何获取资源吗?

标签: ios objective-c xmpp xmppframework


【解决方案1】:

在 XMPP 中 - 存在委托

use : [self from] full],将用资源填充 JID。

1) [self from]user],仅给出用户名@域 2) [self from] full],给出完整的 JID 如下

JID : 用户名@domain/resourceid

希望以上信息对您有所帮助

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 2020-01-02
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多