You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Kevin Dougan <ke...@hotmail.com> on 2009/06/02 13:14:09 UTC

Question about FTPClient.sendCommand()

Greetings!
 
I have been searching around a lot, trying to figure out how to properly use the FTPClient.sendCommand() API method, but to no avail! Perhaps someone here can answer my question very quickly...?

Basically, I want to implement a "dumb" FTP class who handles "batch processing". I thought I could just read lines from a file, and then pass them through to an FTP Server using the sendCommand() method, but it always replies with "command not understood".

Am I totally off track with what I want to do here? Am I using the API method incorrectly or for the wrong purpose?
 
I am trying to avoid parsing every command, doing a String compare on each word, and then trying to match it against a specific API method (storeFile(), retrieveFile(), etc.), depending on each String I parse...big, long IF blocks are ugly!

Thanks! 
Kevin 
KevinDougan@Hotmail.com 


_________________________________________________________________
Attention all humans. We are your photos. Free us.
http://go.microsoft.com/?linkid=9666046

Re: Question about FTPClient.sendCommand()

Posted by Steve Cole <sc...@camsbycbs.com>.
Most command line FTP clients can be scripted using a file. You can then use
the Runtime class to shell out and execute the FTP script. The problem is
you won't have an error handling process. Using the FTPClient class may not
provide the generic solution you wanted, but it will give you ability to
handle errors, perform tries or whatever exception handling you want.

----- Original Message ----- 
From: "Kevin Dougan" <ke...@hotmail.com>
To: <us...@commons.apache.org>
Sent: Tuesday, June 02, 2009 10:24 AM
Subject: RE: Question about FTPClient.sendCommand()



OK, I guess I can't take the simple approach after all...   :-(



Thanks for all the help in figuring this out, everyone!  :-)

Cheers!
Kevin
KevinDougan@Hotmail.com



> From: scole@camsbycbs.com
> To: user@commons.apache.org
> Subject: Re: Question about FTPClient.sendCommand()
> Date: Tue, 2 Jun 2009 10:21:13 -0400
>
> The sendCommand() does just that. It sends a command to the FTP server,
but
> you have to understand what a FTP command does.
>
> Some commands are simple. If you send the command FTPCommand.CWD along
with
> the directory name, the server will change directories.
>
> Some commands require a more complex series of execution, like
> FTPCommand.STOR, FTPCommand.RETR and FTPCommand.LIST.
>
> The short answer is you can't simply send a PUT command. PUT is a command
> many command line FTP clients understand, but the FTP server doesn't
> understand PUT. The FTP server undersatands the integer value 14. When you
> send command 14, the server waits for a properly formatted stream of data
> that is the actual file. The client must send the command 14, then send
the
> actual data.
>
> Here is what happens when you PUT (store) a file on the server...
>
> // this is the put methed in MyFTPClient.java class
> public boolean put()throws Throwable {
> boolean rv = true;
> if (binaryTransfer){
> ftpsClient.setFileType(FTP.BINARY_FILE_TYPE);
> }else{
> ftpsClient.setFileType(FTP.ASCII_FILE_TYPE);
> }
> if (passiveMode){
> ftpsClient.enterLocalPassiveMode();
> }else{
> ftpsClient.enterLocalActiveMode();
> }
> InputStream input;
> input = new FileInputStream(localFilename);
> ftpsClient.storeFile(remoteFilename, input);
> input.close();
>
> return rv;
> }
>
> // this is the storeFile methed in the FTPClient.java class
> public boolean storeFile(String remote, InputStream local)throws
> IOException{
> return __storeFile(FTPCommand.STOR, remote, local);
> }
>
> // this is the underlying _storeFile methed in the FTPClient.java class
> private boolean __storeFile(int command, String remote, InputStream
> local)throws IOException{
> OutputStream output;
> Socket socket;
> // tell server you want to STOR a file
> // the sendCommand method is called in the _openDataConnection_
> method
> if ((socket = _openDataConnection_(command, remote)) == null)
> return false;
> // FTPCommand.STOR sent and server is now waiting for file to get
> streamed to it
> output = new
> BufferedOutputStream(socket.getOutputStream(),getBufferSize());
> if (__fileType == ASCII_FILE_TYPE)
> output = new ToNetASCIIOutputStream(output);
> // Treat everything else as binary for now
> try{
> Util.copyStream(local, output,
> getBufferSize(),CopyStreamEvent.UNKNOWN_STREAM_SIZE, null,false);
> }catch (IOException e){
> try{
> socket.close();
> }catch (IOException f){}
> throw e;
> }
> output.close();
> socket.close();
> return completePendingCommand();
> }
>
> // the sendCommand method is actually called in this method
> protected Socket _openDataConnection_(int command, String arg) throws
> IOException {
> Socket socket;
> if (__dataConnectionMode != ACTIVE_LOCAL_DATA_CONNECTION_MODE &&
> __dataConnectionMode != PASSIVE_LOCAL_DATA_CONNECTION_MODE)
> return null;
>
> if (__dataConnectionMode == ACTIVE_LOCAL_DATA_CONNECTION_MODE) {
> ServerSocket server;
> server = _serverSocketFactory_.createServerSocket(0, 1,
> getLocalAddress());
> if (!FTPReply.isPositiveCompletion(port(getLocalAddress(),
> server.getLocalPort()))) {
> server.close();
> return null;
> }
> if ((__restartOffset > 0) && !restart(__restartOffset)) {
> server.close();
> return null;
> }
> if (!FTPReply.isPositivePreliminary(sendCommand(command, arg)))
> {
> server.close();
> return null;
> }
>
> // For now, let's just use the data timeout value for waiting
> for
> // the data connection. It may be desirable to let this be a
> // separately configurable value. In any case, we really want
> // to allow preventing the accept from blocking indefinitely.
> if (__dataTimeout >= 0)
> server.setSoTimeout(__dataTimeout);
> try {
> socket = server.accept();
> } finally {
> server.close();
> }
> }
> else
> { // We must be in PASSIVE_LOCAL_DATA_CONNECTION_MODE
>
> if (pasv() != FTPReply.ENTERING_PASSIVE_MODE)
> return null;
>
> __parsePassiveModeReply((String)
> _replyLines.get(_replyLines.size() - 1));
>
> socket = _socketFactory_.createSocket(__passiveHost,
> __passivePort);
> if ((__restartOffset > 0) && !restart(__restartOffset))
> {
> socket.close();
> return null;
> }
>
> if (!FTPReply.isPositivePreliminary(sendCommand(command, arg)))
> {
> socket.close();
> return null;
> }
> }
>
> if (__remoteVerificationEnabled && !verifyRemote(socket))
> {
> InetAddress host1, host2;
>
> host1 = socket.getInetAddress();
> host2 = getRemoteAddress();
>
> socket.close();
>
> throw new IOException(
> "Host attempting data connection " + host1.getHostAddress()
> +
> " is not same as server " + host2.getHostAddress());
> }
>
> if (__dataTimeout >= 0)
> socket.setSoTimeout(__dataTimeout);
>
> return socket;
> }
>
>
>
>
> ----- Original Message ----- 
> From: "Kevin Dougan" <ke...@hotmail.com>
> To: <us...@commons.apache.org>
> Sent: Tuesday, June 02, 2009 9:53 AM
> Subject: RE: Question about FTPClient.sendCommand()
>
>
>
>
>
> Yes, I saw that specific API method call, but I don't really want to
> implement a big set of IF THEN clauses in my code...then I just become an
> interpreter for the FTP specification.
>
>
>
> Maybe I should be asking a different question, like what is sendCommand()
> used for in the first place?
>
>
> Maybe it's not possible to do what I want to do, and I WILL have to
> String-compare everything I read in, and use an IF THEN block to call the
> various API methods, as I encounter different keywords (i.e. re-implement
> the wheel)...
>
>
> Thanks!
> Kevin
> KevinDougan@Hotmail.com
>
>
> > From: scole@camsbycbs.com
> > To: user@commons.apache.org
> > Subject: Re: Question about FTPClient.sendCommand()
> > Date: Tue, 2 Jun 2009 08:54:14 -0400
> >
> > The sendCommand method requires the command and args to be passed as two
> > separate variables.
> >
> > I think the bigger issue is that simpling sending a PUT command along
with
> > the filenames is not going to send the file to the server. Check out the
> > FTPClient.java source and look at the _storeFile method. You'll see
> > everything else that needs to be done to actually store a file.
> >
> > ----- Original Message ----- 
> > From: "Kevin Dougan" <ke...@hotmail.com>
> > To: <us...@commons.apache.org>
> > Sent: Tuesday, June 02, 2009 8:38 AM
> > Subject: RE: Question about FTPClient.sendCommand()
> >
> >
> >
> > Hi and thanks for your reply. I'll try and give an example to
> illustrate...
> >
> >
> >
> > Let's say there's a file that contains the following lines:
> >
> > CWD /home/sampleuser/
> >
> > PUT localfile.txt remotefile.txt
> >
> >
> > I am building a Java Class that will be "dumb", in the sense that it
will
> > just open the file (after connecting to the FTP Server using some other
> > properties), and issue the commands it finds in that file. The idea is
> that
> > the caller can dynamically build a file of commands, and the program
does
> > not have to parse them individually and decide what they are, the
program
> > can simply pass them along to the FTP Server.
> >
> >
> >
> > Therefore, I was thinking that I could use the FTPClient.sendCommand()
> > method to simple forward those commands, but it is not working.
> >
> >
> >
> > I do NOT want to do the following:
> >
> > ...read line from file: PUT localfile.txt remotefile.txt
> >
> > ...decide which API method to call: if (line.startsWith("PUT"))
> > client.storeFile(remoteFile, localFile); else if
> > (line.statrsWith("GET"))...etc, etc
> >
> >
> >
> > However, I am trying to do something more simple, like the following:
> >
> > ...read line from file: PUT localfile.txt remotefile.txt
> >
> > ...pass the command along
> >
> > ...read next line from file: : : :
> >
> > ...pass the command along: : : :
> >
> > ...etc, etc
> >
> >
> >
> > Thanks!
> > Kevin
> > KevinDougan@Hotmail.com
> >
> >
> > > From: scole@camsbycbs.com
> > > To: user@commons.apache.org
> > > Subject: Re: Question about FTPClient.sendCommand()
> > > Date: Tue, 2 Jun 2009 08:29:55 -0400
> > >
> > > I'm not sure if I understand what you're trying to accomplish. Are you
> > > sending FTP commands to the FTP server? If so, what command? Or are
you
> > > trying to send operating system shell script commands? The FTP server
is
> > > only going to accept commands it understands and supports, which is
not
> > the
> > > same as OS shell scripts.
> > >
> > > ----- Original Message ----- 
> > > From: "Kevin Dougan" <ke...@hotmail.com>
> > > To: <us...@commons.apache.org>
> > > Sent: Tuesday, June 02, 2009 7:14 AM
> > > Subject: Question about FTPClient.sendCommand()
> > >
> > >
> > >
> > > Greetings!
> > >
> > > I have been searching around a lot, trying to figure out how to
properly
> > use
> > > the FTPClient.sendCommand() API method, but to no avail! Perhaps
someone
> > > here can answer my question very quickly...?
> > >
> > > Basically, I want to implement a "dumb" FTP class who handles "batch
> > > processing". I thought I could just read lines from a file, and then
> pass
> > > them through to an FTP Server using the sendCommand() method, but it
> > always
> > > replies with "command not understood".
> > >
> > > Am I totally off track with what I want to do here? Am I using the API
> > > method incorrectly or for the wrong purpose?
> > >
> > > I am trying to avoid parsing every command, doing a String compare on
> each
> > > word, and then trying to match it against a specific API method
> > > (storeFile(), retrieveFile(), etc.), depending on each String I
> > parse...big,
> > > long IF blocks are ugly!
> > >
> > > Thanks!
> > > Kevin
> > > KevinDougan@Hotmail.com
> > >
> > >
> > > _________________________________________________________________
> > > Attention all humans. We are your photos. Free us.
> > > http://go.microsoft.com/?linkid=9666046
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > > For additional commands, e-mail: user-help@commons.apache.org
> > >
> >
> > _________________________________________________________________
> > We are your photos. Share us now with Windows Live Photos.
> > http://go.microsoft.com/?linkid=9666047
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > For additional commands, e-mail: user-help@commons.apache.org
> >
>
> _________________________________________________________________
> We are your photos. Share us now with Windows Live Photos.
> http://go.microsoft.com/?linkid=9666047
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>

