[C++] Webserver, Dateien Binät versenden

T

t0day

Moin,

aktuell schreibe ich mir einen Simplen Webserver. HTML funktioniert ohne Probleme (Ist ja auch nicht sonderlich schwer, das zum laufen zu bringen), doch bei dateien, die Binär gesendet werden müssen, habe ich ein Problem:

Mein Aktueller Code für HTML/Textdateien:
file = ifstream, Datei die der Browser haben will
body = std::string, Inhalt der Nachricht: Server -> Browser ohne HTTP-Header
Code:
		vector<string> v;
		string line;
		string buf("");
		while(getline(file, line))
			v.push_back(line);
		for(int i =0;i <v.size(); i++)
			buf += v[i];
		body += buf;

Dies funktioniert leider nicht mit Binären Dateien, wie z.B. einem Bild. Hat jemand einen Vorschlag wie ich dies lösen kann?
 
Hallo,

findest du dein Vorgehen nicht etwas umständlich? Erst zerlegst du die Datei in Zeilen und legst diese in einem Vector ab. Anschließend baust du die Zeilen in einer temporären Variable (buf) wieder zusammen (und verlierst damit im übrigen sämtliche Zeilenumbrüche – vermutlich auch das Problem bei Binärdateien) und hängst das Ergebnis dann an body an.

Lies die Datei stattdessen direkt ein:
C++:
file.seek(0, ios::end);
int length = file.tellg();
file.seek(0, ios::beg);

char *buf = new char[length];
file.read(buf, length);
body.append(buf, length);
delete[] buf;

Allerdings funktioniert das nur für kleine Dateien gut, da der komplette Inhalt mindestens zweimal in den Hauptspeicher passen muss. Wieso speicherst du den Body überhaupt zwischen?

Grüße,
Matthias
 
Zurück