XMPP SMACK 文件接收无法在 android 上运行

Posted

技术标签:

【中文标题】XMPP SMACK 文件接收无法在 android 上运行【英文标题】:XMPP SMACK file receiving not working on android 【发布时间】:2011-09-22 09:18:12 【问题描述】:

我无法接收从 SPARK 客户端传输的文件。 我正在使用 ASMACK jar 库,因此无法进入该库。

ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
    if (sdm == null)
        sdm = new ServiceDiscoveryManager(connection);
    sdm.addFeature("http://jabber.org/protocol/disco#info");
    sdm.addFeature("jabber:iq:privacy");
     

//  new ServiceDiscoveryManager(connection);
    FileTransferNegotiator.setServiceEnabled(connection, false);
    FileTransferManager manager = new FileTransferManager(connection);
    manager.addFileTransferListener(new FileTransferListener() 
        public void fileTransferRequest(FileTransferRequest request) 
            Log.d("", "allows file...");
            if (request != null) 
                // Accept it
                IncomingFileTransfer transfer = request.accept();
                try 

                   // String pathsd =    Environment.getExternalStorageDirectory().toString();

                    String path = "/sdcard/"+ request.getFileName();
                    transfer.recieveFile(new File(path));

                    // transfer.recieveFile(new
                    // File(request.getFileName()));
                     System.out.println("File " + request.getFileName() + "Received Successfully");
    //                      Log.d("", "rece: " +    request.getFileName());                     
    //                      Log.d("", "path: " + request.getFileName());
                    // InputStream input = transfer.recieveFile();
                 catch (XMPPException ex) 
                    Log.d("", "er: " + ex);
                
                else 
                Log.d("", "reject file...");
                request.reject();
            
        
    );

【问题讨论】:

你能发送文件吗我得到一个错误服务不可用 503 【参考方案1】:

不知道你的asmack是基于什么版本的Smack,但是Smack中有一个known issue with file transfer,asmack和Spark都是基于这个的。

【讨论】:

我正在使用 beem 项目 amsack 库,他们已经修补了版本。它工作正常,但文件传输没有发生......【参考方案2】:

Beems asmack 构建过程是well documented,并且源代码对所有人开放。

你的代码看起来不错,但你为什么要设置这个

FileTransferNegotiator.setServiceEnabled(connection, false);

假的?

XMPP 中的文件传输是一个相当复杂的话题。有多种方法(至少 4 种)可以将文件从一个资源获取到另一个资源。由于您没有提供更多详细信息,因此我只能为您提供有关如何调试此设备的一般设备:

Enable connection debug in smack,它将打印并记录所有进出的 XMPP 数据包。 跟踪与文件传输相关的 XMPP 节,并确保它们的行为符合 XEP 中的规定。这可能会提示您出了什么问题。

【讨论】:

以上是关于XMPP SMACK 文件接收无法在 android 上运行的主要内容,如果未能解决你的问题,请参考以下文章

使用 Smack 接收自定义 XMPP 节

无法发送和接收 XMPP 消息

如何为 xmpp 实现 smack

使用 Smack API (xmpp) 从 Java 回调 JavaFX

在 xmpp 中接收消息

如何在 xmpp smack 或 asmack 中将文件发送给离线用户?