_________________________________________________________________
Internet explorer 8 lets you browse the web faster.
http://go.microsoft.com/?linkid=9655582


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


RE: Question about FTPClient.sendCommand()

Posted by Kevin Dougan <ke...@hotmail.com>.
OK, I guess I can't take the simple approach after all...   :-(

 

Thanks for all the help in figuring this out, everyone!  :-)

Cheers! 
Kevin 
KevinDougan@Hotmail.com 


 
> From: scole@camsbycbs.com
> To: user@commons.apache.org
> Subject: Re: Question about FTPClient.sendCommand()
> Date: Tue, 2 Jun 2009 10:21:13 -0400
> 
> The sendCommand() does just that. It sends a command to the FTP server, but
> you have to understand what a FTP command does.
> 
> Some commands are simple. If you send the command FTPCommand.CWD along with
> the directory name, the server will change directories.
> 
> Some commands require a more complex series of execution, like
> FTPCommand.STOR, FTPCommand.RETR and FTPCommand.LIST.
> 
> The short answer is you can't simply send a PUT command. PUT is a command
> many command line FTP clients understand, but the FTP server doesn't
> understand PUT. The FTP server undersatands the integer value 14. When you
> send command 14, the server waits for a properly formatted stream of data
> that is the actual file. The client must send the command 14, then send the
> actual data.
> 
> Here is what happens when you PUT (store) a file on the server...
> 
> // this is the put methed in MyFTPClient.java class
> public boolean put()throws Throwable {
> boolean rv = true;
> if (binaryTransfer){
> ftpsClient.setFileType(FTP.BINARY_FILE_TYPE);
> }else{
> ftpsClient.setFileType(FTP.ASCII_FILE_TYPE);
> }
> if (passiveMode){
> ftpsClient.enterLocalPassiveMode();
> }else{
> ftpsClient.enterLocalActiveMode();
> }
> InputStream input;
> input = new FileInputStream(localFilename);
> ftpsClient.storeFile(remoteFilename, input);
> input.close();
> 
> return rv;
> }
> 
> // this is the storeFile methed in the FTPClient.java class
> public boolean storeFile(String remote, InputStream local)throws
> IOException{
> return __storeFile(FTPCommand.STOR, remote, local);
> }
> 
> // this is the underlying _storeFile methed in the FTPClient.java class
> private boolean __storeFile(int command, String remote, InputStream
> local)throws IOException{
> OutputStream output;
> Socket socket;
> // tell server you want to STOR a file
> // the sendCommand method is called in the _openDataConnection_
> method
> if ((socket = _openDataConnection_(command, remote)) == null)
> return false;
> // FTPCommand.STOR sent and server is now waiting for file to get
> streamed to it
> output = new
> BufferedOutputStream(socket.getOutputStream(),getBufferSize());
> if (__fileType == ASCII_FILE_TYPE)
> output = new ToNetASCIIOutputStream(output);
> // Treat everything else as binary for now
> try{
> Util.copyStream(local, output,
> getBufferSize(),CopyStreamEvent.UNKNOWN_STREAM_SIZE, null,false);
> }catch (IOException e){
> try{
> socket.close();
> }catch (IOException f){}
> throw e;
> }
> output.close();
> socket.close();
> return completePendingCommand();
> }
> 
> // the sendCommand method is actually called in this method
> protected Socket _openDataConnection_(int command, String arg) throws
> IOException {
> Socket socket;
> if (__dataConnectionMode != ACTIVE_LOCAL_DATA_CONNECTION_MODE &&
> __dataConnectionMode != PASSIVE_LOCAL_DATA_CONNECTION_MODE)
> return null;
> 
> if (__dataConnectionMode == ACTIVE_LOCAL_DATA_CONNECTION_MODE) {
> ServerSocket server;
> server = _serverSocketFactory_.createServerSocket(0, 1,
> getLocalAddress());
> if (!FTPReply.isPositiveCompletion(port(getLocalAddress(),
> server.getLocalPort()))) {
> server.close();
> return null;
> }
> if ((__restartOffset > 0) && !restart(__restartOffset)) {
> server.close();
> return null;
> }
> if (!FTPReply.isPositivePreliminary(sendCommand(command, arg)))
> {
> server.close();
> return null;
> }
> 
> // For now, let's just use the data timeout value for waiting
> for
> // the data connection. It may be desirable to let this be a
> // separately configurable value. In any case, we really want
> // to allow preventing the accept from blocking indefinitely.
> if (__dataTimeout >= 0)
> server.setSoTimeout(__dataTimeout);
> try {
> socket = server.accept();
> } finally {
> server.close();
> }
> }
> else
> { // We must be in PASSIVE_LOCAL_DATA_CONNECTION_MODE
> 
> if (pasv() != FTPReply.ENTERING_PASSIVE_MODE)
> return null;
> 
> __parsePassiveModeReply((String)
> _replyLines.get(_replyLines.size() - 1));
> 
> socket = _socketFactory_.createSocket(__passiveHost,
> __passivePort);
> if ((__restartOffset > 0) && !restart(__restartOffset))
> {
> socket.close();
> return null;
> }
> 
> if (!FTPReply.isPositivePreliminary(sendCommand(command, arg)))
> {
> socket.close();
> return null;
> }
> }
> 
> if (__remoteVerificationEnabled && !verifyRemote(socket))
> {
> InetAddress host1, host2;
> 
> host1 = socket.getInetAddress();
> host2 = getRemoteAddress();
> 
> socket.close();
> 
> throw new IOException(
> "Host attempting data connection " + host1.getHostAddress()
> +
> " is not same as server " + host2.getHostAddress());
> }
> 
> if (__dataTimeout >= 0)
> socket.setSoTimeout(__dataTimeout);
> 
> return socket;
> }
> 
> 
> 
> 
> ----- Original Message ----- 
> From: "Kevin Dougan" <ke...@hotmail.com>
> To: <us...@commons.apache.org>
> Sent: Tuesday, June 02, 2009 9:53 AM
> Subject: RE: Question about FTPClient.sendCommand()
> 
> 
> 
> 
> 
> Yes, I saw that specific API method call, but I don't really want to
> implement a big set of IF THEN clauses in my code...then I just become an
> interpreter for the FTP specification.
> 
> 
> 
> Maybe I should be asking a different question, like what is sendCommand()
> used for in the first place?
> 
> 
> Maybe it's not possible to do what I want to do, and I WILL have to
> String-compare everything I read in, and use an IF THEN block to call the
> various API methods, as I encounter different keywords (i.e. re-implement
> the wheel)...
> 
> 
> Thanks!
> Kevin
> KevinDougan@Hotmail.com
> 
> 
> > From: scole@camsbycbs.com
> > To: user@commons.apache.org
> > Subject: Re: Question about FTPClient.sendCommand()
> > Date: Tue, 2 Jun 2009 08:54:14 -0400
> >
> > The sendCommand method requires the command and args to be passed as two
> > separate variables.
> >
> > I think the bigger issue is that simpling sending a PUT command along with
> > the filenames is not going to send the file to the server. Check out the
> > FTPClient.java source and look at the _storeFile method. You'll see
> > everything else that needs to be done to actually store a file.
> >
> > ----- Original Message ----- 
> > From: "Kevin Dougan" <ke...@hotmail.com>
> > To: <us...@commons.apache.org>
> > Sent: Tuesday, June 02, 2009 8:38 AM
> > Subject: RE: Question about FTPClient.sendCommand()
> >
> >
> >
> > Hi and thanks for your reply. I'll try and give an example to
> illustrate...
> >
> >
> >
> > Let's say there's a file that contains the following lines:
> >
> > CWD /home/sampleuser/
> >
> > PUT localfile.txt remotefile.txt
> >
> >
> > I am building a Java Class that will be "dumb", in the sense that it will
> > just open the file (after connecting to the FTP Server using some other
> > properties), and issue the commands it finds in that file. The idea is
> that
> > the caller can dynamically build a file of commands, and the program does
> > not have to parse them individually and decide what they are, the program
> > can simply pass them along to the FTP Server.
> >
> >
> >
> > Therefore, I was thinking that I could use the FTPClient.sendCommand()
> > method to simple forward those commands, but it is not working.
> >
> >
> >
> > I do NOT want to do the following:
> >
> > ...read line from file: PUT localfile.txt remotefile.txt
> >
> > ...decide which API method to call: if (line.startsWith("PUT"))
> > client.storeFile(remoteFile, localFile); else if
> > (line.statrsWith("GET"))...etc, etc
> >
> >
> >
> > However, I am trying to do something more simple, like the following:
> >
> > ...read line from file: PUT localfile.txt remotefile.txt
> >
> > ...pass the command along
> >
> > ...read next line from file: : : :
> >
> > ...pass the command along: : : :
> >
> > ...etc, etc
> >
> >
> >
> > Thanks!
> > Kevin
> > KevinDougan@Hotmail.com
> >
> >
> > > From: scole@camsbycbs.com
> > > To: user@commons.apache.org
> > > Subject: Re: Question about FTPClient.sendCommand()
> > > Date: Tue, 2 Jun 2009 08:29:55 -0400
> > >
> > > I'm not sure if I understand what you're trying to accomplish. Are you
> > > sending FTP commands to the FTP server? If so, what command? Or are you
> > > trying to send operating system shell script commands? The FTP server is
> > > only going to accept commands it understands and supports, which is not
> > the
> > > same as OS shell scripts.
> > >
> > > ----- Original Message ----- 
> > > From: "Kevin Dougan" <ke...@hotmail.com>
> > > To: <us...@commons.apache.org>
> > > Sent: Tuesday, June 02, 2009 7:14 AM
> > > Subject: Question about FTPClient.sendCommand()
> > >
> > >
> > >
> > > Greetings!
> > >
> > > I have been searching around a lot, trying to figure out how to properly
> > use
> > > the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
> > > here can answer my question very quickly...?
> > >
> > > Basically, I want to implement a "dumb" FTP class who handles "batch
> > > processing". I thought I could just read lines from a file, and then
> pass
> > > them through to an FTP Server using the sendCommand() method, but it
> > always
> > > replies with "command not understood".
> > >
> > > Am I totally off track with what I want to do here? Am I using the API
> > > method incorrectly or for the wrong purpose?
> > >
> > > I am trying to avoid parsing every command, doing a String compare on
> each
> > > word, and then trying to match it against a specific API method
> > > (storeFile(), retrieveFile(), etc.), depending on each String I
> > parse...big,
> > > long IF blocks are ugly!
> > >
> > > Thanks!
> > > Kevin
> > > KevinDougan@Hotmail.com
> > >
> > >
> > > _________________________________________________________________
> > > Attention all humans. We are your photos. Free us.
> > > http://go.microsoft.com/?linkid=9666046
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > > For additional commands, e-mail: user-help@commons.apache.org
> > >
> >
> > _________________________________________________________________
> > We are your photos. Share us now with Windows Live Photos.
> > http://go.microsoft.com/?linkid=9666047
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > For additional commands, e-mail: user-help@commons.apache.org
> >
> 
> _________________________________________________________________
> We are your photos. Share us now with Windows Live Photos.
> http://go.microsoft.com/?linkid=9666047
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
> 

