Entwickler-Ecke
Netzwerk - File senden und empfangen
Tru5T - Mi 19.03.14 16:40
Titel: File senden und empfangen
Hey,
ich würde gerne mit C# ein File vom Client zum Server schicken. Mein Code funktioniert bisher allerdings nur mit Files die ca. 25MB groß sind.
Ich kann mir leider nicht erklären, warum diese Grenze meinem Code probleme bereitet... Vielleicht kann mir jemand von euch einen Tip geben?
Danke!
EMPFANGEN: (clientData, ist der NetworkStream)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| using (FileStream fs = new FileStream(pathToTarget + received.Filename, FileMode.Create)) { int readCount = 0; while (readCount < received.FileLength) { if(clientData.DataAvailable) { Byte[] buffer = new Byte[1024]; readCount += clientData.Read(buffer, 0, buffer.Length); if (readCount > received.FileLength) { long lastPart = received.FileLength - (readCount - buffer.Length); fs.Write(buffer, 0, (int)lastPart); break; } fs.Write(buffer, 0, buffer.Length); } } fs.Close(); clientData.Close(); if (!received.getFileHash(pathToTarget + received.Filename).Equals(received.HashFile)) { MessageBox.Show("File transmission failed! (File deleted!)"); } break; } |
SENDEN:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| bytes = new Byte[1024]; while (true) { int readCount = fs.Read(bytes, 0, bytes.Length); nsStream.Write(bytes, 0, bytes.Length); if (readCount == 0) { break; } } |
Grüße
Tru5T
Moderiert von Th69: Codeformatierung überarbeitet.
Th69 - Mi 19.03.14 17:18
Hallo und :welcome:
du solltest nur soviel senden, wie du auch im
FileStream gelesen hast, also
C#-Quelltext
1:
| nsStream.Write(bytes, 0, readCount); |
Gleiches gilt beim Empfangen (so daß du hier eine lokale Variable benötigst):
C#-Quelltext
1: 2: 3:
| int count = clientData.Read(buffer, 0, buffer.Length); readCount += count; fs.Write(buffer, 0, count); |
Ob das die alleinige Ursache für dein 25MB Problem ist, kann ich allerdings nicht sagen.
Du hättest aber merken müssen, daß die Dateien inhaltlich nicht korrekt übertragen worden sind (z.B. an der Dateigröße)...
Tru5T - Do 20.03.14 14:48
Hey Th69,
danke für die schnelle Hilfe! Mein Problem wurde dadurch behoben!
Ich bin davon ausgegangen, dass der Buffer immer voll geschrieben wird und erst danach versendet...
Du hast recht die Dateien wurden nur bis 25MB korrekt übertragen alles was drüber war hatte einen ca. 800Byte großen null Block zwischen drinn, denn ich mir nicht erklären konnte...
Grüße
Tru5T
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!