如何使用TurnSocket(XEP-0065:SOCKS5 Bytestreams)连接? XEP-0096:SI文件传输? [socket writeData]?

7
我正在尝试使用XMPPFramework和OpenFire在iOS上进行XMPP文件传输。我的代码基础来自以下tutorial。我已经成功建立了一个TurnSocket(XEP-0065: SOCKS5 Bytestreams)连接,但我不知道如何使用它来发送数据。我有两个考虑因素,都卡住了:1.调用[socket writeData]和2.使用“XEP-0096: SI File Transfer”。 可能的解决方案1 - 调用[socket writeData] 在我的应用程序委托中,我有一个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文档 暗示存在一个“哈希”属性,但我不知道这是从哪里来的。

例如。

<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节。 - Flow
感谢您的回复Flow。然而,即使我把哈希放在那里,我仍然不太明白发送这个块将如何开始文件传输。我想我需要以某种方式使用套接字? - Andy A
@AndyA,你最终能解决它了吗?如果可以的话,你介意分享一下你是如何让它工作的吗? - Ravindranath Akila
我没有想出来,很抱歉。我已经一年多没有参与这个项目了。 - Andy A
1个回答

1
使用XEP-0096代替XEP-0065进行文件传输,仅适用于iOS,为了成功传输,您需要接收者的当前资源ID,例如user@jabber.com/2526318749013466431,以便与Jabber服务器的代理IP和端口建立连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接