[
https://issues.apache.org/jira/browse/NET-192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12574875#action_12574875
]
Rory Winston commented on NET-192:
----------------------------------
Do you have an FTP host that can be connected to? This cant be reproduced
otherwise.
> Solaris 10 unable to download files, FTPClient timesout with: "426 Data
> connection: Error 0"
> --------------------------------------------------------------------------------------------
>
> Key: NET-192
> URL: https://issues.apache.org/jira/browse/NET-192
> Project: Commons Net
> Issue Type: Bug
> Affects Versions: 1.4
> Environment: commons-net-1.4.1, Java 1.5.0_u10
> Windows XP client, Solaris 10 server
> Reporter: Zac Heismann
> Attachments: FTPTest.zip
>
>
> Existing code working on Solaris 8, breaks under Solaris 10.
> We configured the ftpdaemon's flush-wait property to be set to no. Here's
> some info on what we did:
> http://forums.ni.com/ni/board/message?board.id=180&message.id=30183
> From the man page:
> flush-wait yes|no [typelist]
> Controls the behavior at the end of a download or direc-
> tory listing. If yes, shutdown the data connection for
> sending and wait for the client to close its end before
> sending a transfer complete reply on the control connec-
> tion. This is the default behavior. If no, close the
> data connection and send the transfer complete reply
> without waiting for the client. With this behavior, data
> loss can go undetected.
> If a client hangs at the end of a directory listing, or
> the system has many sockets in the FIN_WAIT_2 state, try
> setting to no as a workaround for broken client
> behavior.
> -----------
> I'll attempt to attach a test case (you'll need to configure some properties
> though).
> Here's the code being executed. The execution hangs when the
> FTPClient.completePendingCommand() method is called for around 20 minutes and
> then the following Reply String is returned from the FTPClient: "426 Data
> connection: Error 0."
> import java.io.BufferedInputStream;
> import java.io.File;
> import java.io.FileOutputStream;
> import java.io.InputStream;
> import org.apache.commons.net.ftp.FTP;
> import org.apache.commons.net.ftp.FTPClient;
> import org.apache.commons.net.ftp.FTPReply;
> /**
> * Solaris 10 unable to download files, FTPClient timesout with: "426 Data
> connection: Error 0"
> *
> * commons-net-1.4.1, Java 1.5.0_u10
> * Windows XP client, Solaris 10 server
> *
> Existing code working on Solaris 8, breaks under Solaris 10.
> We configured the ftpdaemon's flush-wait property to be set to no. Here's
> some info on what we did:
> http://forums.ni.com/ni/board/message?board.id=180&message.id=30183
> From the man page:
> flush-wait yes|no [typelist]
> Controls the behavior at the end of a download or direc-
> tory listing. If yes, shutdown the data connection for
> sending and wait for the client to close its end before
> sending a transfer complete reply on the control connec-
> tion. This is the default behavior. If no, close the
> data connection and send the transfer complete reply
> without waiting for the client. With this behavior, data
> loss can go undetected.
> If a client hangs at the end of a directory listing, or
> the system has many sockets in the FIN_WAIT_2 state, try
> setting to no as a workaround for broken client
> behavior.
> *
> * @author zheismann
> */
> public final class App
> {
>
> public static void testFTP(String ftpHost, String ftpUserName, String
> ftpPassword,
> String fileToDownload, String
> localDestinationFile)
> throws Exception
> {
> File localFile = new File( localDestinationFile );
> FTPClient ftpClient = setupConnection(ftpHost, ftpUserName,
> ftpPassword);
> ftpClient.setFileType( FTP.BINARY_FILE_TYPE );
> System.out.println("Attempting to download '" + fileToDownload + "'
> from host: " + ftpHost);
> System.out.println("to the localhost: '" +
> localFile.getAbsolutePath() + "'");
> FileOutputStream outStream = new FileOutputStream( localFile );
> InputStream ftpIn = ftpClient.retrieveFileStream( fileToDownload );
> InputStream tempStream = new BufferedInputStream( ftpIn );
> byte[] buf = new byte[ftpClient.getBufferSize()];
> int len;
> //Read from the ftpStream and write to the local file
> while ( (len = tempStream.read( buf )) >= 0 )
> {
> outStream.write( buf, 0, len );
> }
> if ( !ftpClient.completePendingCommand() )
> {
> throw new Exception(
> "Error downloading file: " +
> localDestinationFile + "\n" +
> ftpClient.getReplyString() + "\n" );
> }
> System.out.println("Success!");
> }
>
> private static FTPClient setupConnection(String ftpHost, String
> ftpUserName, String ftpPassword) throws Exception
> {
> FTPClient ftpClient = new FTPClient();
> ftpClient.connect(ftpHost);
> ftpClient.login(ftpUserName, ftpPassword);
> int reply = ftpClient.getReplyCode();
> if (!FTPReply.isPositiveCompletion(reply))
> {
> throw new Exception( "Error connecting to: " + ftpHost + "\n" +
> ftpClient.getReplyString() + "\n" );
> }
> return ftpClient;
> }
> public class App
> {
> private static final String FTP_HOST = "";
> private static final String FTP_USERNAME = "zheisman";
> private static final String FTP_PASSWORD = "";
> private static final String FILE_TO_DOWNLOAD = "/home/zheisman/pom.xml";
> private static final String FTP_FILE_DESTINATION = "/pom.xml";
>
> private static void testFTP() throws Exception
> {
> File localFile = new File( FTP_FILE_DESTINATION );
> FTPClient ftpClient = setupConnection();
> ftpClient.setFileType( FTP.BINARY_FILE_TYPE );
> System.out.println("Attempting to download '" + FILE_TO_DOWNLOAD + "'
> from host: " + FTP_HOST);
> System.out.println("to the localhost: '" +
> localFile.getAbsolutePath() + "'");
> FileOutputStream outStream = new FileOutputStream( localFile );
> InputStream ftpIn = ftpClient.retrieveFileStream( FILE_TO_DOWNLOAD );
> InputStream tempStream = new BufferedInputStream( ftpIn );
> byte[] buf = new byte[ftpClient.getBufferSize()];
> int len;
> //Read from the ftpStream and write to the local file
> while ( (len = tempStream.read( buf )) >= 0 )
> {
> outStream.write( buf, 0, len );
> }
> if ( !ftpClient.completePendingCommand() )
> {
> throw new Exception(
> "Error downloading file: " +
> FILE_TO_DOWNLOAD + "\n" +
> ftpClient.getReplyString() + "\n" );
> }
> }
>
> private static FTPClient setupConnection() throws Exception
> {
> FTPClient ftpClient = new FTPClient();
> ftpClient.connect(FTP_HOST);
> ftpClient.login(FTP_USERNAME, FTP_PASSWORD);
> int reply = ftpClient.getReplyCode();
> if (!FTPReply.isPositiveCompletion(reply))
> {
> throw new Exception( "Error connecting to: " + FTP_HOST + "\n" +
> ftpClient.getReplyString() + "\n" );
> }
> return ftpClient;
> }
>
> public static void main( String[] args )
> {
> try
> {
> testFTP();
> }
> catch (Exception ex)
> {
> ex.printStackTrace();
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.