You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Ghislain Gadbois <gh...@bell.ca> on 2006/03/13 20:29:02 UTC
[Net]: FTPClient.abort problem
Hi,
I'm using Jakarta Commons Net's FTPClient to do FTP transfers. I use version 1.4.1 on J2SDK 1.4.2_11.
I'm trying to abort an FTP transfer in a separate thread.
What happens is:
1- The thread that is downloading the file is not interrupted so the file is all downloaded
2- Since the download thread is not interrupted, the responses are not handled properly:
* The thread that is calling abort() gets a 426 - transfer aborted response
* The thread that is downloading the file get 226 ABOR command succesful
Following this message is a sample program to reproduce the problem and a sample of this program's output...
Is there something that I'm doing wrong?
What would be required to solve the problem?
Thanks a lot for your help!
Ghis
---------- Sample code -------------
import java.io.FileOutputStream;
import org.apache.commons.net.ProtocolCommandEvent;
import org.apache.commons.net.ProtocolCommandListener;
import org.apache.commons.net.ftp.FTPClient;
public class TestsNetCommons
{
public static void main(String[] pasArgs)
{
final Object oMonitor = new Object();
FTPClient oFtp = null;
Thread oThread;
ProtocolCommandListener oListener = new ProtocolCommandListener()
{
public void protocolCommandSent(ProtocolCommandEvent poEvent)
{
String sMessage;
sMessage = poEvent.getMessage();
if(sMessage != null)
{
sMessage = sMessage.trim();
}
// Remove the password from the log files...
if(sMessage.startsWith("PASS "))
{
sMessage = sMessage.substring(0, 5) + "*****";
}
System.out.println("Client: " + sMessage);
}
public void protocolReplyReceived(ProtocolCommandEvent poEvent)
{
String sMessage;
sMessage = poEvent.getMessage();
if(sMessage != null)
{
sMessage = sMessage.trim();
}
System.out.println("Server: " + sMessage);
}
};
try
{
oFtp = new FTPClient();
oFtp.addProtocolCommandListener(oListener);
oFtp.connect("127.0.0.1");
if(oFtp.login("ftptest", "ftptest"))
{
final FTPClient oFtpClient = oFtp;
// Thread used to download a file...
oThread = new Thread()
{
public void run()
{
FileOutputStream oOut = null;
try
{
oOut = new FileOutputStream("C:\\bigfile.zip");
oFtpClient.retrieveFile("bigfile.zip", oOut);
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
if(oOut != null)
{
try
{
oOut.close();
}
catch(Exception ex)
{
// Don't care...
}
}
}
} // run };
oThread.start();
// Wait a little, then abort the transfer...
Thread.currentThread().sleep(1000);
oFtp.abort();
// Wait for the download thread to finish it's job
oThread.join();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
if(oFtp != null)
{
try
{
oFtp.logout();
oFtp.disconnect();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
}
}
------------- Sample output --------------------
Server: 220 localhost Microsoft FTP Service (Version 5.0).
Client: USER ftptest
Server: 331 Password required for ftptest.
Client: PASS *****
Server: 230 User ftptest logged in.
Client: PORT 127,0,0,1,10,174
Server: 200 PORT command successful.
Client: RETR bigfile.zip
Server: 150 Opening ASCII mode data connection for bigfile.zip(29716750 bytes).
Client: ABOR
Server: 426 Connection closed; transfer aborted.
Server: 226 ABOR command successful.
Client: QUIT
Server: 221
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org