# InputStream - Bytes gehen verloren?



## milanwb (18. Jun 2006)

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:


```
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:


```
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


----------



## Beni (19. Jun 2006)

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). :?


----------



## milanwb (19. Jun 2006)

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....


----------



## meez (19. Jun 2006)

Mach den Server halt gleich wie den Client write(buffer,0 ,n) ... dann wirds laufen...


----------

