android – 无法使用任何提供的主机建立套接字

前端之家收集整理的这篇文章主要介绍了android – 无法使用任何提供的主机建立套接字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在努力与android中的文件传输.我正在使用smack 4.1连接到openfire服务器.

我的问题是:
当我使用Spark来Spark文件传输时,它工作正常.但是当我将文件从Spark传输到AndroidAndroid到Android时,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代码是:

我使用ServiceDiscoveryManager和ProviderManager作为:

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());

并且,我还注册了一个谈判员:

FileTransferNegotiator fileTransferNegotiator = FileTransferNegotiator.getInstanceFor(xmppTcpConnection);

另外我在spark调试器中注意到:当spark to spark transfer时,会出现相同的消息,即无法与任何提供的主机建立套接字,但随后Spark会协商流和文件被转移.

但是当从spark转移到android时,iq从android设备收到相同的错误并且协商是由spark启动但是文件没有收到我的结尾.

任何人都可以指导我正确的方式.

谢谢.

更新:

       Iq Sent : 

    

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

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

 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'
最佳答案
我得到了解决方案.问题在于smack sdk.

Smack在文件传输实现中有一些错误:在我的情况下,发起者提供了字节流和ibb方法,响应者接受两种(这是错误的)方法.

(参考:@vitalyster在这里回答Getting ExecutionException on receiving file using asmack in Android)

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

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

现在文件传输工作正常.

感谢大家.

猜你在找的Android相关文章