iPhone SDK中的XMPP发送/接收文件…?

| 如何使用XMPP框架在iPhone SDK中发送/接收文件? 目前我正在使用
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>`
任何帮助或建议将不胜感激。     
已邀请:
        首先,使用可能用于代理的一系列可能的服务器调用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 \”,然后搜索“ 6”来查找委托被调用的位置,从而弄清楚了这一点。这使我回到TURNSocket.h,该文件已记录了协议以供委托人实施。     
        我最终不得不自定义TURNSocket类以满足我的特定需求,以便能够将文件从我的iOS设备传输到另一台设备。如果有可用的代理服务器,则TURNSocket类可以满足您的需要。但是,如果这是代理服务器可能不可用的直接连接,则需要进行一些额外的工作来将设备设置为能够连接到另一台设备并直接传输文件。 我可以使用TURNSocket以当前形式接收到一个文件,而只需进行一些修改。就目前的代码而言,为id和sid分配了相同的值,这不能保证所接收的节对于id和sid都具有相同的唯一标识符值。     
        您应该使用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.
    

要回复问题请先登录注册