使用Smack 4.2.3进行文件传输会导致服务不可用错误

时间:2018-02-22 21:11:03

标签: android xmpp ejabberd smack

我正在使用smack 4.2.3开发XMPP客户端。在linux平台上使用ejabberd作为XMPP服务器。 使用以下代码发送文件:

public static void sendFile(String path, String description){
String sFqdn = currentUser.getFqdn();
if(sFqdn.equals(null)) return;
String node = XmppStringUtils.parseLocalpart(sFqdn);
String domain = XmppStringUtils.parseDomain(sFqdn);
String resource = XmppStringUtils.parseResource(sFqdn);

    try {
        EntityFullJid fqdn = entityFullFrom(node, domain, resource);
        OutgoingFileTransfer transfer = FileTransferManager.getInstanceFor(connection).createOutgoingFileTransfer(fqdn);
        transfer.sendFile(new File(path), description);
    } catch (SmackException e) {
        e.printStackTrace();
    } catch (XmppStringprepException e) {
        e.printStackTrace();
    }

}

并接收:

if(fileTransferManager == null){
fileTransferManager = FileTransferManager.getInstanceFor(connection);
fileTransferManager.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(final FileTransferRequest request) {
// Accept it

            IncomingFileTransfer transfer = request.accept();
            try {
                transfer.recieveFile(new File(dir_path+request.getFileName()));
            } catch (SmackException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
                }
            });
            }
        });
    }

有时它会在用户之间成功发送文件,但大部分时间我都会收到此XMPP错误:

D / SMACK:RECV(1):< iq xml:lang ='en'to ='bob @ domain / 122573506394002920791746'from ='tom @ domain / 126676407739368221821682'type ='set'id ='VdzEA- 77'>< si xmlns ='http:// jabber .org / protocol / si'id ='jsi_8874207690796615693'mime-type ='image / png'profile ='http:// jabber .org / protocol / si / profile / file-transfer'>< desc>测试文件< / 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>< / iq>< r xmlns ='urn:xmpp:sm:3'/>

D / SMACK:SENT(1):< iq to ='tom @ domain / 126676407739368221821682'id ='VdzEA-77'type ='error'>< error type ='cancel'>< service-unavailable xmlns ='urn:ietf:params:xml:ns:xmpp-stanzas'/>< / error>< / iq>

在ejabberd配置文件中,我已成功启用模块“mod_proxy65”

我能想到的一个原因是,由于接收器改变了持续存在而改变其资源可能会发生这种情况。 虽然我在Roster's presenceChanged()方法中保持存在的轨迹但仍然没有成功。我想知道是否有任何方法可以通过静态资源连接到服务器?

还有一件事,是否有HTTP_FILE_UPLOAD(XEP-0363)的任何示例,我在官方文档中找不到任何内容。

1 个答案:

答案 0 :(得分:0)

在点燃实时论坛后,我发现我正在点击bug

解决此错误的方法是强制带内字节流。

FileTransferNegotiator.IBB_ONLY设置为true为我做了诀窍。

请查看FileTransferNegotiator课程中的第76行。