我正在使用 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 的委托(delegate)方法:
- (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 身份验证。这可能是原因还是我遗漏了什么?
谢谢。
最佳答案
在 XMPP 中 - 存在委托(delegate)
use : [self from] full], 将用资源填充 JID。
1) [self from]user],只给出用户名@域 2) [self from] full],给出完整的JID如下
JID : 用户名@域/资源ID
希望以上信息对您有所帮助
关于ios - XMPPFramework - 不断收到错误代码 503 服务不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8968640/