XMPP FileTransfer – 为什么字节stream协议失败?

我的问题:我正在通过XMPP在Android和iOS上将文件传输到Spark客户端(Spark 2.6.3)。 我已经成功完成了这个android(由于漂亮的库),但还没有在iOS上成功。 但是,在这两个设备上,我已经注意到通过字节stream传输失败…

<error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" xml:lang="en">Could not establish socket with any provided host</text></error> 

在Android的转让完成诉诸ibb …

 <iq id="DK1IO-19" to="myUsername@beta.myCompany.co.uk/Spark 2.6.3" type="set"><open xmlns="http://jabber.org/protocol/ibb" block-size="4096" sid="jsi_4740809287923906297" stanza="iq"/></iq> 

此外,在Android上,当我从Spark发送文件到我的Android应用程序,似乎通过字节stream正常工作。

因此,在iOS上,我必须自己编写ibb连接,但是为什么字节stream会失败呢?

完整日志(Android应用程序):

 05-15 13:42:04.023: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq id="DK1IO-9" to="myUsername@beta.myCompany.co.uk/123" from="friendsUsername@beta.myCompany.co.uk/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><value>http://jabber.org/protocol/ibb</value></field></x></feature></si></iq> 05-15 13:42:04.040: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-10" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.060: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq id="DK1IO-10" to="myUsername@beta.myCompany.co.uk/123" type="result" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client" name="Smack" type="pc"/><feature var="http://jabber.org/protocol/xhtml-im"/><feature var="http://jabber.org/protocol/muc"/><feature var="http://jabber.org/protocol/bytestreams"/><feature var="http://jabber.org/protocol/commands"/><feature var="http://jabber.org/protocol/si/profile/file-transfer"/><feature var="http://jabber.org/protocol/si"/><feature var="http://jabber.org/protocol/ibb"/></query></iq> 05-15 13:42:04.080: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-11" to="beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#items"></query></iq> 05-15 13:42:04.090: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-11" from="beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/123"><query xmlns="http://jabber.org/protocol/disco#items"><item jid="pubsub.beta.myCompany.co.uk" name="Publish-Subscribe service"/><item jid="broadcast.beta.myCompany.co.uk" name="Broadcast service"/><item jid="search.beta.myCompany.co.uk" name="User Search"/><item jid="conference.beta.myCompany.co.uk" name="Public Chatrooms"/><item jid="proxy.beta.myCompany.co.uk" name="Socks 5 Bytestreams Proxy"/></query></iq> 05-15 13:42:04.100: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-12" to="pubsub.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.110: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq id="DK1IO-10" to="myUsername@beta.myCompany.co.uk/123" type="result" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client" name="Smack" type="pc"/><feature var="http://www.xmpp.org/extensions/xep-0166.html#ns"/><feature var="urn:xmpp:tmp:jingle"/></query></iq> 05-15 13:42:04.130: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-12" from="pubsub.beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="pubsub" name="Publish-Subscribe service" type="service"/><feature var="http://jabber.org/protocol/pubsub"/><feature var="http://jabber.org/protocol/pubsub#collections"/><feature var="http://jabber.org/protocol/pubsub#config-node"/><feature var="http://jabber.org/protocol/pubsub#create-and-configure"/><feature var="http://jabber.org/protocol/pubsub#create-nodes"/><feature var="http://jabber.org/protocol/pubsub#delete-nodes"/><feature var="http://jabber.org/protocol/pubsub#get-pending"/><feature var="http://jabber.org/protocol/pubsub#instant-nodes"/><feature var="http://jabber.org/protocol/pubsub#item-ids"/><feature var="http://jabber.org/protocol/pubsub#meta-data"/><feature var="http://jabber.org/protocol/pubsub#modify-affiliations"/><feature var="http://jabber.org/protocol/pubsub#manage-subscriptions"/><feature var="http://jabber.org/protocol/pubsub#multi-subscribe"/><feature var="http://jabber.org/protocol/pubsub#outcast-affiliation"/><feature var="http://jabber.org/protocol/pubsub#persistent-items"/><feature var="http://jabber.org/protocol/pubsub#presence-notifications"/><feature var="http://jabber.org/protocol/pubsub#publish"/><feature var="http://jabber.org/protocol/pubsub#publisher-affiliation"/><feature var="http://jabber.org/protocol/pubsub#purge-nodes"/><feature var="http://jabber.org/protocol/pubsub#retract-items"/><feature var="http://jabber.org/protocol/pubsub#retrieve-affiliations"/><feature var="http://jabber.org/protocol/pubsub#retrieve-default"/><feature var="http://jabber.org/protocol/pubsub#retrieve-items"/><feature var="http://jabber.org/protocol/pubsub#retrieve-subscriptions"/><feature var="http://jabber.org/protocol/pubsub#subscribe"/><feature var="http://jabber.org/protocol/pubsub#subscription-options"/><feature var="http://jabber.org/protocol/pubsub#default_access_model_open"/><feature var="http://jabber.org/protocol/disco#info"/></query></iq> 05-15 13:42:04.160: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-13" to="broadcast.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.170: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-13" from="broadcast.beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="component" type="generic" name="Broadcast service"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/disco#items"/></query></iq> 05-15 13:42:04.190: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-14" to="search.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.200: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-14" from="search.beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="directory" type="user" name="User Search"/><feature var="jabber:iq:search"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/rsm"/></query></iq> 05-15 13:42:04.210: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-15" to="conference.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.230: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-15" from="conference.beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="conference" name="Public Chatrooms" type="text"/><identity category="directory" name="Public Chatroom Search" type="chatroom"/><feature var="http://jabber.org/protocol/muc"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/disco#items"/><feature var="jabber:iq:search"/><feature var="http://jabber.org/protocol/rsm"/></query></iq> 05-15 13:42:04.240: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-16" to="proxy.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.250: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-16" from="proxy.beta.myCompany.co.uk" to="myUsername@beta.t 05-15 13:42:04.250: I/System.out(523): 01:42:04 PM RCV (1093423288): xttools.co.uk/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="proxy" name="SOCKS5 Bytestreams Service" type="bytestreams"/><feature var="http://jabber.org/protocol/bytestreams"/><feature var="http://jabber.org/protocol/disco#info"/></query></iq> 05-15 13:42:04.330: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-17" to="proxy.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/bytestreams"/></iq> 05-15 13:42:04.341: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-17" from="proxy.beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/123"><query xmlns="http://jabber.org/protocol/bytestreams"><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 05-15 13:42:04.350: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-18" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="set"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_4740809287923906297" mode = "tcp"><streamhost jid="myUsername@beta.myCompany.co.uk/123" host="127.0.0.1" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 05-15 13:42:04.400: D/dalvikvm(523): GC_CONCURRENT freed 361K, 5% free 9330K/9799K, paused 5ms+4ms 05-15 13:42:09.412: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-18" to="myUsername@beta.myCompany.co.uk/123" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="error"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_4740809287923906297" mode="tcp"><streamhost jid="myUsername@beta.myCompany.co.uk/123" host="127.0.0.1" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query><error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" xml:lang="en">Could not establish socket with any provided host</text></error></iq> 05-15 13:42:09.430: I/System.out(523): 01:42:09 PM SENT (1093423288): <iq id="DK1IO-19" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="set"><open xmlns="http://jabber.org/protocol/ibb" block-size="4096" sid="jsi_4740809287923906297" stanza="iq"/></iq> 05-15 13:42:09.451: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-19" to="myUsername@beta.myCompany.co.uk/123" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="result"/> 05-15 13:42:09.470: I/System.out(523): 01:42:09 PM SENT (1093423288): <iq id="DK1IO-20" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="set"><data xmlns="http://jabber.org/protocol/ibb" seq="0" sid="jsi_4740809287923906297">SGVsbG8sIEFuZHkh</data></iq> 05-15 13:42:09.480: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-20" to="myUsername@beta.myCompany.co.uk/123" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="result"/> 05-15 13:42:09.490: I/System.out(523): 01:42:09 PM SENT (1093423288): <iq id="DK1IO-21" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="set"><close xmlns="http://jabber.org/protocol/ibb" sid="jsi_4740809287923906297"/></iq> 05-15 13:42:09.500: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-21" to="myUsername@beta.myCompany.co.uk/123" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="result"/> 

