FTP Nochmal wachsende Datei per FTP lesen

peez

Bekanntes Mitglied
Habe es jetzt hinbekommen, dass ich überhaupt eine Datei vom FTP-Server lesen kann, die gerade von jemand anderem geschrieben wird. Das war eine Server-Einstellung.
Jetzt habe ich das Problem, dass entgegen der Erwartung, irgendwann einfach keine Daten mehr kommen. Mein Code sieht so aus:
Java:
byte buf[] = new byte[getReadBuffer()];
	int len;
	boolean doRead = true;
	long bytesRead = 0;
	long readStopTimestamp = 0l; // An diesem Zeitstamp wurde aufgehört zu
				     // lesen, wird auf 0 zurückgesetzt wenn
				     // wieder Daten verfügbar sind

	try {

	    while (doRead) {

		len = inputStream.read(buf);
		
		if (len != -1) {
		    bytesRead += len;
		    onRead(buf, 0, len);

		    if (readStopTimestamp > 0) {
			readStopTimestamp = 0;
		    }
		} else {
		    if (readStopTimestamp == 0) {
			readStopTimestamp = System.currentTimeMillis();
		    }
		    
		    if (System.currentTimeMillis() > readStopTimestamp + 10000) {
			doRead = false;
		    }else{
        		    try {
        			Thread.sleep(1000);
        		    } catch (InterruptedException e) {
        		    }
		    }

		}
	    }
	} catch (IOException e1) {
	    // TODO Auto-generated catch block
	    e1.printStackTrace();
	}

Die Theorie: Er liest bis keine Daten mehr kommen (-1). Dann wartet er eine Sekunde und versucht wieder zu lesen. Wenn wieder keine Daten kommen wird eine weitere Sekunde gewartet usw..
Wenn dann für 10 Sekunden keine Daten mehr kommen, wird die Datei als fertig angesehen.

Das Problem ist, dass wenn einmal die -1 zurückgegeben wird, einfach keine Daten mehr kommen obwohl die Datei wächst und wächst.

Jemand ne Idee bzw. Erfahrung mit FTP-Servern? Liegt das an mir oder am Server? Ich verwende hier FileZilla zum Testen.
 

AFlieger

Mitglied
Ich vermute, dass es an dir liegt.

Das hier dürfte das Codefragment sein:
Java:
if (System.currentTimeMillis() > readStopTimestamp + 10000)
{
doRead = false;
}

System.currentTimeMillis() liefert die aktuelle Zeit in Millisekunden seit dem 01.01.1970, wenn ich das richtig im Kopf habe.
Und dieser Wert wird unter Garantie immer größer sein als readStopTimestamp + 10000.

Somit trifft deine Abbruchbedingung schon beim ersten Auftreten des Wertes -1 zu.
 

peez

Bekanntes Mitglied
Nee readStopTimestamp ist schon richtig gefüllt. Wenn das erste mal len == -1 ist, dann wird der ja auf den aktuellen Timestamp (Zeile 24). In den nächsten Durchgängen wird das dann entweder auf 0 zurückgesetzt, wenn wieder Daten verfügbar sind oder mit System.currentTimeMillis() verglichen.
 

bERt0r

Top Contributor
Na ich rate mal dein FTP Server hört zu lesen auf wenn das Ende der Datei erreicht wurde, infolgedessen sendet er auch nichts mehr. Warum willst du überhaupt eine wachsende Datei mit ftp downloaden, das klingt mehr nach Streaming als File Transfer.
 

peez

Bekanntes Mitglied
Dabei gehts darum, so schnell wie möglich die Checksummen zu generieren von den Files die geschrieben werden. Deshalb wird direkt gelesen sobald die Datei im Verzeichnis auftaucht (anders scheint es eh nur sehr unzuverlässig zu sein - habe gesehen dass (jedenfalls hier beim Filezilla) eine Datei mit ca. 350MB nach 70 MB im Dirlisting des FTP-Servers stehen bleibt und erst ganz am Ende die finale Größe angezeigt wird).

Hm ja wenn das Dateiende erreicht ist hört er auf. Aber im nächsten Durchlauf sollte dann doch wieder was da sein das er senden kann?!
 

HoaX

Top Contributor
Der Server liest halt solange bis er das Ende erreicht hat, dann wird der Transportsocket geschlossen. Woher soll er auch wissen dass noch jemand die Datei zum Schreiben offen hat und _evtl_ noch weitere Daten kommen?

Bei Java kommt nur -1 wenn das Ende erreicht ist, und dann bleibt das auch so. Denn würde er plötzlich weiter gehen dann wäre es ja vorher nicht das Ende gewesen und es hätte keine -1 kommen dürfen...
 

peez

Bekanntes Mitglied
Hmm... Und wie soll man dann mit Java in einem Strom lesen so viel eben kommt? (Wenn z.B. die Lese-Verbindung schneller als die Schreib-Verbindung ist)

Mal ganz unabhängig von FTP, wenn man z.B. selbst ein Socket aufmacht und eben die Länge nicht im Voraus überträgt oder nicht weiß..
 

HoaX

Top Contributor
-1 kommt dann wenn der Socket geschlossen wird/das Ende des Streams erreicht ist.
Wenn nichts mehr kommt weil gerade die Gegenseite nicht schickt, aber durchaus nochmal irgendwann Daten kommen können, dann kommt halt ne 0, is doch eingentlich logisch?!
 

bERt0r

Top Contributor
Das problem ist, dass ein normaler FTP server sowas was du möchtest nicht unterstützen dürfte. Du wirst dir selber einen Server schreiben müssen für dein Unterfangen.
 

HoaX

Top Contributor
Selbst dass wird ihm nichts bringen, außer er kann feststellen wann das Programm, das die Datei schreibt, damit fertig ist, und das dürfte ohne API dieses Programms hoffnungslos sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Nochmal UDP Netzwerkprogrammierung 10
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
C PCAP Datei auslesen Netzwerkprogrammierung 8
F Applet Datei Zugriff Netzwerkprogrammierung 13
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
M Datei auf Remoteserver kopieren Netzwerkprogrammierung 8
B Datei speichern unter Netzwerkprogrammierung 10
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben