JSch - inputstream is closed

filth

Bekanntes Mitglied
Hallo,

ich verwende die JSch Bibliothek um Dateien zu einem Server zu übertragen.
Einer der User hatte am Wochenende wohl ein Problem. Die Exception in der Log sagt folgendes:

Code:
Date: Sun Mar 13 09:23:20 CET 2011
You crashed thread Thread-209
Exception was: 4: java.io.IOException: inputstream is closed
Trace: --> at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:577)--> 
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:388)--> 
at nClient.Ftp.SSHUploadClient.upload(SSHUploadClient.java:149)--> 
at nClient.Packupload.PictureUpload.uploadPremiums(PictureUpload.java:204)--> 
at nClient.Packupload.PictureUpload.doUpload(PictureUpload.java:163)--> 
at nClient.Packupload.PackUploader.uploadPics(PackUploader.java:189)--> 
at nClient.Controller$2.run(Controller.java:596)
Additional Info:  OS: Windows 7 |

Die SSHUploadClient-Klasse sieht folgendermaßen aus:

Java:
	public void upload( String remoteFile, String localFile) 
	{
		checkConnection();
		
		SftpProgressMonitor monitor = new SSHProgressMonitor(myController);
		int mode=ChannelSftp.OVERWRITE;
				
		try {
			channel.put(remoteFile, localFile, monitor, mode);
		} catch (SftpException e) {
			CustomExceptionHandler myEx = new CustomExceptionHandler();
			myEx.logError(e);
		}
	}

Ich kann nicht wirklich was mit dem Fehler anfangen - jemand eine Idee? Wurde während der Übetragung die Verbindung serverseitig geschlossen?

Danke
 

areafo

Mitglied
Ja der Stream zum Server wurde geschlossen. Von wem steht da nicht. Firewall Router Sync Server usw könnte überall geschlossen wurden seien.
 

filth

Bekanntes Mitglied
Wie kann man sowas abfangen? In der checkConnection() prüfe ich ob der Stream bzw die Connection noch da ist, aber scheinbar reicht es in Einzelfällen nicht aus
 

filth

Bekanntes Mitglied
Sollte das in etwa so aussehen?


Java:
    public void upload( String remoteFile, String localFile) 
    {
        checkConnection();
        
        SftpProgressMonitor monitor = new SSHProgressMonitor(myController);
        int mode=ChannelSftp.OVERWRITE;
                
        try {
            channel.put(remoteFile, localFile, monitor, mode);
        } catch (Exception e) {
            		if(e.equals(new java.io.IOException()))
			{
				// CODE
			}
        }


    }
 

Murray

Top Contributor
Die Fallunterscheidung bei den Exceptions a) ist Quatsch und b) wird nicht funktionieren.

Besser:
Java:
try {
 /* ... */
} catch (IOException iox) { //--- nur IOExceptions fangen, dann spart man sich auch die Fallunterscheidung
}

Oder - wenn man denn wirklich auch andere Exceptions fangen muss - z.B. so
Java:
try {
 /* ... */
} catch (IOException iox) { 
  /* spezifische Behandlung der IOException */
} catch (NumberFormatException nfx) { 
  /* spezifische Behandlung der NumberFormatException */
}
 

areafo

Mitglied
Ist serverseitig was zu erkennen das er den Upload beginnt und dann abbricht? Ansonsten beim abfangen der Exception gleich nen neuen Uploadversuch.
 

filth

Bekanntes Mitglied
Die Fallunterscheidung bei den Exceptions a) ist Quatsch und b) wird nicht funktionieren.

Besser:
Java:
try {
 /* ... */
} catch (IOException iox) { //--- nur IOExceptions fangen, dann spart man sich auch die Fallunterscheidung
}

Oder - wenn man denn wirklich auch andere Exceptions fangen muss - z.B. so
Java:
try {
 /* ... */
} catch (IOException iox) { 
  /* spezifische Behandlung der IOException */
} catch (NumberFormatException nfx) { 
  /* spezifische Behandlung der NumberFormatException */
}