完整日志(iOS应用):

 2012-05-16 10:41:16.988 JabberClient[392:207] RECIEVED IN APP DELEGATE - <iq xmlns="jabber:client" id="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" to="myUsername@beta.myCompany.co.uk/844b40b3" from="friendsUsername@beta.myCompany.co.uk/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> 2012-05-16 10:41:16.989 JabberClient[392:207] Attempting XEP65 connection to friendsUsername@beta.myCompany.co.uk/Spark 2.6.3 2012-05-16 10:41:16.990 JabberClient[392:207] TURNSocket DELEGATE STARTING 2012-05-16 10:41:16.991 JabberClient[392:5307] SENT - <iq type="get" to="beta.myCompany.co.uk" id="24C8A655-1B23-4E49-B0D2-557B863C6EB4"><query xmlns="http://jabber.org/protocol/disco#items"/></iq> 2012-05-16 10:41:16.999 JabberClient[392:5307] RECIEVED IN TURN SOCKET - <iq xmlns="jabber:client" type="result" id="24C8A655-1B23-4E49-B0D2-557B863C6EB4" from="beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/844b40b3"><query xmlns="http://jabber.org/protocol/disco#items"><item jid="pubsub.beta.myCompany.co.uk" name="Publish-Subscribe service"/><item jid="broadcast.beta.myCompany.co.uk" name="Broadcast service"/><item jid="search.beta.myCompany.co.uk" name="User Search"/><item jid="conference.beta.myCompany.co.uk" name="Public Chatrooms"/><item jid="proxy.beta.myCompany.co.uk" name="Socks 5 Bytestreams Proxy"/></query></iq> 2012-05-16 10:41:17.000 JabberClient[392:5307] SENT - <iq type="get" to="proxy.beta.myCompany.co.uk" id="A8D03520-2200-4260-A150-910BC70F794A"><query xmlns="http://jabber.org/protocol/disco#info"/></iq> 2012-05-16 10:41:17.004 JabberClient[392:5007] RECIEVED IN TURN SOCKET - <iq xmlns="jabber:client" type="result" id="A8D03520-2200-4260-A150-910BC70F794A" from="proxy.beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/844b40b3"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="proxy" name="SOCKS5 Bytestreams Service" type="bytestreams"/><feature var="http://jabber.org/protocol/bytestreams"/><feature var="http://jabber.org/protocol/disco#info"/></query></iq> 2012-05-16 10:41:17.005 JabberClient[392:5007] SENT - <iq type="get" to="proxy.beta.myCompany.co.uk" id="50A73193-944D-402D-B2E4-EEACC537B23B"><query xmlns="http://jabber.org/protocol/bytestreams"/></iq> 2012-05-16 10:41:17.008 JabberClient[392:5007] RECIEVED IN TURNSOCKET - <iq xmlns="jabber:client" type="result" id="50A73193-944D-402D-B2E4-EEACC537B23B" from="proxy.beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/844b40b3"><query xmlns="http://jabber.org/protocol/bytestreams"><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 2012-05-16 10:41:17.009 JabberClient[392:5007] SENT - <iq type="set" from="myUsername@beta.myCompany.co.uk/844b40b3" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" id="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB"><query xmlns="http://jabber.org/protocol/bytestreams" sid="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" mode="tcp"><streamhost xmlns="http://jabber.org/protocol/bytestreams" jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 2012-05-16 10:41:27.027 JabberClient[392:540b] RECIEVED IN TURN SOCKET - <iq xmlns="jabber:client" id="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" to="myUsername@beta.myCompany.co.uk/844b40b3" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="error"><query xmlns="http://jabber.org/protocol/bytestreams" sid="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" mode="tcp"><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query><error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" lang="en">Could not establish socket with any provided host</text></error></iq> 2012-05-16 10:41:27.028 JabberClient[392:540b] TURN Connection failed! 

