Hallo zusammen,
ich hab folgendes Problem: ich will eine Datei von einem PC, auf dem ein Java-Server läuft, an einen Client (der in C# geschrieben ist) schicken. Der Client hat einen Zähler, damit we weiß, wie viele Byte-Pakete er noch empfangen muss, bis die Datei vollständig ist. Das hier ist der Code-Ausschnitt, der interessant ist:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| while (pakete > 1024) { reader.Read(puffer, 0, 1024); datei.Write(puffer, 0, 1024); pakete -= 1024; } |
Wenn ich die fertige Datei dann am Ende überprüfe, dann stimmt die Byte-Zahl exakt, aber leider steht zu großen Teilen Müll drin. Wenn ich die Quelldatei und die Zieldatei mit UltraEdit vergleiche, dann ist es so, dass in der Zieldatei immer wieder Blöcke einfach falsche Daten enthalten.
Außerdem liegen danach noch immer mehrere "Byte-Pakete" in meinem Socket. Also hat die Read-Funktion ja irgendwo noch ein paar Bytes aus dem Hut gezaubert...
Ich hab folgende 2 Lösungen gefunden, damit die Datei korrekt übertragen wird und im Socket keine Daten zurückbleiben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| while (pakete > 1024) { reader.Read(puffer, 0, 1024); datei.Write(puffer, 0, 1024); pakete -= 1024; System.Threading.Thread.Sleep(1); } |
C#-Quelltext
1: 2: 3: 4: 5: 6:
| while (pakete > 1024) { puffer = reader.ReadBytes(1024); datei.Write(puffer, 0, 1024); pakete -= 1024; } |
Kann mir bitte einer erklären, wie dieses Verhalten zustande kommt ?