4

XMPP 認証、メッセージング、およびファイル転送に Openfire サーバー (3.7.1) を使用しています。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認証を使用していないことです。それが理由でしょうか、それとも私が見逃しているものですか?

ありがとう。

4

1 に答える 1

1

XMPP - プレゼンス デリゲート

use : [self from] full] は、リソースで完全な JID になります。

1) [self from]user]、Username@domain のみを与える 2) [self from] full]、以下のように完全な JID を与える

JID : ユーザー名@ドメイン/リソース ID

上記の情報が役立つことを願っています

于 2015-02-16T07:31:07.560 に答える