OpenFire XMPP设置 –

 xmpp.auth.anonymous - true xmpp.client.compression.policy - disabled xmpp.client.idle -1 xmpp.client.idle.ping - false xmpp.domain - beta.myCompany.co.uk xmpp.enabled - true xmpp.externalip - proxy.beta.myCompany.co.uk xmpp.offline.quota - 102400 xmpp.offline.type - bounce xmpp.proxy.enabled - true xmpp.proxy.port - 7777 xmpp.proxy.transfer.required - true xmpp.server.compression.policy - disabled xmpp.server.socket.active - true xmpp.session.conflict-limit - 0 xmpp.session.conflict.limit - 0 xmpp.socket.ssl.active - true 

5月19日更新:下面是一些来自Spark成功发送 Android的日志(而不是反之亦然)。 使用的streamhost不是代理! 但是,我还没有设法在iOS上复制这个,真的应该吗? 不应该代理工作?

 RCV (1079219752): <iq id="ktI51-43" to="myUsername@beta.myCompany.co.uk/123" type="set" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_1985730781887292843" mode="tcp"><streamhost jid="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" host="10.95.xxx.xx" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> SENT (1079219752): <iq id="ktI51-43" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="result"><query xmlns="http://jabber.org/protocol/bytestreams"><streamhost-used jid="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" /></query></iq> 

