/ / Archivia ObjectOutputStream in FTP causa java.net.SocketException: Il software ha causato interruzione della connessione: errore di scrittura socket - java, socket, oggetto, serializzazione, client ftp

Archivia ObjectOutputStream in FTP causa java.net.SocketException: Il software ha causato interruzione della connessione: errore di scrittura socket - java, socket, oggetto, serializzazione, client ftp

Sto cercando di memorizzare una personalizzazione definita(ProjectData) Oggetto Java in un file in FTP. La classe ProjectData implementa un'interfaccia serializzabile. Sto utilizzando il client FTP Net di Apache Commons. Ho una classe personalizzata FtpClient, che ha un'istanza di Commons Client FTP net. Mi collego, carica file, scarica file, storeFileStream utilizzando questa classe. Quando provo a chiamare funzione saveProjectData, genera un'eccezione durante l'esecuzione di save.writeObject (dati).

java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method) [:1.6.0_23]
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) [:1.6.0_23]
at java.net.SocketOutputStream.write(SocketOutputStream.java:136) [:1.6.0_23]
at org.apache.commons.net.io.SocketOutputStream.write(SocketOutputStream.java:72) [:2.2]
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1847) [:1.6.0_23]
at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1792) [:1.6.0_23]
at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:699) [:1.6.0_23]

Quindi qual è il problema nel codice, sono pronto che la connessione sia già chiusa, nel frattempo di salvare l'oggetto. Ma non ho trovato il bug.

public void saveProjectData(ProjectData data, String filePath) {
ftpClient = new FtpClient(ftpConfig, logger);
ObjectOutputStream save = null;
try {
ftpClient.connect();
save = new ObjectOutputStream(ftpClient.storeFileStream(filePath));
} catch (Exception e) {
// ignore
}
try {
if (save == null) {
ftpClient.reconnect();
save = new ObjectOutputStream(ftpClient.storeFileStream(filePath));
}
save.writeObject(data);
save.flush();
} catch (IOException e) {
logger.error("Error creating file:" + filePath);
throw new FileTransferException("Could not create file:" + filePath, e);
} finally {
if (save != null) {
try {
save.close();
} catch (Exception e) {
logger.warn("Error closing writer of file:" + filePath, e);
}
save = null;
}
if (ftpClient != null) {
try {
ftpClient.disconnect();
} catch (Exception e) {
// ignore
}
ftpClient = null;
}
}
}

/**
* Stores the file in FTP
* @param filePath
* @return
*/
public OutputStream storeFileStream(String filePath) {
try {
client.setFileType(FTP.BINARY_FILE_TYPE);
return client.storeFileStream(filePath);
} catch (Exception ioe) {
log.warn("Could not store file:" + filePath, ioe);
return null;
}
}

risposte:

0 per risposta № 1

Ho letto che la connessione è già chiusa

No, hai letto (o dovresti aver letto) che la connessione è già chiusa dal pari.

Forse hai superato il limite di caricamento.