菜鸟教程小白 发表于 2022-12-12 18:55:52

ios - 使用 XMPPFramework 和 XMPPSiFileTransfer 在 iOS 中进行文件传输


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

<p>当我通过调用方法initialFileTransferTo 发送请求时,SiFileTranfer 生成以下XML:</p>

<pre><code>&lt;iq type=&#34;set&#34; id=&#34;8FF7E518-E518-4A98-B122-914A8345C638&#34; to=&#34;[email protected]/Spark 2.6.3&#34; from=&#34;[email protected]/b79f10d5&#34;&gt;&lt;si xmlns=&#34;http://jabber.org/protocol/si&#34; id=&#34;967DAA7A-F159-44D8-AD31-7C532AB459AD&#34; mime-type=&#34;image/png&#34; profile=&#34;http://jabber.org/protocol/si/profile/file-transfer&#34;&gt;&lt;file xmlns=&#34;http://jabber.org/protocol/si/profile/file-transfer&#34; name=&#34;photoB29D9F41-EC41-41C8-AF6D-EA5E23FF906E.png&#34; size=&#34;740&#34;/&gt;&lt;feature xmlns=&#34;http://jabber.org/protocol/feature-neg&#34;&gt;&lt;x xmlns=&#34;jabber:x:data&#34; type=&#34;form&#34;&gt;&lt;field var=&#34;stream-method&#34; type=&#34;list-single&#34;&gt;&lt;option&gt;&lt;value&gt;http://jabber.org/protocol/bytestreams&lt;/value&gt;&lt;/option&gt;&lt;/field&gt;&lt;/x&gt;&lt;/feature&gt;&lt;/si&gt;&lt;/iq&gt;
</code></pre>

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

<pre><code>&lt;iq xmlns=&#34;jabber:client&#34; id=&#34;8FF7E518-E518-4A98-B122-914A8345C638&#34; to=&#34;[email protected]/b79f10d5&#34; from=&#34;[email protected]/Spark 2.6.3&#34; type=&#34;result&#34;&gt;&lt;si xmlns=&#34;http://jabber.org/protocol/si&#34;&gt;&lt;feature xmlns=&#34;http://jabber.org/protocol/feature-neg&#34;&gt;&lt;x xmlns=&#34;jabber:x:data&#34; type=&#34;submit&#34;&gt;&lt;field var=&#34;stream-method&#34;&gt;&lt;value&gt;http://jabber.org/protocol/bytestreams&lt;/value&gt;&lt;/field&gt;&lt;/x&gt;&lt;/feature&gt;&lt;/si&gt;&lt;/iq&gt;
</code></pre>

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

<pre><code>&lt;iq type=&#34;get&#34; id=&#34;12A7231B-D50A-469E-96B4-BD39278B77EF&#34; to=&#34;[email protected]/Spark 2.6.3&#34; from=&#34;[email protected]/b79f10d5&#34;&gt;&lt;query xmlns=&#34;http://jabber.org/protocol/disco#info&#34;/&gt;&lt;/iq&gt;
</code></pre>

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

<pre><code>- (id)initWithStream:(XMPPStream *)stream toJID:(XMPPJID *)aJid sid:(NSString *)sid
</code></pre>

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

<p>提前致谢。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您需要在 TURNSocket 类 XEP-0065 中进行一些修改。
试试这个<a href="https://github.com/adamk77/XMPPFramework" rel="noreferrer noopener nofollow">xmpp</a> </p>

<p>请参阅 <a href="https://github.com/robbiehanson/XMPPFramework/issues/215" rel="noreferrer noopener nofollow">link</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 XMPPFramework 和 XMPPSiFileTransfer 在 iOS 中进行文件传输,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21824894/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21824894/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 XMPPFramework 和 XMPPSiFileTransfer 在 iOS 中进行文件传输