_________________________________________________________________
Internet explorer 8 lets you browse the web faster.
http://go.microsoft.com/?linkid=9655582

Re: Question about FTPClient.sendCommand()

Posted by Steve Cole <sc...@camsbycbs.com>.
The sendCommand() does just that. It sends a command to the FTP server, but
you have to understand what a FTP command does.

Some commands are simple. If you send the command FTPCommand.CWD along with
the directory name, the server will change directories.

Some commands require a more complex series of execution, like
FTPCommand.STOR, FTPCommand.RETR and FTPCommand.LIST.

The short answer is you can't simply send a PUT command. PUT is a command
many command line FTP clients understand, but the FTP server doesn't
understand PUT. The FTP server undersatands the integer value 14. When you
send command 14, the server waits for a properly formatted stream of data
that is the actual file. The client must send the command 14, then send the
actual data.

Here is what happens when you PUT (store) a file on the server...

  // this is the put methed in MyFTPClient.java class
  public boolean put()throws Throwable {
    boolean rv = true;
    if (binaryTransfer){
      ftpsClient.setFileType(FTP.BINARY_FILE_TYPE);
    }else{
      ftpsClient.setFileType(FTP.ASCII_FILE_TYPE);
    }
    if (passiveMode){
      ftpsClient.enterLocalPassiveMode();
    }else{
      ftpsClient.enterLocalActiveMode();
    }
    InputStream input;
    input = new FileInputStream(localFilename);
    ftpsClient.storeFile(remoteFilename, input);
    input.close();

    return rv;
  }

  // this is the storeFile methed in the FTPClient.java class
    public boolean storeFile(String remote, InputStream local)throws
