我正在使用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)的任何示例,我在官方文档中找不到任何内容。
答案 0 :(得分:0)
在点燃实时论坛后,我发现我正在点击bug。
解决此错误的方法是强制带内字节流。
将FileTransferNegotiator.IBB_ONLY
设置为true
为我做了诀窍。
请查看FileTransferNegotiator课程中的第76行。