powered by Jive Software

File transfer question

I use openfire+smack,

When I using smack to transfer file. I got a error in file sender. And in this time, I find the sender will lost connection from openfire console.

the receiver:

final Thread thread = new Thread() {

@Override

public void run() {

if (!file.exists()) {

Log.i(“have no file”, file.getPath());

File dir = new File(BaseApplication.FILE_PATH

  • File.separator + userimei

  • File.separator);

if (!dir.exists()) {

dir.mkdirs();

}

try {

file.createNewFile();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

try {

transfer.recieveFile(file);

} catch (SmackException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

double percents = 0.0;

double pr=0;

while (!transfer.getStatus().equals(Status.complete)) {

if (transfer.getStatus().equals(Status.error)) {

Log.e(“error”,

"ERROR!!! " + transfer.getError());

transfer.cancel();

try {

transfer.recieveFile(file);

} catch (SmackException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

if(pr!=0&&pr==transfer.getProgress())

{

transfer.cancel();

break;

}

pr=transfer.getProgress();

Log.i(“pr”, “” + pr);

if (transfer.getStatus().equals(

Status.in_progress)) {

percents = ((int) (transfer.getProgress() * 10000)) / 100.0;

pr=transfer.getProgress();

Log.i("Transfer status is: ",

“” + transfer.getStatus());

Log.i(request.getFileName(), “” + percents);

// fs.currentSize = currentLength;

fs.percent = (int) percents;

}

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

if (transfer.isDone()) {

Log.i(“info”, “Done+status:” + transfer.getStatus());

Log.i(“info”,

“Done+process:” + transfer.getProgress());

}

}

};

the sender:

try {

outgoingFileTransfer.sendFile(insfile, fileid);

Log.i(“fileid”, fileid);

while (!outgoingFileTransfer.isDone()) {

if (outgoingFileTransfer.getStatus().equals(

FileTransfer.Status.error)) {

Log.e(tag, “send failed”);

} else {

Log.i(tag, “status:” + outgoingFileTransfer.getStatus()

  • “|progress:” + outgoingFileTransfer.getProgress());

}

Thread.sleep(1000);

}

} catch (SmackException e) {

// TODO Auto-generated catch block

e.printStackTrace();

Log.i(tag, “文件发送失败”);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

please help me.