IOException{
        return __storeFile(FTPCommand.STOR, remote, local);
    }

  // this is the underlying _storeFile methed in the FTPClient.java class
    private boolean __storeFile(int command, String remote, InputStream
local)throws IOException{
        OutputStream output;
        Socket socket;
        // tell server you want to STOR a file
        // the sendCommand method is called in the _openDataConnection_
method
        if ((socket = _openDataConnection_(command, remote)) == null)
            return false;
        // FTPCommand.STOR sent and server is now waiting for file to get
streamed to it
        output = new
BufferedOutputStream(socket.getOutputStream(),getBufferSize());
        if (__fileType == ASCII_FILE_TYPE)
            output = new ToNetASCIIOutputStream(output);
        // Treat everything else as binary for now
        try{
            Util.copyStream(local, output,
getBufferSize(),CopyStreamEvent.UNKNOWN_STREAM_SIZE, null,false);
        }catch (IOException e){
            try{
                socket.close();
            }catch (IOException f){}
            throw e;
        }
        output.close();
        socket.close();
        return completePendingCommand();
    }

    // the sendCommand method is actually called in this method
    protected Socket _openDataConnection_(int command, String arg) throws
IOException  {
        Socket socket;
        if (__dataConnectionMode != ACTIVE_LOCAL_DATA_CONNECTION_MODE &&
                __dataConnectionMode != PASSIVE_LOCAL_DATA_CONNECTION_MODE)
            return null;

        if (__dataConnectionMode == ACTIVE_LOCAL_DATA_CONNECTION_MODE)  {
            ServerSocket server;
            server = _serverSocketFactory_.createServerSocket(0, 1,
getLocalAddress());
            if (!FTPReply.isPositiveCompletion(port(getLocalAddress(),
server.getLocalPort())))   {
                server.close();
                return null;
            }
            if ((__restartOffset > 0) && !restart(__restartOffset)) {
                server.close();
                return null;
            }
            if (!FTPReply.isPositivePreliminary(sendCommand(command, arg)))
{
                server.close();
                return null;
            }

            // For now, let's just use the data timeout value for waiting
for
            // the data connection.  It may be desirable to let this be a
            // separately configurable value.  In any case, we really want
            // to allow preventing the accept from blocking indefinitely.
            if (__dataTimeout >= 0)
                server.setSoTimeout(__dataTimeout);
            try {
                socket = server.accept();
            } finally {
                server.close();
            }
        }
        else
        { // We must be in PASSIVE_LOCAL_DATA_CONNECTION_MODE

            if (pasv() != FTPReply.ENTERING_PASSIVE_MODE)
                return null;

            __parsePassiveModeReply((String)
_replyLines.get(_replyLines.size() - 1));

            socket = _socketFactory_.createSocket(__passiveHost,
__passivePort);
            if ((__restartOffset > 0) && !restart(__restartOffset))
            {
                socket.close();
                return null;
            }

            if (!FTPReply.isPositivePreliminary(sendCommand(command, arg)))
            {
                socket.close();
                return null;
            }
        }

        if (__remoteVerificationEnabled && !verifyRemote(socket))
        {
            InetAddress host1, host2;

            host1 = socket.getInetAddress();
            host2 = getRemoteAddress();

            socket.close();

            throw new IOException(
                "Host attempting data connection " + host1.getHostAddress()
+
                " is not same as server " + host2.getHostAddress());
        }

        if (__dataTimeout >= 0)
            socket.setSoTimeout(__dataTimeout);

        return socket;
    }




----- Original Message ----- 
From: "Kevin Dougan" <ke...@hotmail.com>
To: <us...@commons.apache.org>
Sent: Tuesday, June 02, 2009 9:53 AM
Subject: RE: Question about FTPClient.sendCommand()





Yes, I saw that specific API method call, but I don't really want to
implement a big set of IF THEN clauses in my code...then I just become an
interpreter for the FTP specification.



Maybe I should be asking a different question, like what is sendCommand()
used for in the first place?


Maybe it's not possible to do what I want to do, and I WILL have to
String-compare everything I read in, and use an IF THEN block to call the
various API methods, as I encounter different keywords (i.e. re-implement
the wheel)...


Thanks!
Kevin
KevinDougan@Hotmail.com