请注意,如果我尝试从Spark发送到我的iOS应用程序,则在使用非代理stream主机时,连接将被拒绝! (如本SOCKS协议第5版文件的第6点)。 在下面的代码中,Rep是5(但它应该是0)。

 UInt8 ver = [NSNumber extractUInt8FromData:data atOffset:0]; UInt8 rep = [NSNumber extractUInt8FromData:data atOffset:1]; 

主机文件:(注意:我已经用这个stackoverflow问题的x代替了一些数字)

 127.0.0.1 localhost 10.95.xxx.xxx intranet.myCompany.co.uk 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost 10.95.xxx.xxx beta.myCompany.co.uk 

Solutions Collecting From Web of "XMPP FileTransfer – 为什么字节stream协议失败?"

我在OpenFire属性中设置了错误的设置。 'xmpp.externalip'是错误的。 我需要使用'xmpp.proxy.enabledip'并将其设置为公共IP。

看起来你的服务器正在报告一个127.0.0.1或者localhost的steamhost(代理),这是不正确的。

我最近在openfire服务器上看到,有人configuration了/ etc / hosts来指定服务器名称为127.0.0.1,所以当它查找自己的名字时向客户端报告。

最简单的方法来检查这将是'平'和'平',看看它出现了什么IP地址。

例如,如果您的服务器名称是beta.myCompany.co.uk,您可以尝试(login到服务器时):

平安testing版beta.myCompany.co.uk

如果返回IP地址为127.0.0.1,请检查/ etc / hosts(或者如果在窗口中是C:\ Windows \ System32 \ drivers \ etc \ hosts),并确保beta和beta.myCompany.co.uk不存在或者如果他们在那里有适当的数据)。

是的,文件传输会有这个错误。 不要使用编译的库使用smack的源代码android调用amack / smack它会帮助你跟踪错误。 我确实使用了源代码。

https://github.com/rtreffer/smack/blob/master/source/org/jivesoftware/smack/XMPPConnection.java