El código parece correcto. Yo te diría que es cosa de la jdk pero si tienes la misma instalada ya no parece ser ese el problema
¿Alguna solución? Me pasa en dos ordenadores y en otros dos no!!
Te pongo lo que te puse en el otro foro (veo que por nerviosismo has duplicado el mensaje) ya que para mi el problema es claramente de conectividad y no de código.
"
Y desde ese tercer equipo te puedes conectar sin problemas utilizando algun cliente FTP como Filezilla? está en la misma red que los otros? tiene algún proxy de por medio?
"
Un saludo
Buenos días,
Estoy conectándome a un ftp desde mi aplicación java y veo que desde mi portatil funciona perfectamente y desde otro ordenador también pero hay un ordenador en el que lo intento hacer funcionar y el mismo código falla sacando el siguiente mensaje de error:
"software caused connection abort socket write error"
Había pensado que podría ser el jdk pero tengo la misma jdk en los dos 3 equipos, de hecho he instalado todo con el mismo instalador así que me quedo sin ideas.
El código es el siguiente aunque realmente da igual ya que el mismo funciona en otros ordenadores.:
package interno.datos;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class ftp {
private FTPClient client;
private ConfigProperties prop;
/**
* Constructor.
* @param prop
*/
public ftp(ConfigProperties prop){ this.prop=prop; }
/**
* Sube el fichero especificado al ftp.
* @param fileName Nombre del fichero a enviar.
* @param path
* @param b Este valor debe ser false al principio para que se ejecute dos veces.
*/
public void enviar(String fileName, String path,boolean b){
try {
conectar();
if(b) changePath(prop.getFTP_path()+path);
else changePath(prop.getFTP_path()+"new");
//Subiendo el fichero al FTP en la carpeta asignada.
FileInputStream fis = new FileInputStream(prop.getXML_path()+fileName);
client.storeFile(fileName, fis);
//Desconexión del FTP.
fis.close();
desconectar();
if(b) enviar(fileName, path, false);
else{
Object[] options = {"Aceptar"};
JOptionPane.showOptionDialog(null,"Envio correcto","Estado de envío",
JOptionPane.OK_OPTION, JOptionPane.INFORMATION_MESSAGE,
null, options, options[0]);
File fichero=new File(prop.getXML_path()+fileName);
fichero.delete();
fichero.deleteOnExit();
}//Una vez subido al FTP borramos el fichero del pc.
} catch (IOException ex) {
Object[] options = {"Aceptar"};
JOptionPane.showOptionDialog(null,"Envio fallido: \n"+ex,"Estado de envío",
JOptionPane.OK_OPTION, JOptionPane.ERROR_MESSAGE,
null, options, options[0]);
}
}
public boolean descargar(){
boolean enviado=false;
try {
conectar();
changePath(prop.getFTP_path()+"new");
for (Object fileName : listar()) {
FileOutputStream fis = new FileOutputStream(prop.getXML_pathDownload()+fileName);
client.retrieveFile(fileName.toString(),fis);
enviado=true;
fis.close();
borrar(fileName.toString());
}
desconectar();
} catch (IOException ex) { System.out.println(ex);}
return enviado;
}
//for (Object ftpFile : listar()) { System.out.println(ftpFile); }
private ArrayList listar(){
ArrayList lista= new ArrayList();
try { for (FTPFile ftpFile : client.listFiles()) { lista.add(ftpFile.getName()); }
} catch (IOException ex) { }
return lista;
}
private void conectar(){
try {
client = new FTPClient();
//Conexión al FTP.
client.connect(prop.getFTP_url());
client.login(prop.getFTP_user(),prop.getFTP_password());
client.setFileType(FTPClient.BINARY_FILE_TYPE);
} catch (IOException ex) { }
}
private void changePath(String path){try { client.changeWorkingDirectory(path); } catch (IOException ex) { } }
private void borrar(String fileName){ try { client.deleteFile(fileName); } catch (IOException ex) { } }
private void desconectar(){ try { client.logout(); client.disconnect(); } catch (IOException ex) { } }
}