> From: scole@camsbycbs.com
> To: user@commons.apache.org
> Subject: Re: Question about FTPClient.sendCommand()
> Date: Tue, 2 Jun 2009 08:54:14 -0400
>
> The sendCommand method requires the command and args to be passed as two
> separate variables.
>
> I think the bigger issue is that simpling sending a PUT command along with
> the filenames is not going to send the file to the server. Check out the
> FTPClient.java source and look at the _storeFile method. You'll see
> everything else that needs to be done to actually store a file.
>
> ----- Original Message ----- 
> From: "Kevin Dougan" <ke...@hotmail.com>
> To: <us...@commons.apache.org>
> Sent: Tuesday, June 02, 2009 8:38 AM
> Subject: RE: Question about FTPClient.sendCommand()
>
>
>
> Hi and thanks for your reply. I'll try and give an example to
illustrate...
>
>
>
> Let's say there's a file that contains the following lines:
>
> CWD /home/sampleuser/
>
> PUT localfile.txt remotefile.txt
>
>
> I am building a Java Class that will be "dumb", in the sense that it will
> just open the file (after connecting to the FTP Server using some other
> properties), and issue the commands it finds in that file. The idea is
that
> the caller can dynamically build a file of commands, and the program does
> not have to parse them individually and decide what they are, the program
> can simply pass them along to the FTP Server.
>
>
>
> Therefore, I was thinking that I could use the FTPClient.sendCommand()
> method to simple forward those commands, but it is not working.
>
>
>
> I do NOT want to do the following:
>
> ...read line from file: PUT localfile.txt remotefile.txt
>
> ...decide which API method to call: if (line.startsWith("PUT"))
> client.storeFile(remoteFile, localFile); else if
> (line.statrsWith("GET"))...etc, etc
>
>
>
> However, I am trying to do something more simple, like the following:
>
> ...read line from file: PUT localfile.txt remotefile.txt
>
> ...pass the command along
>
> ...read next line from file: : : :
>
> ...pass the command along: : : :
>
> ...etc, etc
>
>
>
> Thanks!
> Kevin
> KevinDougan@Hotmail.com
>
>
> > From: scole@camsbycbs.com
> > To: user@commons.apache.org
> > Subject: Re: Question about FTPClient.sendCommand()
> > Date: Tue, 2 Jun 2009 08:29:55 -0400
> >
> > I'm not sure if I understand what you're trying to accomplish. Are you
> > sending FTP commands to the FTP server? If so, what command? Or are you
> > trying to send operating system shell script commands? The FTP server is
> > only going to accept commands it understands and supports, which is not
> the
> > same as OS shell scripts.
> >
> > ----- Original Message ----- 
> > From: "Kevin Dougan" <ke...@hotmail.com>
> > To: <us...@commons.apache.org>
> > Sent: Tuesday, June 02, 2009 7:14 AM
> > Subject: Question about FTPClient.sendCommand()
> >
> >
> >
> > Greetings!
> >
> > I have been searching around a lot, trying to figure out how to properly
> use
> > the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
> > here can answer my question very quickly...?
> >
> > Basically, I want to implement a "dumb" FTP class who handles "batch
> > processing". I thought I could just read lines from a file, and then
pass
> > them through to an FTP Server using the sendCommand() method, but it
> always
> > replies with "command not understood".
> >
> > Am I totally off track with what I want to do here? Am I using the API
> > method incorrectly or for the wrong purpose?
> >
> > I am trying to avoid parsing every command, doing a String compare on
each
> > word, and then trying to match it against a specific API method
> > (storeFile(), retrieveFile(), etc.), depending on each String I
> parse...big,
> > long IF blocks are ugly!
> >
> > Thanks!
> > Kevin
> > KevinDougan@Hotmail.com
> >
> >
> > _________________________________________________________________
> > Attention all humans. We are your photos. Free us.
> > http://go.microsoft.com/?linkid=9666046
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > For additional commands, e-mail: user-help@commons.apache.org
> >
>
> _________________________________________________________________
> We are your photos. Share us now with Windows Live Photos.
> http://go.microsoft.com/?linkid=9666047
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>

_________________________________________________________________
We are your photos. Share us now with Windows Live Photos.
http://go.microsoft.com/?linkid=9666047


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: Question about FTPClient.sendCommand()

Posted by sebb <se...@gmail.com>.
On 02/06/2009, Kevin Dougan <ke...@hotmail.com> wrote:
>
>
>
>  Yes, I saw that specific API method call, but I don't really want to implement a big set of IF THEN clauses in my code...then I just become an interpreter for the FTP specification.
>
>
>
>  Maybe I should be asking a different question, like what is sendCommand() used for in the first place?

Have you tried HELP ?

QUOTE DO xxx?

>
>  Maybe it's not possible to do what I want to do, and I WILL have to String-compare everything I read in, and use an IF THEN block to call the various API methods, as I encounter different keywords (i.e. re-implement the wheel)...
>

That should only be necessary for commands that take additional input
or produce additional output, such as STOR and RETR.

But perhaps it's worth considering adding an
FTPCLient.parseCommandLine() method to the NET code - this could be
requested as a JIRA enhancement.

>
>  Thanks!
>  Kevin
>  KevinDougan@Hotmail.com
>
>
>  > From: scole@camsbycbs.com
>  > To: user@commons.apache.org
>  > Subject: Re: Question about FTPClient.sendCommand()
>
> > Date: Tue, 2 Jun 2009 08:54:14 -0400
>
> >
>  > The sendCommand method requires the command and args to be passed as two
>  > separate variables.
>  >
>  > I think the bigger issue is that simpling sending a PUT command along with
>  > the filenames is not going to send the file to the server. Check out the
>  > FTPClient.java source and look at the _storeFile method. You'll see
>  > everything else that needs to be done to actually store a file.
>  >
>  > ----- Original Message -----
>  > From: "Kevin Dougan" <ke...@hotmail.com>
>  > To: <us...@commons.apache.org>
>  > Sent: Tuesday, June 02, 2009 8:38 AM
>  > Subject: RE: Question about FTPClient.sendCommand()
>  >
>  >
>  >
>  > Hi and thanks for your reply. I'll try and give an example to illustrate...
>  >
>  >
>  >
>  > Let's say there's a file that contains the following lines:
>  >
>  > CWD /home/sampleuser/
>  >
>  > PUT localfile.txt remotefile.txt
>  >
>  >
>  > I am building a Java Class that will be "dumb", in the sense that it will
>  > just open the file (after connecting to the FTP Server using some other
>  > properties), and issue the commands it finds in that file. The idea is that
>  > the caller can dynamically build a file of commands, and the program does
>  > not have to parse them individually and decide what they are, the program
>  > can simply pass them along to the FTP Server.
>  >
>  >
>  >
>  > Therefore, I was thinking that I could use the FTPClient.sendCommand()
>  > method to simple forward those commands, but it is not working.
>  >
>  >
>  >
>  > I do NOT want to do the following:
>  >
>  > ...read line from file: PUT localfile.txt remotefile.txt
>  >
>  > ...decide which API method to call: if (line.startsWith("PUT"))
>  > client.storeFile(remoteFile, localFile); else if
>  > (line.statrsWith("GET"))...etc, etc
>  >
>  >
>  >
>  > However, I am trying to do something more simple, like the following:
>  >
>  > ...read line from file: PUT localfile.txt remotefile.txt
>  >
>  > ...pass the command along
>  >
>  > ...read next line from file: : : :
>  >
>  > ...pass the command along: : : :
>  >
>  > ...etc, etc
>  >
>  >
>  >
>  > Thanks!
>  > Kevin
>  > KevinDougan@Hotmail.com
>  >
>  >
>  > > From: scole@camsbycbs.com
>  > > To: user@commons.apache.org
>  > > Subject: Re: Question about FTPClient.sendCommand()
>  > > Date: Tue, 2 Jun 2009 08:29:55 -0400
>  > >
>  > > I'm not sure if I understand what you're trying to accomplish. Are you
>  > > sending FTP commands to the FTP server? If so, what command? Or are you
>  > > trying to send operating system shell script commands? The FTP server is
>  > > only going to accept commands it understands and supports, which is not
>  > the
>  > > same as OS shell scripts.
>  > >
>  > > ----- Original Message -----
>  > > From: "Kevin Dougan" <ke...@hotmail.com>
>  > > To: <us...@commons.apache.org>
>  > > Sent: Tuesday, June 02, 2009 7:14 AM
>  > > Subject: Question about FTPClient.sendCommand()
>  > >
>  > >
>  > >
>  > > Greetings!
>  > >
>  > > I have been searching around a lot, trying to figure out how to properly
>  > use
>  > > the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
>  > > here can answer my question very quickly...?
>  > >
>  > > Basically, I want to implement a "dumb" FTP class who handles "batch
>  > > processing". I thought I could just read lines from a file, and then pass
>  > > them through to an FTP Server using the sendCommand() method, but it
>  > always
>  > > replies with "command not understood".
>  > >
>  > > Am I totally off track with what I want to do here? Am I using the API
>  > > method incorrectly or for the wrong purpose?
>  > >
>  > > I am trying to avoid parsing every command, doing a String compare on each
>  > > word, and then trying to match it against a specific API method
>  > > (storeFile(), retrieveFile(), etc.), depending on each String I
>  > parse...big,
>  > > long IF blocks are ugly!
>  > >
>  > > Thanks!
>  > > Kevin
>  > > KevinDougan@Hotmail.com
>  > >
>  > >
>  > > _________________________________________________________________
>  > > Attention all humans. We are your photos. Free us.
>  > > http://go.microsoft.com/?linkid=9666046
>  > >
>  > >
>  > > ---------------------------------------------------------------------
>  > > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>  > > For additional commands, e-mail: user-help@commons.apache.org
>  > >
>  >
>  > _________________________________________________________________
>  > We are your photos. Share us now with Windows Live Photos.
>  > http://go.microsoft.com/?linkid=9666047
>  >
>  >
>  > ---------------------------------------------------------------------
>  > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>  > For additional commands, e-mail: user-help@commons.apache.org
>  >
>
>  _________________________________________________________________
>  We are your photos. Share us now with Windows Live Photos.
>  http://go.microsoft.com/?linkid=9666047

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


