En plus de mon post précédent sur Creating a web server in pure C, j'ai quelques problèmes avec la fonction d'envoi. Voici deux extraits de code:C, HTTP 1.1 et Socket Envoyer des problèmes
int Send(char *message)
{
int length, bytes_sent;
length = strlen(message);
bytes_sent = send(connecting_socket, message, length, 0);
return bytes_sent;
}
Ce code envoie void * à la prise de courant. Fonctionne comme un charme!
Maintenant vient ici le 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);
}
}
Si je devais ajouter
Send("Oh end of HTML Sending eh?");
après Send(message)
et avant free(message)
, cela ne soit pas envoyé au navigateur? J'ai pensé que cela pourrait être un problème de HTTP 1.1, est-ce que le RFC dit que je ne peux faire qu'un seul Send? Est-ce que le navigateur Ferme la connexion après avoir reçu le premier message?
Comment puis-je résoudre ce que je puisse faire ce qui suit:
SendHTML("200 OK", "text/plain", "HAaaaii!!");
Send("lolwut?");
Cela devrait entraîner la projection du navigateur:
HAaaaii !! lolwut?
Ce n'est pas bon, n'est-ce pas? –