InputStream - Bytes gehen verloren?

Status
Nicht offen für weitere Antworten.

milanwb

Aktives Mitglied
Hallo danke im Vorraus für eure Hilfe!

Ich habe folgendes Problem mit meiner Client-Server Anwendung:

Der Server soll dem Client Dateien zusenden. Dies geschieht bei größeren Dateien fast vollständig, doch beim Client kommen immer etwa 1-2 Kbyte weniger an. Die Folge ist dann, dass die Datei beschädigt ist...
Versucht man Dateien mit einer größe von ein paar Kbyte zu versenden, dann funktioniert nur der Sendevorgang, der Client erhält nichts!

Hier mal ein Codeschnipsel der Sende/Empfangsfunktion:


Der Server:

Code:
File fl = new File( daten.get(Integer.parseInt(dateiname)).toString()   );  //Dateiname wird von einer anderen Funktion übergeben (Datei wird auch vollständig gelesen)
             

             
             FileInputStream file = new FileInputStream(daten.get(Integer.parseInt(dateiname)).toString() );
             
             BufferedOutputStream out = new BufferedOutputStream(client.getOutputStream());
             
             byte[] buffer = new byte[1024];
            
             while (file.read(buffer) != -1) {
                 out.write(buffer);              
                 
             }

             out.close();
             file.close();
             client.close();  // Die Socketverbindung


Und der Client:

Code:
byte[] buffer = new byte[1024]  ;
          int n;

          while ( (n = fileIn.read(buffer)) != -1) {
            
              
            fileStream.write(buffer,0,n);
            count++;
                        
          }

          fileStream.close();
          fileIn.close();
          sock.close();

Ich probiere nun schon den ganzen Abend den Fehler zu finden, doch vergebens! Hoffe ihr könnt mir weiter helfen!

Danke im Vorraus

Micha
 
Wieso lesen die Leute eigentlich nie in der API nach, was write und read genau machen? Dass der Buffer nicht vollständig gelesen oder gefüllt wird, steht da ziemlich klar... (und dass der Rückgabewert was mit der Anzahl gelesener/geschriebener bytes zu tun hat, auch). :?
 
Das war mir dann nachher auch klar.. Aber wie kann man denn die Bytes vollständig laden? Funktioniert dabei dann die andere read methode?
Also read(buffer,int off, int len)? Aber gäbs dann nicht ein Problem, wenn der Buffer nur 1000 bytes hat und nicht die vollständigen Bytes?

Kannst du mir bitte mal einen Verbesserungsvorschlag bzw die Apistelle angeben, in der steht wie genau man die Funktion dann anwenden muss, weil irgendwie weiß ich nicht wie ich die Funktion dann anwenden soll....
 
Mach den Server halt gleich wie den Client write(buffer,0 ,n) ... dann wirds laufen...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben