J'essaie d'utiliser Smack pour transférer un fichier entre deux PC connectés sur le même serveur XMPP, mais j'ai une erreur bizarre.Le transfert de fichiers en utilisant Smack ne fonctionne pas
Pour résumer, le PC de destination a un FileTransferListener enregistré, comme ceci:
ftm.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(FileTransferRequest request) {
System.out.println("Request received");
if (true) // Check to see if the request should be accepted
{
// Accept it
System.out.println("Entering FTListener because of FTRequest");
IncomingFileTransfer transfer = request.accept();
String id = request.getDescription();
String path = savePoint + System.getProperty("file.separator") + request.getFileName();
try
{
System.out.println("Receiving...");
transfer.recieveFile(new File(path));
// Information put in HashMap for later retrieval
System.out.println("IM - putting in path (" + id + "," + path + ")");
paths.put(id, path);
} catch (XMPPException e) {
logger.error("Error getting the VM file: " + e.getMessage());
}
}
else
{
// Reject it
request.reject();
logger.info("VM file transfer rejected");
}
}
});
Le PC source utilise un OutgoingFileTransfer comme ceci:
try
{
String nick = destHost + "@" + this.conn.getServer() + "/Smack";
//destHost = destination host name, conn = XMPP connection
System.out.println("OFT to " + nick);
OutgoingFileTransfer.setResponseTimeout(10000);
OutgoingFileTransfer oft = ftm.createOutgoingFileTransfer(nick);
oft.sendFile(f, name); //f = file to send, name = a message
while (!oft.isDone())
{
if (oft.getStatus().equals(Status.error))
{
System.out.println("ERROR!!! " + oft.getError());
oft.cancel();
return false;
}
System.out.println(oft.getStatus());
System.out.println(oft.getProgress());
System.out.println("5 sec sleep");
Thread.sleep(5000);
}
if (oft.getStatus().equals(Status.complete))
{
System.out.println("Transfer done");
return true;
}
if (oft.getStatus().equals(Status.error))
System.out.println("Transfer failed: " + oft.getError());
return false;
} catch (XMPPException e) {
System.out.println("Error sending VM image file with the FTM : " + e.getMessage());
return false;
} catch (InterruptedException e) {
System.err.println("Error sleeping during OFT : " + e.getMessage());
return false;
}
Lorsque je tente d'envoyer un fichier, le le transfert de fichier sortant commence, et le PC de destination reçoit la demande, mais le PC source ne peut pas aller plus loin que la négociation de transfert.
Cela se voit dans la source sortie PC ...
Initial
0.0
2 sec sleep
Negotiating Transfer
0.0
2 sec sleep
Negotiating Stream
0.0
2 sec sleep
Transfer failed: null
Je suis vraiment ennuyé parce que je ne suis même pas un message d'erreur appropriée, donc je ne sais pas vraiment ce qui a mal tourné.
Est-ce que cela est déjà arrivé à quelqu'un d'autre?
je suis confronté au même problème dans smack 4.2.0. Je n'arrive pas à comprendre le travail. Je suis coincé sur Negotiating Stream. –