Opi*_*chs 0 android file-transfer smack
目前我正在玩新的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();
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只是发送一个文本文件,并希望将其作为新文本文件保存在SD卡中作为"new.txt".问题不在于文件本身,文件存在.此外,接收者ID是正确的,就像"user@host.com/Smack".这是我可以成功发送正常消息的接收器.
错误503 - 服务不可用
这个错误反应我在发送文件后直接从smack获得并且它似乎没有传输文件,因为接收器监听器没有显示任何内容(我在两者上都发送了Logs,发送和接收),但是肯定会注册监听器.但我完全相信,文件传输由服务器支持,它在他们的网站www.coderollers.com上声明.我在SO和Smack开发者社区都读过很多关于这里的问题.什么都没有帮助,所以我的问题是:
我的正常端口是5222,可以正常发送消息.我希望有人能够开展工作并带领我走向正确的方向......感谢您的帮助!
对于所有感兴趣的人:Devendra Singhs的答案是正确的,我自己也有一点注意.似乎重要的是,使用哪种资源.从移动设备到移动设备,您必须使用"移动设备".Wether"Smack"或任何其他资源标识符都适用于此处.所以OutgoingFileTransfer正确初始化是很重要的:
OutgoingFileTransfer oft = ftm1.createOutgoingFileTransfer
(XmppStringUtils.completeJidFrom(USER, SERV, "mobile"));//important resource "mobile"
Run Code Online (Sandbox Code Playgroud)
经过深入研究,我得到了它.
FileTransferManager ftm1 = FileTransferManager.getInstanceFor(connection);
FileTransferManager ftm2 = FileTransferManager.getInstanceFor(connection2);
ftm2.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(FileTransferRequest request) {
IncomingFileTransfer ift = request.accept();
try {
InputStream is = ift.recieveFile();
ByteArrayOutputStream os = new ByteArrayOutputStream();
int nRead;
byte[] buf = new byte[1024];
while ((nRead = is.read(buf, 0, buf.length)) != -1) {
os.write(buf, 0, nRead);
}
os.flush();
dataReceived = os.toByteArray();
} catch (SmackException | IOException | XMPPErrorException e) {
e.printStackTrace();
}
if (Arrays.equals(dataToSend, dataReceived)) {
System.out.println("Received data matches send data. \\o/");
} else {
System.err.println("Recieved data DOES NOT match send data. :(");
}
}
});
OutgoingFileTransfer oft = ftm1.createOutgoingFileTransfer(XmppStringUtils.completeJidFrom(USER, SERV, "resourse"));
oft.sendStream(new ByteArrayInputStream(dataToSend), "hello.txt", dataToSend.length, "A greeting");
outerloop: while (!oft.isDone()) {
switch (oft.getStatus()) {
case error:
System.out.println("Filetransfer error: " + oft.getError());
break outerloop;
default:
System.out.println("Filetransfer status: " + oft.getStatus() + ". Progress: " + oft.getProgress());
break;
}
Thread.sleep(1000);
}
connection.disconnect();
connection2.disconnect();
Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
一个连接正在发送文件而另一个连接正在接收这是工作代码.
| 归档时间: |
|
| 查看次数: |
2525 次 |
| 最近记录: |