无法与任何提供的主机建立套接字 [英] Could not establish socket with any provided host

查看:118
本文介绍了无法与任何提供的主机建立套接字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为Android中的文件传输而苦苦挣扎.我正在使用smack 4.1连接到openfire服务器.

I am struggling with file transfer in android.I am using smack 4.1 to connect to openfire server.

我的问题是: 当我使用Spark到Spark进行文件传输时,它工作正常.但是,当我将文件从 Spark传输到Android或从Android传输到Android 时,iq收到显示错误提供的主机" :

My problem is: When i am using Spark to Spark file transfer, it works fine.But when i transfer file from Spark to Android or Android to Android, The iq received showing error "Could not establish socket with any provided host" like this:

<iq id="018vq-231" to="sender@domain.com/Spark 2.6.3" from="receiver@domain.com/Smack" type="error">
  <error code="-1" 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>

我的接收代码是:

FileTransferManager fileTransferManager = FileTransferManager.getInstanceFor(xmppTcpConnection);

fileTransferManager .addFileTransferListener(new FileTransferListener() {
                                @Override
                                public void fileTransferRequest(final FileTransferRequest request) {

                  final IncomingFileTransfer transfer = request.accept();

                  File file = new File("Path/To/Save", transfer.getFileName());

                  transfer.recieveFile(file);

            }       
                            });

我的ProviderManager代码是:

My ProviderManager code is:

我将ServiceDiscoveryManager和ProviderManager用作:

I am using ServiceDiscoveryManager and ProviderManager as:

ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(AppConstant.xmppTcpConnection);
            sdm.addFeature("http://jabber.org/protocol/disco#info");
            sdm.addFeature("jabber:iq:privacy");
            sdm.addFeature("jabber.org/protocol/si");

