【发布时间】:2018-08-02 21:11:16
【问题描述】:
我正在使用 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):
D/SMACK: SENT (1):
在 ejabberd 配置文件中,我已成功启用模块“mod_proxy65”
我能想到的一个原因是,它可能是由于接收器改变了连续存在而发生的,这改变了它的资源。 虽然我在 Roster 的 presentChanged() 方法中跟踪存在,但仍然没有成功。我想知道 smack 中是否有任何方法可以使用静态资源连接到服务器?
还有一点,有没有 HTTP_FILE_UPLOAD (XEP-0363) 的示例,我在 smacks 官方文档中找不到。
【问题讨论】:
标签: android xmpp ejabberd smack