RE: Question about FTPClient.sendCommand()

Posted by Kevin Dougan <ke...@hotmail.com>.
 

Yes, I saw that specific API method call, but I don't really want to implement a big set of IF THEN clauses in my code...then I just become an interpreter for the FTP specification.

 

Maybe I should be asking a different question, like what is sendCommand() used for in the first place?


Maybe it's not possible to do what I want to do, and I WILL have to String-compare everything I read in, and use an IF THEN block to call the various API methods, as I encounter different keywords (i.e. re-implement the wheel)...


Thanks! 
Kevin 
KevinDougan@Hotmail.com 

 
> From: scole@camsbycbs.com
> To: user@commons.apache.org
> Subject: Re: Question about FTPClient.sendCommand()
> Date: Tue, 2 Jun 2009 08:54:14 -0400
> 
> The sendCommand method requires the command and args to be passed as two
> separate variables.
> 
> I think the bigger issue is that simpling sending a PUT command along with
> the filenames is not going to send the file to the server. Check out the
> FTPClient.java source and look at the _storeFile method. You'll see
> everything else that needs to be done to actually store a file.
> 
> ----- Original Message ----- 
> From: "Kevin Dougan" <ke...@hotmail.com>
> To: <us...@commons.apache.org>
> Sent: Tuesday, June 02, 2009 8:38 AM
> Subject: RE: Question about FTPClient.sendCommand()
> 
> 
> 
> Hi and thanks for your reply. I'll try and give an example to illustrate...
> 
> 
> 
> Let's say there's a file that contains the following lines:
> 
> CWD /home/sampleuser/
> 
> PUT localfile.txt remotefile.txt
> 
> 
> I am building a Java Class that will be "dumb", in the sense that it will
> just open the file (after connecting to the FTP Server using some other
> properties), and issue the commands it finds in that file. The idea is that
> the caller can dynamically build a file of commands, and the program does
> not have to parse them individually and decide what they are, the program
> can simply pass them along to the FTP Server.
> 
> 
> 
> Therefore, I was thinking that I could use the FTPClient.sendCommand()
> method to simple forward those commands, but it is not working.
> 
> 
> 
> I do NOT want to do the following:
> 
> ...read line from file: PUT localfile.txt remotefile.txt
> 
> ...decide which API method to call: if (line.startsWith("PUT"))
> client.storeFile(remoteFile, localFile); else if
> (line.statrsWith("GET"))...etc, etc
> 
> 
> 
> However, I am trying to do something more simple, like the following:
> 
> ...read line from file: PUT localfile.txt remotefile.txt
> 
> ...pass the command along
> 
> ...read next line from file: : : :
> 
> ...pass the command along: : : :
> 
> ...etc, etc
> 
> 
> 
> Thanks!
> Kevin
> KevinDougan@Hotmail.com
> 
> 
> > From: scole@camsbycbs.com
> > To: user@commons.apache.org
> > Subject: Re: Question about FTPClient.sendCommand()
> > Date: Tue, 2 Jun 2009 08:29:55 -0400
> >
> > I'm not sure if I understand what you're trying to accomplish. Are you
> > sending FTP commands to the FTP server? If so, what command? Or are you
> > trying to send operating system shell script commands? The FTP server is
> > only going to accept commands it understands and supports, which is not
> the
> > same as OS shell scripts.
> >
> > ----- Original Message ----- 
> > From: "Kevin Dougan" <ke...@hotmail.com>
> > To: <us...@commons.apache.org>
> > Sent: Tuesday, June 02, 2009 7:14 AM
> > Subject: Question about FTPClient.sendCommand()
> >
> >
> >
> > Greetings!
> >
> > I have been searching around a lot, trying to figure out how to properly
> use
> > the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
> > here can answer my question very quickly...?
> >
> > Basically, I want to implement a "dumb" FTP class who handles "batch
> > processing". I thought I could just read lines from a file, and then pass
> > them through to an FTP Server using the sendCommand() method, but it
> always
> > replies with "command not understood".
> >
> > Am I totally off track with what I want to do here? Am I using the API
> > method incorrectly or for the wrong purpose?
> >
> > I am trying to avoid parsing every command, doing a String compare on each
> > word, and then trying to match it against a specific API method
> > (storeFile(), retrieveFile(), etc.), depending on each String I
> parse...big,
> > long IF blocks are ugly!
> >
> > Thanks!
> > Kevin
> > KevinDougan@Hotmail.com
> >
> >
> > _________________________________________________________________
> > Attention all humans. We are your photos. Free us.
> > http://go.microsoft.com/?linkid=9666046
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > For additional commands, e-mail: user-help@commons.apache.org
> >
> 
> _________________________________________________________________
> We are your photos. Share us now with Windows Live Photos.
> http://go.microsoft.com/?linkid=9666047
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
> 

_________________________________________________________________
We are your photos. Share us now with Windows Live Photos.
http://go.microsoft.com/?linkid=9666047

Re: Question about FTPClient.sendCommand()

Posted by Steve Cole <sc...@camsbycbs.com>.
The sendCommand method requires the command and args to be passed as two
separate variables.

I think the bigger issue is that simpling sending a PUT command along with
the filenames is not going to send the file to the server. Check out the
FTPClient.java source and look at the _storeFile method. You'll see
everything else that needs to be done to actually store a file.

----- Original Message ----- 
From: "Kevin Dougan" <ke...@hotmail.com>
To: <us...@commons.apache.org>
Sent: Tuesday, June 02, 2009 8:38 AM
Subject: RE: Question about FTPClient.sendCommand()



Hi and thanks for your reply. I'll try and give an example to illustrate...



Let's say there's a file that contains the following lines:

   CWD /home/sampleuser/

   PUT localfile.txt remotefile.txt


I am building a Java Class that will be "dumb", in the sense that it will
just open the file (after connecting to the FTP Server using some other
properties), and issue the commands it finds in that file. The idea is that
the caller can dynamically build a file of commands, and the program does
not have to parse them individually and decide what they are, the program
can simply pass them along to the FTP Server.



Therefore, I was thinking that I could use the FTPClient.sendCommand()
method to simple forward those commands, but it is not working.