ProviderManager.addIQProvider("query",
                "http://jabber.org/protocol/bytestreams", new BytestreamsProvider());

        ProviderManager.addIQProvider("query",
                "http://jabber.org/protocol/disco#items", new DiscoverItemsProvider());

        ProviderManager.addIQProvider("query",
                "http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());

        ProviderManager.addIQProvider("si","http://jabber.org/protocol/si",new StreamInitiationProvider());

and,iam还将谈判者注册为:

and , iam also registering a Negotiator as:

FileTransferNegotiator fileTransferNegotiator = FileTransferNegotiator.getInstanceFor(xmppTcpConnection);

我还在Spark调试器中指出:当Spark到Spark传输时,会出现相同的消息,即无法与任何提供的主机建立套接字,然后Spark协商流和文件.

Also i noted in spark debugger that: When spark to spark transfer, the same message occurs i.e. Could not establish socket with any provided host but then spark negotiate stream and file is transfered.

但是当从spark传输到android时,具有相同错误的iq从android设备接收到,并且协商是由spark启动的,但是在我端没有收到文件.

But while transfering from spark to android,The iq with same error received from android device and the negotiation is initiated by spark but file is not received at my end.

有人可以指导我正确的方法吗?

Can anyone please guide me the right way.

谢谢.

更新:

       Iq Sent : 

    <iq id="018vq-245" to="receiver@mydomain.com/Smack" from="sender@mydomain.com/Spark 2.6.3" type="set">
      <si xmlns="http://jabber.org/protocol/si" id="jsi_4357088093390871541" mime-type="image/jpeg" profile="http://jabber.org/protocol/si/profile/file-transfer">
        <file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="23janNetaji.jpg" size="63856">
          <desc>Sending</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>

    Received :

    <iq id="018vq-245" to="sender@mydomain.com/Spark 2.6.3" from="receiver@mydomain.com/Smack" 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>

    Sent :
    <iq id="018vq-246" to="receiver@mydomain.com/Smack" type="get">
      <query xmlns="http://jabber.org/protocol/disco#info"/>
    </iq>

    Received : 

    <iq id="018vq-246" to="sender@mydomain.com/Spark 2.6.3" from="receiver@mydomain.com/Smack" type="result">
      <query xmlns="http://jabber.org/protocol/disco#info">
        <identity category="client" name="Smack" type="pc"/>
        <feature var="http://jabber.org/protocol/commands"/>
        <feature var="http://jabber.org/protocol/xhtml-im"/>
        <feature var="jabber.org/protocol/si"/>
        <feature var="jabber:iq:privacy"/>
        <feature var="vcard-temp"/>
        <feature var="http://jabber.org/protocol/disco#items"/>
        <feature var="urn:xmpp:time"/>
        <feature var="jabber:iq:last"/>
        <feature var="jabber:x:data"/>
        <feature var="urn:xmpp:ping"/>
        <feature var="http://jabber.org/protocol/bytestreams"/>
        <feature var="http://jabber.org/protocol/ibb"/>
        <feature var="http://jabber.org/protocol/muc"/>
        <feature var="http://jabber.org/protocol/si"/>
        <feature var="http://jabber.org/protocol/xdata-validate"/>
        <feature var="jabber:iq:version"/>
        <feature var="http://jabber.org/protocol/xdata-layout"/>
        <feature var="http://jabber.org/protocol/si/profile/file-transfer"/>
        <feature var="urn:xmpp:receipts"/>
        <feature var="http://jabber.org/protocol/caps"/>
        <feature var="http://jabber.org/protocol/disco#info"/>
      </query>
    </iq>

    Sent :

    <iq id="018vq-247" to="mydomain.com" type="get">
      <query xmlns="http://jabber.org/protocol/disco#items"/>
    </iq>

    Received :

    <iq id="018vq-247" to="sender@mydomain.com/Spark 2.6.3" from="mydomain.com" type="result">
      <query xmlns="http://jabber.org/protocol/disco#items">
        <item jid="search.mydomain.com" name="User Search"/>
        <item jid="icq.mydomain.com" name="ICQ Transport"/>
        <item jid="relay.mydomain.com" name="JingleRelayNode"/>
        <item jid="facebook.mydomain.com" name="Facebook Transport"/>
        <item jid="updater.mydomain.com" name="Spark Updater"/>
        <item jid="sipark.mydomain.com" name="SIP Controller"/>
        <item jid="yahoo.mydomain.com" name="Yahoo! Transport"/>
        <item jid="rayo.mydomain.com" name="rayo"/>
        <item jid="pubsub.mydomain.com" name="Publish-Subscribe service"/>
        <item jid="manager.mydomain.com" name="Client Control Manager"/>
        <item jid="baveling.mydomain.com" name="Public Chatrooms"/>
        <item jid="msn.mydomain.com" name="MSN Transport"/>
        <item jid="conference.mydomain.com" name="Public Chatrooms"/>
        <item jid="proxy.mydomain.com" name="Socks 5 Bytestreams Proxy"/>
        <item jid="gtalk.mydomain.com" name="Google Talk Transport"/>
        <item jid="jitsi-videobridge.mydomain.com" name="JitsiVideobridge"/>
        <item jid="aim.mydomain.com" name="AIM Transport"/>
        <item jid="workgroup.mydomain.com" name="Fastpath"/>
        <item jid="xmpp.mydomain.com" name="XMPP Transport"/>
        <item jid="broadcast.mydomain.com" name="Broadcast service"/>
        <item jid="logger.mydomain.com" name="Remote Logger"/>
      </query>
    </iq>

    Sent :
    <iq id="018vq-248" to="proxy.mydomain.com" type="get">
      <query xmlns="http://jabber.org/protocol/disco#info"/>
    </iq>

    Received :

    <iq id="018vq-248" to="sender@mydomain.com/Spark 2.6.3" from="proxy.mydomain.com" type="result">
      <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>

    Sent :

    <iq id="018vq-249" to="proxy.mydomain.com" type="get">
      <query xmlns="http://jabber.org/protocol/bytestreams"/>
    </iq>

    Received :

    <iq id="018vq-249" to="sender@mydomain.com/Spark 2.6.3" from="proxy.mydomain.com" type="result">
      <query xmlns="http://jabber.org/protocol/bytestreams">
        <streamhost jid="proxy.mydomain.com" host="mydomain.com" port="7777"/>
      </query>
    </iq>

    Sent :

    <iq id="018vq-250" to="receiver@mydomain.com/Smack" type="set">
      <query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_4357088093390871541" mode="tcp">
        <streamhost jid="sender@mydomain.com/Spark 2.6.3" host="192.168.1.201" port="7777"/>
        <streamhost jid="proxy.mydomain.com" host="mydomain.com" port="7777"/>
      </query>
    </iq>

 Received :
    <iq id="018vq-250" to="sender@mydomain.com/Spark 2.6.3" from="receiver@mydomain.com/Smack" type="error">
      <error code="-1" 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>

    Sent :
    <iq id="018vq-251" to="receiver@mydomain.com/Smack" type="set">
      <open xmlns="http://jabber.org/protocol/ibb" block-size="4096" sid="jsi_4357088093390871541" stanza="iq"/>
    </iq>

在发送方接收到错误IQ之后,发送方再次将IQ发送给接收方以进行文件传输协商流,但是在此iq之后没有接收方接收到iq.

此外,我正在使用以下smack库:

Also, i am using following smack libs:

 compile 'org.igniterealtime.smack:smack-android:4.1.1'
 compile 'org.igniterealtime.smack:smack-core:4.1.1'
 compile 'org.igniterealtime.smack:smack-tcp:4.1.1'
 compile 'org.igniterealtime.smack:smack-extensions:4.1.1'

推荐答案

我找到了解决方案.问题出在smd SDK上.

I got the solution.The problem is with smack sdk.

Smack在文件传输实现中存在一些错误:在我的情况下,启动程序提供了字节流和ibb方法,响应程序同时接受了这两种方法(这是错误的).

Smack have some bugs in file transfer implementation: in my case initiator offered bytestreams and ibb methods, responder accept both (which is wrong) methods.

(参考:@vitalyster在这里上获取ExecutionException的答案在Android中使用asmack接收文件)

(Reference: answer by @vitalyster here Getting ExecutionException on receiving file using asmack in Android )

它只能接受一个. 因此,在创建FileNegotiator时,我只提供了一个流:

It should accept only one. So while creating FileNegotiator, i offered only one stream as:

FileTransferNegotiator fileTransferNegotiator = FileTransferNegotiator.getInstanceFor(xmppTcpConnection);
FileTransferNegotiator.IBB_ONLY = true; 

现在文件传输正常.

谢谢大家.

这篇关于无法与任何提供的主机建立套接字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