Das klappt aber so nicht - bei dem IOException-Block meckert er, dass diese Exception nicht geworfen wird.

@areafo: In den ssh-Logs ist nichts verdächtiges zu sehen.
 

areafo

Mitglied
Schwer zu sagen. Weitere Code Teile? Hast du schonmal was uppen können? Cached du das dann im Dateisystem aufm Server? Größe der Datei? Serverumgebung noch was besonderes?
 

filth

Bekanntes Mitglied
Schwer zu sagen. Weitere Code Teile? Hast du schonmal was uppen können? Cached du das dann im Dateisystem aufm Server? Größe der Datei? Serverumgebung noch was besonderes?

Welche Codeteile sind noch relevant? Die poste ich dann gerne.

Also der Upload funktioniert in der Regel problemlos. Am Wochenende wurden etwa 16.000 Dateien auf diese Art und Weise übertragen, diese Meldung ist bis jetzt die einzige, die ich bekommen habe. Bei der gleichen Person war es (wie zu erwarten) nicht reproduzierbar.

Die Dateigröße liegt bei etwa 1-2 MB.

Der Server ist ein Debian6 System:
Code:
model name      : Intel(R) Core(TM)2 Quad CPU    Q6700  @ 2.66GHz
stepping        : 11
cpu MHz         : 2666.491
cache size      : 4096 KB

Code:
Linux backend1 2.6.32-5-amd64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64 GNU/Linux
 

areafo

Mitglied
Achso wenn es nicht reproduzierbar ist naja. Am besten clientseitig und oder serverseitig noch eine Logmethode implementieren die hin u wieder Error logs irgendwo gesammelt auf dem Server ablegen kann, damit du das Monitoren kannst. Das der Thread gecrashed ist und die Connection beendet wurde kann an allem möglichen liegen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J jsch copy ist das möglich Netzwerkprogrammierung 11
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
B SSH mit Jsch, mehrere Befehle senden Netzwerkprogrammierung 4
C JSch ist nicht dokumentiert Netzwerkprogrammierung 2
M Socket SFTP mit JSCH - Speedproblem Netzwerkprogrammierung 3
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
windl InputStream cachen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
M Socket InputStream liest nicht vollständig Netzwerkprogrammierung 7
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
M Socket InputStream sendet ausgaben von OutputStream zurück Netzwerkprogrammierung 2
D Inputstream to Outputstream Netzwerkprogrammierung 3
M InputStream and ObjectInputStream zur gleichen Zeit Netzwerkprogrammierung 11
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
MQue Inputstream Timeout Netzwerkprogrammierung 2
S Servlet InputStream leer?! Netzwerkprogrammierung 14
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
P Inputstream "verfügbar" Netzwerkprogrammierung 4
G JPG im InputStream Netzwerkprogrammierung 2
A InputStream liest immer komplettes PHP-Script Netzwerkprogrammierung 6
A InputStream ließt nur 65536 Zeichen anstatt ganzer Puffer Netzwerkprogrammierung 8
A inputstream teilen? Netzwerkprogrammierung 4
D InputStream (Socket) mit BufferedInputStream puffern Netzwerkprogrammierung 2
M Sockets und InputStream Netzwerkprogrammierung 8
R Client nimmt den Inputstream nicht an Netzwerkprogrammierung 5
S Mail anhang in InputStream packen Netzwerkprogrammierung 5
M InputStream - Bytes gehen verloren? Netzwerkprogrammierung 3
E Problem bei Sockets/InputStream über externe Klasse Netzwerkprogrammierung 5
André B. In einen InputStream schreiben? Netzwerkprogrammierung 6
G inputstream hat plötzlich weniger inhalt Netzwerkprogrammierung 8
Z ProgressBar auf BufferedOutput- & -InputStream Netzwerkprogrammierung 2
P Socket Socket is closed Netzwerkprogrammierung 22
H Socket Closed Exception verhindern Netzwerkprogrammierung 3
W socketexception socket closed Netzwerkprogrammierung 2
K java.net.SocketException: socket closed Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben