【问题标题】:FileTransfering in iOS with XMPPFramework and XMPPSiFileTransfer使用 XMPPFramework 和 XMPPSiFileTransfer 在 iOS 中进行文件传输
【发布时间】:2014-03-16 12:02:47
【问题描述】:

我在使用 iOS XMPPFramework(XMPPSiFileTransfer) 实现文件传输功能时遇到了困难。我尝试了不同的方法,最后我可以发送文件传输请求并且收件人收到了请求。但即使他们接受了似乎什么也没有转移。我尝试向 Spark/Windows 机器和 iMessage/Mac 中的收件人发送请求。在 XMPPSiFileTransfer 类本身中,我发现开发人员评论如下 "当我们是发起者时则相反。我们通过调用initialFileTransferTo:withData发送请求,然后等待iq结果,si命名空间为http://jabber.org/protocol/si,发送disco#info响应,打开SOCKS5 socket,然后等待连接的另一端开始传输。"

当我通过调用方法initiateFileTransferTo 发送请求时,SiFileTranfer 生成以下XML:

<iq type="set" id="8FF7E518-E518-4A98-B122-914A8345C638" to="rajesh.rajan@chat.speridian.com/Spark 2.6.3" from="sreelash.s@chat.speridian.com/b79f10d5"><si xmlns="http://jabber.org/protocol/si" id="967DAA7A-F159-44D8-AD31-7C532AB459AD" mime-type="image/png" profile="http://jabber.org/protocol/si/profile/file-transfer"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="photoB29D9F41-EC41-41C8-AF6D-EA5E23FF906E.png" size="740"/><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form"><field var="stream-method" type="list-single"><option><value>http://jabber.org/protocol/bytestreams</value></option></field></x></feature></si></iq>

然后我在didRecieveIq上得到了回复,如下开发者评论中提到的。

<iq xmlns="jabber:client" id="8FF7E518-E518-4A98-B122-914A8345C638" to="sreelash.s@chat.speridian.com/b79f10d5" from="rajesh.rajan@chat.speridian.com/Spark 2.6.3" type="result"><si xmlns="http://jabber.org/protocol/si"><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="submit"><field var="stream-method"><value>http://jabber.org/protocol/bytestreams</value></field></x></feature></si></iq>

当我在 didRecieveIq 中获得带有 si 命名空间的结果时,disco#info 发送如下

<iq type="get" id="12A7231B-D50A-469E-96B4-BD39278B77EF" to="rajesh.rajan@chat.speridian.com/Spark 2.6.3" from="sreelash.s@chat.speridian.com/b79f10d5"><query xmlns="http://jabber.org/protocol/disco#info"/></iq>

并尝试通过调用以下方法打开SOCKS5套接字

- (id)initWithStream:(XMPPStream *)stream toJID:(XMPPJID *)aJid sid:(NSString *)sid

但我收到“SOCKS5 连接失败!”信息。我无法确定问题所在。谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

    标签: ios objective-c xmppframework


    【解决方案1】:

    您需要在 TURNSocket 类 XEP-0065 中进行一些修改。 试试这个xmpp

    参考这个link

    【讨论】:

    • 感谢朋友的回复。实际上,我正在尝试使用您提到的相同链接。在旧的 sdk 中,TurnSocket 没有使用任何 sid。我刚刚复制了新的 TurnSocket 框架并尝试了它不起作用。这就是为什么我感到困惑。你做了这个工作吗?
    • 是的,我遇到了同样的错误。我刚刚将更新的 TurnSocket 类复制到我的项目中并尝试了。它不适合我。你有没有得到这个工作?
    • 是的,我遇到了同样的错误。我刚刚将更新的 TurnSocket 类复制到我的项目中并尝试了。它不适合我。你有没有得到这个工作?即使套接字连接失败,也找不到失败的原因。它只是触发 TurnSocket 对象作为参数获取的套接字故障委托。你有什么想法来调试这个案例。
    • 感谢朋友的快速回复。在这篇文章中,没有使用 IQ 消息。但是我在代码中发现了一个问题 [TURNSocket setProxyCandidates:[[NSArray alloc] initWithObjects:xmppStream.hostName, nil]];这里的 xmppStream.hostName 似乎为零,所以我将域名硬编码为测试的一部分,即使那个时候它也不起作用。自上周以来,我找不到任何用于文件传输的工作代码。你还有什么想法吗?
    猜你喜欢
    • 2013-12-04
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多