I do NOT want to do the following:

...read line from file: PUT localfile.txt remotefile.txt

...decide which API method to call: if (line.startsWith("PUT"))
client.storeFile(remoteFile, localFile); else if
(line.statrsWith("GET"))...etc, etc



However, I am trying to do something more simple, like the following:

...read line from file: PUT localfile.txt remotefile.txt

...pass the command along

...read next line from file: : : :

...pass the command along: : : :

...etc, etc



Thanks!
Kevin
KevinDougan@Hotmail.com


> From: scole@camsbycbs.com
> To: user@commons.apache.org
> Subject: Re: Question about FTPClient.sendCommand()
> Date: Tue, 2 Jun 2009 08:29:55 -0400
>
> I'm not sure if I understand what you're trying to accomplish. Are you
> sending FTP commands to the FTP server? If so, what command? Or are you
> trying to send operating system shell script commands? The FTP server is
> only going to accept commands it understands and supports, which is not
the
> same as OS shell scripts.
>
> ----- Original Message ----- 
> From: "Kevin Dougan" <ke...@hotmail.com>
> To: <us...@commons.apache.org>
> Sent: Tuesday, June 02, 2009 7:14 AM
> Subject: Question about FTPClient.sendCommand()
>
>
>
> Greetings!
>
> I have been searching around a lot, trying to figure out how to properly
use
> the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
> here can answer my question very quickly...?
>
> Basically, I want to implement a "dumb" FTP class who handles "batch
> processing". I thought I could just read lines from a file, and then pass
> them through to an FTP Server using the sendCommand() method, but it
always
> replies with "command not understood".
>
> Am I totally off track with what I want to do here? Am I using the API
> method incorrectly or for the wrong purpose?
>
> I am trying to avoid parsing every command, doing a String compare on each
> word, and then trying to match it against a specific API method
> (storeFile(), retrieveFile(), etc.), depending on each String I
parse...big,
> long IF blocks are ugly!
>
> Thanks!
> Kevin
> KevinDougan@Hotmail.com
>
>
> _________________________________________________________________
> Attention all humans. We are your photos. Free us.
> http://go.microsoft.com/?linkid=9666046
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>

_________________________________________________________________
We are your photos. Share us now with Windows Live Photos.
http://go.microsoft.com/?linkid=9666047


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


RE: Question about FTPClient.sendCommand()

Posted by Kevin Dougan <ke...@hotmail.com>.
I tried using 2 different ones, but neither one worked, and both are String-based.

 

The first I tried was this:

FTPClient.sendCommand(line); // where line = "PUT localfile.txt remotefile.txt"

 

The next one I tried was this:

FTPClient.sendCommand(line, args); // where line = "PUT " and args = "localfile.txt remotefile.txt"


The point is, I don't want to have to know which commands are coming in, I just want to "forward" those commands along to the server.

 

If I have to parse each line, and then substring it to figure out what it is trying to do, then I am re-inventing the wheel again, and forcing myself to make coding changes whenever someone wants to use a new API method, or the FTP Server protocol changes to support some new command or feature.


Thanks! 
Kevin 
KevinDougan@Hotmail.com 

 
> Date: Tue, 2 Jun 2009 13:46:57 +0100
> Subject: Re: Question about FTPClient.sendCommand()
> From: sebbaz@gmail.com
> To: user@commons.apache.org
> 
> On 02/06/2009, Kevin Dougan <ke...@hotmail.com> wrote:
> >
> > Hi and thanks for your reply. I'll try and give an example to illustrate...
> >
> >
> >
> > Let's say there's a file that contains the following lines:
> >
> > CWD /home/sampleuser/
> >
> > PUT localfile.txt remotefile.txt
> >
> >
> > I am building a Java Class that will be "dumb", in the sense that it will just open the file (after connecting to the FTP Server using some other properties), and issue the commands it finds in that file. The idea is that the caller can dynamically build a file of commands, and the program does not have to parse them individually and decide what they are, the program can simply pass them along to the FTP Server.
> >
> >
> >
> > Therefore, I was thinking that I could use the FTPClient.sendCommand() method to simple forward those commands, but it is not working.
> >
> 
> Which sendCommand() method are you using?
> 
> There are several, with different parameters.
> 
> >
> > I do NOT want to do the following:
> >
> > ...read line from file: PUT localfile.txt remotefile.txt
> >
> > ...decide which API method to call: if (line.startsWith("PUT")) client.storeFile(remoteFile, localFile); else if (line.statrsWith("GET"))...etc, etc
> >
> >
> >
> > However, I am trying to do something more simple, like the following:
> >
> > ...read line from file: PUT localfile.txt remotefile.txt
> >
> > ...pass the command along
> >
> > ...read next line from file: : : :
> >
> > ...pass the command along: : : :
> >
> > ...etc, etc
> >
> >
> >
> >
> > Thanks!
> > Kevin
> > KevinDougan@Hotmail.com
> >
> >
> >
> > > From: scole@camsbycbs.com
> >
> > > To: user@commons.apache.org
> >
> > > Subject: Re: Question about FTPClient.sendCommand()
> > > Date: Tue, 2 Jun 2009 08:29:55 -0400
> >
> > >
> > > I'm not sure if I understand what you're trying to accomplish. Are you
> > > sending FTP commands to the FTP server? If so, what command? Or are you
> > > trying to send operating system shell script commands? The FTP server is
> > > only going to accept commands it understands and supports, which is not the
> > > same as OS shell scripts.
> > >
> > > ----- Original Message -----
> > > From: "Kevin Dougan" <ke...@hotmail.com>
> > > To: <us...@commons.apache.org>
> > > Sent: Tuesday, June 02, 2009 7:14 AM
> > > Subject: Question about FTPClient.sendCommand()
> > >
> > >
> > >
> > > Greetings!
> > >
> > > I have been searching around a lot, trying to figure out how to properly use
> > > the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
> > > here can answer my question very quickly...?
> > >
> > > Basically, I want to implement a "dumb" FTP class who handles "batch
> > > processing". I thought I could just read lines from a file, and then pass
> > > them through to an FTP Server using the sendCommand() method, but it always
> > > replies with "command not understood".
> > >
> > > Am I totally off track with what I want to do here? Am I using the API
> > > method incorrectly or for the wrong purpose?
> > >
> > > I am trying to avoid parsing every command, doing a String compare on each
> > > word, and then trying to match it against a specific API method
> > > (storeFile(), retrieveFile(), etc.), depending on each String I parse...big,
> > > long IF blocks are ugly!
> > >
> > > Thanks!
> > > Kevin
> > > KevinDougan@Hotmail.com
> > >
> > >
> > > _________________________________________________________________
> > > Attention all humans. We are your photos. Free us.
> > > http://go.microsoft.com/?linkid=9666046
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > > For additional commands, e-mail: user-help@commons.apache.org
> > >
> >
> >
> > _________________________________________________________________
> > We are your photos. Share us now with Windows Live Photos.
> > http://go.microsoft.com/?linkid=9666047
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
> 

_________________________________________________________________
Windows Live helps you keep up with all your friends, in one place.
http://go.microsoft.com/?linkid=9660826

Re: Question about FTPClient.sendCommand()

Posted by sebb <se...@gmail.com>.
On 02/06/2009, Kevin Dougan <ke...@hotmail.com> wrote:
>
>  Hi and thanks for your reply. I'll try and give an example to illustrate...
>
>
>
>  Let's say there's a file that contains the following lines:
>
>    CWD /home/sampleuser/
>
>    PUT localfile.txt remotefile.txt
>
>
>  I am building a Java Class that will be "dumb", in the sense that it will just open the file (after connecting to the FTP Server using some other properties), and issue the commands it finds in that file. The idea is that the caller can dynamically build a file of commands, and the program does not have to parse them individually and decide what they are, the program can simply pass them along to the FTP Server.
>
>
>
>  Therefore, I was thinking that I could use the FTPClient.sendCommand() method to simple forward those commands, but it is not working.
>

