2009-07-01 7 views
0

Ich habe Server-Programm erstellt, die eine Bilddatei an den Client senden wird. Mein Programm funktioniert gut, wenn das Bild von 512 Byte ist. Aber es funktioniert gut für große Dateien.wie eine Bilddatei über das Netzwerk mit Socket-Kanal senden

In diesem Fall bekomme ich nicht das genaue Bild, das ich bekommen soll. bedeutet, dass mein wiederhergestelltes Bild in einer unpassenden Weise ist. So, wie man dieses Problem löst

Ich benutze Java-Socket-Kanal und Java Nio in Server während einfache Socket in Client-Seite.

Dank Sunil

Antwort

1

Hier ist dein Fehler:

while(fileChannel.read(buffer)>0) 

Die read() Methode wird nicht unbedingt den Puffer füllen; Es liest eine beliebige Anzahl von Bytes und gibt diese Nummer zurück. Sie müssen den Fall berücksichtigen, dass es weniger als die Kapazität des Puffers liest und nur so viele Bytes schreibt, was auch notwendig ist, da die Dateigröße nicht unbedingt ein Vielfaches Ihrer Puffergröße ist und der letzte Lesevorgang fast nie genau den Puffer füllt .

Das gleiche gilt auf der Client-Seite - available() ist hier nicht sinnvoll, Sie müssen einfach lesen und dann mit so vielen Bytes umgehen, die Sie bekommen haben.

0

Ich sehe Sie nicht spülen und schließen Sie Ihren Ausgabestrom auf der Clientseite. Wenn Sie ausbrechen, sollten Sie den Ausgabestream schließen() und alle zwischengespeicherten Daten werden in die Datei geschrieben.