【问题标题】:How to use a TurnSocket (XEP-0065: SOCKS5 Bytestreams) connection? XEP-0096: SI File Transfer? [socket writeData]?如何使用 TurnSocket (XEP-0065: SOCKS5 Bytestreams) 连接? XEP-0096:SI 文件传输? [套接字写入数据]?
【发布时间】:2012-06-16 14:34:29
【问题描述】:

我正在尝试使用 XMPPFramework 和 OpenFire 在 iOS 上通过 XMPP 传输文件。我的代码基础来自以下tutorial。我有一个成功的 TurnSocket (XEP-0065: SOCKS5 Bytestreams) 连接,但我不知道如何使用它来发送数据。我有两个考虑因素,我都坚持:1. 调用 [socket writeData] 和 2. 使用 'XEP-0096: SI File Transfer'。

可能的解决方案 1 - 调用 [socket writeData] 在我的 App 委托中,我有一个 didSucceed 方法。我可以这样调用 [socket writeData] ...

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

    NSLog(@"TURN Connection succeeded!");

    [socket writeData:myData withTimeout:60.0f tag:0]; 
    [turnSockets removeObject:sender];
}

6 月 14 日更新:这是正确的吗?如果是这样,其他用户如何读取数据?我已经尝试实施

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

但它永远不会被调用。如何确保它被调用?

可能的解决方案 2 - XEP-0096:SI 文件传输 我需要使用 XEP-0096:SI 文件传输吗?如果是这样,我如何在需要形成的 XEP-0096 XML 中使用我的成功连接? XEP-0096 docs 暗示有一个“哈希”属性,但我不知道这是从哪里来的。

例如

<iq type='set' id='offer1' to='receiver@jabber.org/resource'>
  <si xmlns='http://jabber.org/protocol/si' 
      id='a0'
      mime-type='text/plain'
      profile='http://jabber.org/protocol/si/profile/file-transfer'>
    <file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
          name='test.txt'
          size='1022'
          hash='552da749930852c69ae5d2141d3766b1'
          date='1969-07-21T02:56:15Z'>
      <desc>This is a test. If this were a real file...</desc>
    </file>
    <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>
          <option><value>http://jabber.org/protocol/ibb</value></option>
        </field>
      </x>
    </feature>
  </si>
</iq>

【问题讨论】:

  • hash是文件内容的MD5。请参阅 XEP-0096 的第 3 节。
  • 感谢您的回复。然而,即使我把散列放在那里,我也不太明白发送这个节将如何开始文件传输。我想我需要以某种方式使用套接字?
  • @AndyA,你最终能弄明白吗?如果是这样,您介意分享一下您是如何使用它的吗?
  • 我没弄明白,没有。恐怕我已经一年多没有从事这个项目了。

标签: xmpp file-transfer asyncsocket socks xmppframework


【解决方案1】:

对 FileTransfer 使用 XEP-0096 而不是 XEP-0065 它仅适用于 IOS,要成功传输,您需要接收器的当前资源 ID,如 user@jabber.com/2526318749013466431,以与代理 IP 建立连接和端口 jabber服务器的

【讨论】:

    猜你喜欢
    • 2012-07-17
    • 2012-05-05
    • 2012-08-22
    • 2012-01-06
    • 2017-03-13
    • 2012-09-02
    • 2012-04-29
    • 2021-07-19
    相关资源
    最近更新 更多