3

xmppフレームワークを使用してiphonesdkでファイルを送受信する方法は?現在XEP-0065、クラスを使用しており、次のコードを使用しています。

ObjTURNSocket = [[TURNSocket alloc] initWithStream:((TestAppDelegate*)[[UIApplication sharedApplication] delegate]).xmppStream 
                                                 toJID:chatuser.jid];
    [ObjTURNSocket start:self];

そして、私はサーバーから次の応答を受け取っています:

<iq type="error" id="AB2ED567-B97F-4DFE-B789-7731A617C239" to="kapil@testweb/6df6dc96" from="jabber.org">
   <query xmlns="http://jabber.org/protocol/disco#items"/>
   <error code="404" type="cancel">
      <remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
   </error>
 </iq>`

どんな助けや提案も大歓迎です。

4

3 に答える 3

4

まず、プロキシに使用できる可能性のあるサーバーの配列を使用してsetProxyCandidatesを呼び出します。デフォルトは「jabber.org」であり、サーバーはjabber.orgとフェデレーションされていないため、ディスコエラーが返されます。

次に、デリゲートで、次のメソッドを実装します。

- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket;
- (void)turnSocketDidFail:(TURNSocket *)sender;

次に、didSucceedの実装で、次を使用して、渡されたソケットでデータを送信します。

- (void)writeData:(NSData *)data 
      withTimeout:(NSTimeInterval)timeout 
              tag:(long)tag;

最後に、ソケットを閉じます。

- (void)disconnectAfterWriting;

これは、 TURNSocket.mのソースを調べ、ハードコードされた「jabber.org」を探して[delegateから、代理人が呼び出された場所を探すことでわかりました。これにより、代理人が実装するためのプロトコルが文書化されているTURNSocket.hに戻りました。

于 2011-06-14T07:34:16.853 に答える
1

iOSデバイスから別のデバイスにファイルを転送できるようにするという特定のニーズを満たすために、TURNSocketクラスをカスタマイズする必要がありました。使用可能なプロキシサーバーがある場合は、TURNSocketクラスが必要に応じて機能する可能性があります。ただし、これがプロキシサーバーを利用できない直接接続である場合は、別のデバイスに接続してファイルを直接転送できるようにデバイスを設定するために、追加の作業が必要です。

わずかな変更を1つ加えるだけで、現在の形式でTURNSocketを使用してファイルを受け取ることができました。現在のコードでは、idとsidに同じ値が割り当てられています。これは、受信したスタンザがidとsidの両方で同じ一意の識別子値を持つことを保証することはできません。

于 2011-11-15T16:26:31.097 に答える
0

ファイルの共有と受信を可能にするには、xep-96 を使用する必要があります。その後、関連データを使用して xmppSifiletranfer を開始します。お気に入り

-(void)sendToOtherDevice:(NSData *)fileData receiverJid:(XmPPJId *)senderFullID file:(NSString *)fileName{

            myFileTransferID=[xmppStream generateUUID];
            XMPPJID *jid =senderFullID;
            sifiletransfer=[[XMPPSIFileTransfer alloc]init];
            [sifiletransfer initiateFileTransferTo:jid withData:fileData file:fileName passedsid:myFileTransferID];

            if ([jid.domain isEqualToString:[xmppStream myJID].domain]) {
                [TURNSocket setProxyCandidates:[NSArray arrayWithObjects:jid.domain, nil]];
            } else {
                [TURNSocket setProxyCandidates:[NSArray arrayWithObjects:jid.domain,[xmppStream myJID].domain, nil]];
            }
             TURNSocket *socket = [[TURNSocket alloc] initWithStream:xmppStream toJID:jid sid:myFileTransferID];
           // [socket setDataToSend:fileData];

            [socket startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    }
    # delegater of turnsocket
    - (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket
    {
        NSLog(@"Socket Suceeed Port For File Transfer: %d",socket.localPort);
        DDLogInfo(@"TURN Connection succeeded!");
        DDLogInfo(@"You now have a socket that you can use to send/receive data to/from the other person.");
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Hurray!!"
         message:@"Conection Established"
         delegate:nil
         cancelButtonTitle:@"Ok"
         otherButtonTitles:nil];
         [alertView show];
    }

if you guys have any other issue regarding file transfer comment below.I will surely help you.
于 2014-09-20T07:03:56.893 に答える