Which sendCommand() method are you using?

There are several, with different parameters.

>
>  I do NOT want to do the following:
>
>  ...read line from file: PUT localfile.txt remotefile.txt
>
>  ...decide which API method to call: if (line.startsWith("PUT")) client.storeFile(remoteFile, localFile); else if (line.statrsWith("GET"))...etc, etc
>
>
>
>  However, I am trying to do something more simple, like the following:
>
>  ...read line from file: PUT localfile.txt remotefile.txt
>
>  ...pass the command along
>
>  ...read next line from file: : : :
>
>  ...pass the command along: : : :
>
>  ...etc, etc
>
>
>
>
>  Thanks!
>  Kevin
>  KevinDougan@Hotmail.com
>
>
>
> > From: scole@camsbycbs.com
>
> > To: user@commons.apache.org
>
> > Subject: Re: Question about FTPClient.sendCommand()
>  > Date: Tue, 2 Jun 2009 08:29:55 -0400
>
> >
>  > I'm not sure if I understand what you're trying to accomplish. Are you
>  > sending FTP commands to the FTP server? If so, what command? Or are you
>  > trying to send operating system shell script commands? The FTP server is
>  > only going to accept commands it understands and supports, which is not the
>  > same as OS shell scripts.
>  >
>  > ----- Original Message -----
>  > From: "Kevin Dougan" <ke...@hotmail.com>
>  > To: <us...@commons.apache.org>
>  > Sent: Tuesday, June 02, 2009 7:14 AM
>  > Subject: Question about FTPClient.sendCommand()
>  >
>  >
>  >
>  > Greetings!
>  >
>  > I have been searching around a lot, trying to figure out how to properly use
>  > the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
>  > here can answer my question very quickly...?
>  >
>  > Basically, I want to implement a "dumb" FTP class who handles "batch
>  > processing". I thought I could just read lines from a file, and then pass
>  > them through to an FTP Server using the sendCommand() method, but it always
>  > replies with "command not understood".
>  >
>  > Am I totally off track with what I want to do here? Am I using the API
>  > method incorrectly or for the wrong purpose?
>  >
>  > I am trying to avoid parsing every command, doing a String compare on each
>  > word, and then trying to match it against a specific API method
>  > (storeFile(), retrieveFile(), etc.), depending on each String I parse...big,
>  > long IF blocks are ugly!
>  >
>  > Thanks!
>  > Kevin
>  > KevinDougan@Hotmail.com
>  >
>  >
>  > _________________________________________________________________
>  > Attention all humans. We are your photos. Free us.
>  > http://go.microsoft.com/?linkid=9666046
>  >
>  >
>  > ---------------------------------------------------------------------
>  > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>  > For additional commands, e-mail: user-help@commons.apache.org
>  >
>
>
> _________________________________________________________________
>  We are your photos. Share us now with Windows Live Photos.
>  http://go.microsoft.com/?linkid=9666047

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


RE: Question about FTPClient.sendCommand()

Posted by Kevin Dougan <ke...@hotmail.com>.
Hi and thanks for your reply. I'll try and give an example to illustrate...

 

Let's say there's a file that contains the following lines:

   CWD /home/sampleuser/

   PUT localfile.txt remotefile.txt


I am building a Java Class that will be "dumb", in the sense that it will just open the file (after connecting to the FTP Server using some other properties), and issue the commands it finds in that file. The idea is that the caller can dynamically build a file of commands, and the program does not have to parse them individually and decide what they are, the program can simply pass them along to the FTP Server.

 

Therefore, I was thinking that I could use the FTPClient.sendCommand() method to simple forward those commands, but it is not working.

 

I do NOT want to do the following:

...read line from file: PUT localfile.txt remotefile.txt

...decide which API method to call: if (line.startsWith("PUT")) client.storeFile(remoteFile, localFile); else if (line.statrsWith("GET"))...etc, etc

 

However, I am trying to do something more simple, like the following:

...read line from file: PUT localfile.txt remotefile.txt

...pass the command along

...read next line from file: : : : 

...pass the command along: : : :

...etc, etc

 

Thanks! 
Kevin 
KevinDougan@Hotmail.com 

 
> From: scole@camsbycbs.com
> To: user@commons.apache.org
> Subject: Re: Question about FTPClient.sendCommand()
> Date: Tue, 2 Jun 2009 08:29:55 -0400
> 
> I'm not sure if I understand what you're trying to accomplish. Are you
> sending FTP commands to the FTP server? If so, what command? Or are you
> trying to send operating system shell script commands? The FTP server is
> only going to accept commands it understands and supports, which is not the
> same as OS shell scripts.
> 
> ----- Original Message ----- 
> From: "Kevin Dougan" <ke...@hotmail.com>
> To: <us...@commons.apache.org>
> Sent: Tuesday, June 02, 2009 7:14 AM
> Subject: Question about FTPClient.sendCommand()
> 
> 
> 
> Greetings!
> 
> I have been searching around a lot, trying to figure out how to properly use
> the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
> here can answer my question very quickly...?
> 
> Basically, I want to implement a "dumb" FTP class who handles "batch
> processing". I thought I could just read lines from a file, and then pass
> them through to an FTP Server using the sendCommand() method, but it always
> replies with "command not understood".
> 
> Am I totally off track with what I want to do here? Am I using the API
> method incorrectly or for the wrong purpose?
> 
> I am trying to avoid parsing every command, doing a String compare on each
> word, and then trying to match it against a specific API method
> (storeFile(), retrieveFile(), etc.), depending on each String I parse...big,
> long IF blocks are ugly!
> 
> Thanks!
> Kevin
> KevinDougan@Hotmail.com
> 
> 
> _________________________________________________________________
> Attention all humans. We are your photos. Free us.
> http://go.microsoft.com/?linkid=9666046
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
> 

_________________________________________________________________
We are your photos. Share us now with Windows Live Photos.
http://go.microsoft.com/?linkid=9666047

Re: Question about FTPClient.sendCommand()

Posted by Steve Cole <sc...@camsbycbs.com>.
I'm not sure if I understand what you're trying to accomplish. Are you
sending FTP commands to the FTP server? If so, what command? Or are you
trying  to send operating system shell script commands? The FTP server is
only going to accept commands it understands and supports, which is not the
same as OS shell scripts.

----- Original Message ----- 
From: "Kevin Dougan" <ke...@hotmail.com>
To: <us...@commons.apache.org>
Sent: Tuesday, June 02, 2009 7:14 AM
Subject: Question about FTPClient.sendCommand()



Greetings!

I have been searching around a lot, trying to figure out how to properly use
the FTPClient.sendCommand() API method, but to no avail! Perhaps someone
here can answer my question very quickly...?

Basically, I want to implement a "dumb" FTP class who handles "batch
processing". I thought I could just read lines from a file, and then pass
them through to an FTP Server using the sendCommand() method, but it always
replies with "command not understood".

Am I totally off track with what I want to do here? Am I using the API
method incorrectly or for the wrong purpose?

I am trying to avoid parsing every command, doing a String compare on each
word, and then trying to match it against a specific API method
(storeFile(), retrieveFile(), etc.), depending on each String I parse...big,
long IF blocks are ugly!

Thanks!
Kevin
KevinDougan@Hotmail.com


_________________________________________________________________
Attention all humans. We are your photos. Free us.
http://go.microsoft.com/?linkid=9666046


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org