J'ai le code suivant pour le serveur dans C. Le navigateur Web servira de client. Jusqu'à présent, ce que je sais est que je dois exécuter le fichier exécutable à partir du terminal et ouvrir un navigateur Web et tapez: localhost:54321
. 54321 est le numéro de port où nous devons exécuter le serveur Web. La prochaine chose que nous devons faire est d'analyser la requête http reçue du navigateur Web et d'obtenir le nom de l'objet demandé.Création d'un serveur Web simple à l'aide de sockets
Je sais comment analyser mais I don't know how to receive the object
. Devrais-je utiliser form
entrées pour obtenir le nom de l'objet?
Merci à l'avance! Juste un débutant dans la programmation socket et je ne suis capable de créer des sockets.
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int listenfd,connfd;
struct sockaddr_in servaddr,cliaddr;
socklen_t len = sizeof(cliaddr);
char cli_ip[32];
char mesg[1024];
listenfd = socket(PF_INET,SOCK_STREAM,0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(54321);
if (bind(listenfd, (struct sockaddr*) &servaddr, sizeof(servaddr)) < 0){
perror(NULL);
exit(-1);
}
//not present in udp server
listen(listenfd,2);
while(1){
//not present in udp server
connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&len);
inet_ntop(AF_INET,(struct in_addr *) &cliaddr.sin_addr, cli_ip, sizeof(cli_ip));
printf("Client %s connected. \n",cli_ip);
while(1){
memset(mesg,0,sizeof(mesg));
if(recvfrom(connfd,mesg,sizeof(mesg),0,(const struct sockaddr *)&cliaddr,&len) > 0){
printf("From %s port %d: %s",cli_ip,ntohs(cliaddr.sin_port),mesg);
}
else {
printf("Client %s disconnected. \n",cli_ip);
break;
}
}
close(connfd);
}
close(listenfd);
return 0;
}
ÉDITÉ: Voici les spécifications exactes données:
Parse the HTTP request (using strtok) received from the web browser and obtain the name of the object requested. For example, index.html will be sent in the response:
GET /index.html HTML/1.1
Host: localhost:54321
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Pourriez vous vous expliquer plus? En particulier, vous dites "La prochaine chose que nous devons faire est d'analyser la requête HTTP reçue du navigateur web et d'obtenir le nom de l'objet demandé.Je sais comment analyser mais je ne sais pas comment recevoir l'objet." Si le navigateur Web demande un objet, pourquoi fournirait-il cet objet à recevoir? –
@CortAmmon J'ai édité la question ci-dessus avec les spécifications exactes données. Nous devons faire un serveur web simple. – JKTA