dragonabllz
Ensign
- Registriert
- Mai 2011
- Beiträge
- 254
Hi Leute,
ich versuche jetzt Blockweise eine Datei (Bilder, txt usw...) binär über einen Socket zu senden.
Ich habe eine Datei auch schon geschafft KOMPLETT zu versenden mit dynamischen Speicher, aber davon ist ja abzuraten, weil man nicht weiß wie groß die Datei ist.
Also hab ich mich bischen eingelesen und gesehen, dass man Dateien auch "Blockweise" versenden kann. Ich verstehe da aber so vieles noch nicht. Ist mein Grundgedanke so richtig: Nachdem ich die Header-Datei an den Browser gesendet habe, versende ich die Datei als Body. Das Versende sieht dann wie folgt aus:
1. Ein Array mit sagen wir mal 1024 Bytes erstellen (soll als Puffer dienen)
2. Datei öffnen mit fopen();
3. Datei einlesen in das Array mit fread() ??
4. Datei schreiben mit fwrite(); (Kann man hier auch das normale write nehmen?)
* Punkt 3 und 4 in einer Schleife laufen lassen, bis Datei komplett gesendet wurde (abfrage mit feof)
In Code wäre das so? :
Achtung: ich habe jetzt Fehler nicht abgefangen wenn z.B. die Datei nicht geöffnet werden kann oder so... das ist jetzt nur ein grober Code...
Hab ich das richtig verstanden, dass der Code dann so abläuft intern: Es werden aus der binärdatei bis 1024 Byte eingelesen, ins "block"-Array gespeichert, dann werden diese in das über den Socket an den Browser versendet. Dann widerrum wird das "block"-Array automatisch geleert??? und neue 1024Bytes eingefügt und dies solange, bis die Datei vollständig gesendet wurde?
ich versuche jetzt Blockweise eine Datei (Bilder, txt usw...) binär über einen Socket zu senden.
Ich habe eine Datei auch schon geschafft KOMPLETT zu versenden mit dynamischen Speicher, aber davon ist ja abzuraten, weil man nicht weiß wie groß die Datei ist.
Also hab ich mich bischen eingelesen und gesehen, dass man Dateien auch "Blockweise" versenden kann. Ich verstehe da aber so vieles noch nicht. Ist mein Grundgedanke so richtig: Nachdem ich die Header-Datei an den Browser gesendet habe, versende ich die Datei als Body. Das Versende sieht dann wie folgt aus:
1. Ein Array mit sagen wir mal 1024 Bytes erstellen (soll als Puffer dienen)
2. Datei öffnen mit fopen();
3. Datei einlesen in das Array mit fread() ??
4. Datei schreiben mit fwrite(); (Kann man hier auch das normale write nehmen?)
* Punkt 3 und 4 in einer Schleife laufen lassen, bis Datei komplett gesendet wurde (abfrage mit feof)
In Code wäre das so? :
Code:
char Blockarray[1024] block;
FILE* f = fopen(”...”,”rb”);
while(!feof(f)){
fread(block, sizeof(block),1,f);
fwrite(sockfd,sizeof(block),1,f);
}
Hab ich das richtig verstanden, dass der Code dann so abläuft intern: Es werden aus der binärdatei bis 1024 Byte eingelesen, ins "block"-Array gespeichert, dann werden diese in das über den Socket an den Browser versendet. Dann widerrum wird das "block"-Array automatisch geleert??? und neue 1024Bytes eingefügt und dies solange, bis die Datei vollständig gesendet wurde?