2011-06-13 61 views
3

如何使用xmpp框架在iphone sdk中發送/接收文件? 目前我使用XEP-0065類,使用下面的代碼:XMPP在iPhone SDK發送/接收文件...?

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="[email protected]/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>` 

任何幫助或建議將十分讚賞。

+0

我要找使用XEP-0065擴展類發送/穿繩在XMPP文件教程 - TURNSocket.h&TURNSocket.m – Matrix 2011-06-13 09:19:37

+0

什麼版本XMPPFramework您使用的是?當前版本有startWithDelegate:而不是start :.另外,chatuser.jid的價值是什麼? – 2011-06-14 03:25:47

+0

在我的課上還有一個名爲startWithDelegate的方法,但是你能否告訴我應該在哪裏傳遞TURNSocket類中的文件內容。 – Matrix 2011-06-14 05:28:26

回答

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; 

我想通過查看的來源,尋找硬編碼的「jabber.org」,然後搜索[delegate以查找代表被調用的地方。這讓我回到TURNSocket.h,其中有一個記錄供代表實施的協議。

+0

謝謝,喬。謝謝你的幫助。 – Matrix 2011-06-14 08:12:49

+0

如果我不想使用代理服務器,我不使用任何代理服務器?如果我傳遞[setProxyCandidates:nil],然後turnSocketDidFail調用...!即使我也嘗試傳遞服務器IP,但隨後也調用了turnSocketDidFail方法。那麼現在我應該通過什麼「SetProxyCandidates」? – Matrix 2011-06-14 09:24:12

+0

當我在[setProxyCandidates:servername]中傳遞服務器名稱時: SEND: Matrix 2011-06-14 10:18:39

1

我最終不得不自定義TURNSocket類以滿足我的特定需求,以便能夠將文件從iOS設備傳輸到其他設備。如果有代理服務器可用,那麼TURNSocket類可以滿足需要。但是,如果這是代理服務器可能無法使用的直接連接,那麼需要做一些額外的工作來設置設備,使其能夠連接到另一臺設備並直接傳輸文件。

我能夠使用目前形式的TURNSocket接收一個文件,只做一個小修改。由於目前的代碼,id和sid被分配了相同的值,這不能保證收到的節會爲id和sid具有相同的唯一標識符值。

+0

edenwaith,能否請你分享如何使用TurnSocket傳輸文件。我一直在'套接字確實失敗'。 – Karun 2014-03-25 13:58:21

+0

@edenwaith能否請您分享您如何使用TurnSocket傳輸文件。我一直在'插座確實失敗' – Nil 2015-10-23 13:52:50

+0

對不起,我無法再訪問原始代碼,所以我無法分享它。 – edenwaith 2017-03-27 02:28:06

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. 
+0

我收到以下錯誤。你能幫我麼?什麼是真正的問題? – 2014-10-07 07:17:43

+0

看起來像某處你錯過了一些stanza.Have你正確配置XMPPSIFileTransfer文件? – 2014-10-08 06:11:18

+0

我不確定是否配置了XMPPSIFileTransfer文件。你能告訴我需要爲XMPPSIFileTransfer文件做什麼配置嗎?我已經設置了xmpp.proxy.externalip,這是我的域名Open Fire服務器可以嗎? – 2014-10-08 06:26:43