2 Stimmen

C, HTTP 1.1 und Socket-Send-Probleme

Als Ergänzung zu meinem früheren Beitrag über Erstellen eines Webservers in reinem C Ich habe einige Probleme mit der Sendefunktion. Hier sind zwei Codeschnipsel:

int Send(char *message)
{
        int length, bytes_sent;
        length = strlen(message);

        bytes_sent = send(connecting_socket, message, length, 0);

        return bytes_sent;
}

Dieser Code sendet void * an den aktuellen Socket. Funktioniert wie ein Zauber!

Jetzt kommt das SendHTML

void SendHTML(char *Status_code, char *Content_Type, char *HTML)
{
        char *head = "\r\nHTTP/1.1 ";
        char *content_head = "\r\nContent-Type: ";
        char *server_head = "\r\nServer: PT06";
        char *length_head = "\r\nContent-Length: ";
        char *date_head = "\r\nDate: ";
        char *newline = "\r\n";
        char Content_Length[100];
        int content_length = strlen(HTML);

        sprintf(Content_Length, "%i", content_length);

        char *message = malloc((
                strlen(head) +
                strlen(content_head) +
                strlen(server_head) +
                strlen(length_head) +
                strlen(date_head) +
                strlen(newline) +
                strlen(Status_code) +
                strlen(Content_Type) +
                strlen(Content_Length) +
                content_length +
                sizeof(char)) * 2);

        if ( message != NULL )
        {
                time_t rawtime;

                time ( &rawtime );

                strcpy(message, head);

                strcat(message, Status_code);

                strcat(message, content_head);
                strcat(message, Content_Type);
                strcat(message, server_head);
                strcat(message, length_head);
                strcat(message, Content_Length);
                strcat(message, date_head);
                strcat(message, (char*)ctime(&rawtime));
                strcat(message, newline);
                strcat(message, HTML);

                Send(message);

                free(message);
        }     
}

Wenn ich hinzufügen würde

Send("Oh end of HTML Sending eh?");

nach Send(message) und vor free(message) wird dies nicht an den Browser gesendet?

Ich dachte mir, dass dies ein Problem mit HTTP 1.1 sein könnte. Sagt der RFC, dass ich nur einmal senden kann? Schließt der Browser die Verbindung, nachdem er die erste Nachricht erhalten hat?

Wie kann ich das Problem lösen, damit ich Folgendes tun kann?

SendHTML("200 OK", "text/plain", "HAaaaii!!");
Send("lolwut?");

Dies sollte dazu führen, dass der Browser angezeigt wird:

HAaaaii!! lolwut?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X