miércoles, diciembre 14, 2011

java.net.SocketException: Software caused connection abort: socket write error

JAVA: Utilizando la librería "org.apache.commons.net.ftp", encontré que al listar los archivos del servidor FTP se generaba el siguiente error:
 java.net.SocketException: Software caused connection abort: socket write error
Opté por cambiar de manejador de FTP y utilicé  la librería "ftp4j", con los mismos resultados.
De tal forma que pensé que el problema podía ser el servidor de FTP que he estado utilizando "Filezilla FTP Server" y lo cambie por otro, pero el error persistía, así que después de mucho investigar caí en cuenta que el error se encontraba en la versión de JDK que estaba utilizando (actualmente JDK 1.7), compile mi código con la versión JDK 1.6 y funciono de maravilla.
Conclusión: El JDK 1.7 tiene un bug en el manejo de sockets, por el momento será mejor utilizar el JDK 1.6 que parece ser una versión estable.

El código fuente utilizado para esta prueba fue:

package ftpTest;

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;


public class FtpEjemplo {

    public static void main(String[] args) {
        FTPClient f = new FTPClient();
        try {
            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX); //Este objeto nos
            f.configure(conf); //permite configurar opciones de conexion como idioma y sistema de archivos
            f.connect("192.168.10.1"); // ip del servidor ftp
            f.login("username", "password"); // usuario y password para conectarnos al ftp
            f.changeWorkingDirectory("/"); // Cambiamos de la raiz al subdirectorio uno
            FTPFile[] files = f.listFiles("/"); // Obtiene los archivos del servidor y los mostramos
            System.out.println(f.isConnected());
            for (FTPFile arch : files) {
                System.out.println(arch.toString());
            }
            f.disconnect();
            System.out.println(f.isConnected());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}






java.net.SocketException: Software caused connection abort: socket write error

JAVA : Utilizando la librería " org.apache.commons.net.ftp ", encontré que al listar los archivos del servidor FTP se generaba...