【发布时间】:2015-10-01 10:12:45
【问题描述】:
目前我正在使用新的 Smack 4.1,它提供对 android 的全面支持。发送和接收消息没有问题,工作正常。但是现在,我被困在发送和接收文件上。例如:
发送文件
public void sendFile(String fileName,String to){
if(transferManager==null) {
transferManager = FileTransferManager.getInstanceFor(mConnection);
}
OutgoingFileTransfer transfer = transferManager.createOutgoingFileTransfer(to);
try {
transfer.sendFile(new File(fileName), "This is a Test!");
} catch (SmackException e) {
e.printStackTrace();
}
}
接收文件
public void setReceiveFileListener(){
if(transferManager==null) {
transferManager = FileTransferManager.getInstanceFor(mConnection);
}
transferManager.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(FileTransferRequest request) {
IncomingFileTransfer transfer = request.accept();
try {
File file = new File(Environment.getExternalStorageDirectory() + File.separator +"TEST"+File.separator+ "new.txt");
transfer.recieveFile(file);
} catch (SmackException | IOException e) {
e.printStackTrace();
}
}
});
}
在这种情况下,我只是发送一个文本文件,并希望将其保存为 sd 卡中的新文本文件,名称为“new.txt”。问题不在于文件本身,文件存在。此外,接收者 ID 是正确的,就像 "user@host.com/Smack" 。那是我可以成功发送正常消息的同一接收器。
我从 Smack 得到的错误代码:
错误 503 - 服务不可用
这个错误响应是我在发送文件后直接从 smack 得到的,似乎文件没有传输,因为接收者监听器什么也没显示(我在发送和接收都做了日志),但监听器肯定是注册的。 但我完全确定,服务器支持文件传输,它在他们的网站 www.coderollers.com 上声明。我在 SO 和 Smack 开发者社区中阅读了很多关于这里的问题。没有任何帮助,所以我的问题是:
- 此问题的原因可能是什么?
- 可能是因为我必须更改端口?
- 如何在 smack 中更改现有连接的端口?
- 文件传输的任何替代方案?
我的正常端口是 5222,可以正常发送消息。我希望有人能成功并能引导我走向正确的方向....感谢您的帮助!
解决方案
对于所有感兴趣的人:Devendra Singhs 的答案是正确的,我自己做了一点注释。使用哪种资源似乎很重要。从手机到手机,你必须使用“mobile”。无论是“Smack”还是任何其他资源标识符都可以在这里使用。所以像这样正确初始化OutgoingFileTransfer很重要:
OutgoingFileTransfer oft = ftm1.createOutgoingFileTransfer
(XmppStringUtils.completeJidFrom(USER, SERV, "mobile"));//important resource "mobile"
【问题讨论】:
-
您找到解决方案了吗? @Opitaetuchs
-
不,很遗憾没有。我去通过我自己的服务器传输我的文件......我猜这个错误是由服务器端的不同实现引起的。并非所有服务器都支持文件传输。我认为您必须查看您使用的服务器的功能..
标签: android file-transfer smack