Hej und guten Morgen,
ich arbeite derzeit an einem Projekt dass die einfache Übertragung von Dateien zwischen 2 Netzwerk-PCs ermöglichen soll, ohne umständliche Windows Freigaben, zwischengeschaltete Server oder langsame USB Sticks.
Das ganze basiert auf einer TCP Verbindung, in deren NetworkStream blockweise die Bytes der Datei reingeschrieben werden und die am anderen Ende einfach ausgelesen und in eine neue Datei gepackt werden.
Die Methode zum Senden sieht in etwa so aus:
Spoiler anzeigen
Die Methode zum Empfangen sieht so aus:
Spoiler anzeigen
Bei 9 von 10 Transferen funktioniert alles einwandfrei. Gestern jedoch wollten wir eine ca. 1,2GB große ISO Datei versenden, die sich am Ende nicht mehr öffnen lies.
Heute habe ich es spaßeshalber nochmal mit einer ~530MB großer ZIP Datei versucht, deren Inhalt unversehrt blieb. Jedoch ist mir aufgefallen, dass die empfangene Datei 1 Byte größer ist. Ob dies bei der ISO auch der Fall war, kann ich aber nicht mehr sagen, da ich weder das Original, noch die Kopie besitze.
Ich habe wirklich nicht den geringsten Schimmer woran das liegen könnte aber vielleicht hat ja jemand schon ein ähnliches Problem gehabt, oder sieht wo mein Fehler ist.
Danke im Voraus
Grüße
Vainamo
*Topic verschoben*
ich arbeite derzeit an einem Projekt dass die einfache Übertragung von Dateien zwischen 2 Netzwerk-PCs ermöglichen soll, ohne umständliche Windows Freigaben, zwischengeschaltete Server oder langsame USB Sticks.
Das ganze basiert auf einer TCP Verbindung, in deren NetworkStream blockweise die Bytes der Datei reingeschrieben werden und die am anderen Ende einfach ausgelesen und in eine neue Datei gepackt werden.
Die Methode zum Senden sieht in etwa so aus:
C#-Quellcode
- using (var stream = new FileStream(controller.Transfer.FilePath, FileMode.Open, FileAccess.Read)) {
- using (var reader = new BinaryReader(stream)) {
- while (controller.BytesSent < controller.Transfer.FileSizeBytes) {
- var buffer = reader.ReadBytes(1048576);
- controller.BytesSent += buffer.Length;
- controller.Transfer.Connection.BinaryWriter.Write((byte) ProtocolCode.Data);
- controller.Transfer.Connection.BinaryWriter.Write(buffer);
- controller.Transfer.Connection.BinaryWriter.Flush();
- controller.ReportProgress();
- }
- }
- }
- controller.Transfer.Connection.BinaryWriter.Write((byte) ProtocolCode.End);
- controller.Transfer.Connection.BinaryWriter.Flush();
Die Methode zum Empfangen sieht so aus:
C#-Quellcode
- var stream = new FileStream(controller.Transfer.FilePath, FileMode.Create, FileAccess.Write);
- var writer = new BinaryWriter(stream);
- while (!stop) {
- try {
- if (controller.Transfer.Connection == null)
- continue;
- var code = (ProtocolCode) controller.Transfer.Connection.BinaryReader.ReadByte();
- if (code == ProtocolCode.End)
- break;
- var buffer = controller.Transfer.Connection.BinaryReader.ReadBytes(1048576);
- writer.Write(buffer);
- writer.Flush();
- controller.BytesSent += buffer.Length;
- } catch {
- break;
- }
- }
- GC.Collect();
- writer.Flush();
Bei 9 von 10 Transferen funktioniert alles einwandfrei. Gestern jedoch wollten wir eine ca. 1,2GB große ISO Datei versenden, die sich am Ende nicht mehr öffnen lies.
Heute habe ich es spaßeshalber nochmal mit einer ~530MB großer ZIP Datei versucht, deren Inhalt unversehrt blieb. Jedoch ist mir aufgefallen, dass die empfangene Datei 1 Byte größer ist. Ob dies bei der ISO auch der Fall war, kann ich aber nicht mehr sagen, da ich weder das Original, noch die Kopie besitze.
Ich habe wirklich nicht den geringsten Schimmer woran das liegen könnte aber vielleicht hat ja jemand schon ein ähnliches Problem gehabt, oder sieht wo mein Fehler ist.
Danke im Voraus
Grüße
Vainamo
*Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()