![]() |
![]() |
|
![]() |
![]() |
|
Registrieren | Hilfe/Forumregeln | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Jr. Member
![]() Registriert seit: 27.12.2003
Beiträge: 56
|
![]() Hi Leute,
Ich suche nun schon sehr lange nach dem Fehler, aber ich finde es einfach nicht. hoffe ihr könnt mir helfen ![]() Klasse für FileTransfer enthält diese Methoden Code:
public static void sendFile(String filename, OutputStream out) { DataOutputStream dataout = new DataOutputStream(out); int i; byte[] buffer = new byte[1024]; try { InputStream in = new FileInputStream(filename); while( (i = in.read(buffer)) > 0) { System.out.println("transmitting @ remote"); dataout.write(buffer, 0, i); } System.out.println("transmission completed @ remote"); dataout.flush(); in.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void receiveFile(String filename, InputStream in) { DataInputStream datain = new DataInputStream(in); int i; byte[] buffer = new byte[1024]; try { OutputStream out = new FileOutputStream(filename); while( (i = datain.read(buffer)) != -1) { System.out.println("transmitting @ local"); System.out.println("i is: "+i); System.out.println("buffer: "+buffer); out.write(buffer, 0, i); System.out.println("i is: "+i); } System.out.println("transmission completed @ local"); out.flush(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Code:
while( (i = datain.read(buffer)) != -1) { System.out.println("transmitting @ local"); System.out.println("i is: "+i); System.out.println("buffer: "+buffer); out.write(buffer, 0, i); System.out.println("i is: "+i); } System.out.println("transmission completed @ local"); das transmission completed wir nicht mehr ausgegeben. die Ausgabe sieht so aus transmitting @ local i is: 6 buffer: [B@bb6ab6 i is: 6 der server kommt bis zum transmission completed. achja zum Senden verwende ich Inputstream vom client bzw. server weiss einer von euch wieso es nicht funktioniert?
____________________________________
cYa TimmyX |
![]() |
![]() |
![]() |
#2 | |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() Kurz gesagt: Weil read blocking ist.
Erklärung: Der .read() Befehl blockiert solange bis es etwas zu lesen gibt. Das der Server inzwischen den Socket geschlossen hat bekommt er nicht mit. Zitat:
Die einzigen Möglichkeiten die ich kenne das zu vermeiden sind: 1.) Der Client weiß wie viele Zeichen er noch lesen darf ohne das .read() blockiert (siehe auch .available()). 2.) Es gibt einen Code oder ein Zeichen das das Ende der Übertragung anzeigt (z.B. '.' beim SMTP Protokoll). jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
|
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|