Proxic hat geschrieben:Meinst du auch mit der oben genannte Änderung an dem Code oder so wie es da oben auch steht? Ich habe es jetzt mal mit der Änderung oben probiert un es funktioniert nicht.
Ich meinte da noch gar nix, das war nur, was mir flott einfiel, weil ich dann weg musste, bevor ich das durchlesen konnte. ^^
Proxic hat geschrieben:Da sind ja auch schon zwei leere Zeilen? Ich mache zwei mal ein \r\n hinter dem letztem Header, also in dem Fall oben nach dem Content-Length Header. Ich habe es jetzt aber auch noch einmal mit einer zusätzlichen Zeile probiert aber es funktioniert immer noch nicht.
Gibt's 'ne Chance, dass man das Ding in Aktion sehen kann? Ich sehe hier ja immer nur einzelne Funktionen und kann den Rest nur raten.
Proxic hat geschrieben:Das hört sich ja gut an. Ich hatte schon ein wenig Angst, weil mir hier vielleicht niemand helfen kann oder ähnliches aber da scheine ich ja dann doch Glück gehabt zu haben. Vielleicht bist du ja auch nicht der einzige hier aber das weiß ich nicht.
Das Forum ist zur Zeit sehr ruhig und ich bin der Hausmeister hier.
Proxic hat geschrieben:Derzeit funktioniert mein Programm wie bereits gesagt soweit, als das ich html- und Textdateien und natürlich einen gültigen Header als Response zurückliefere aber ebend Bild- und Javascriptdateien bspw. nicht. Jetzt wo du das aber mit dem Pointer aufzeigst, frage ich mich auch warum das so bis jetzt funktioniert, weil ich ja auch bspw. keinen Speicherbereich freigebe? Der Typ sollte ja auch eigentlich ein char sein, würde ich mal sagen. Hmm ...
Joah, würde ich auch sagen.
Wozu brauchst Du den ptr überhaupt...?
Code: Alles auswählen
int send_resource(int nsockfd, int fd) {
char buf[FILE_BUF] = {0};
int bytes_to_write = read(fd, buf, sizeof(buf));
if(bytes_to_write < 0) {
exit(1);
}
Hier holst Du Dir ein Array der Größe FILE_BUF und lädst eine Datei ein, aber maximal soviel, wie der Buffer groß ist. Ist die Datei größer, fehlt halt ein Stück... das könnte bei Bildern relevant werden...
Code: Alles auswählen
char *ptr = malloc(strlen(buf) + 1);
if(ptr == NULL)
exit(1);
Hier holst Du Dir Speicher in der Größe der Datei, die Du gerade eingelesen hast - und zwar bis zum ersten Null-Byte. Nullbytes können in Bildern häufiger vorkommen. Ich vermute "bytes_to_write" entspricht eher dem, was Du machen möchtest.
Was Du mit Sicherheit nicht machen willst ist, was Du als nächstes tust.
Du hast also Speicher geholt und Dir in ptr gemerkt, wo der Speicher ist. Dann überschreibst Du ptr mit der Adresse von buf.
Code: Alles auswählen
while(bytes_to_write > 0) {
int bytes_written = write(sockfd, ptr, bytes_to_write);
if(bytes_written <= 0) {
exit(1);
}
bytes_to_write -= bytes_written;
ptr += bytes_written;
}
return 1;
}
Und hier gibst Du den Kram an den Socket.
Das sieht auch gut aus.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.