Bonjour à tous,
Voila je débute en programmation de socket et j'ai un petit probleme avec la lecture de la reponse du serveur.
Je souhaite programmer une socket client en langage C (située sur l'ordinateur client) qui se connecte à mon serveur (adresse IP 192.168.0.5) et qui récupère le code HTLM de la page index.html servie par défaut lorsque j'utilise une connexion directe par le navigateur.
J'ai écrit un bout de code pour cette socket mais je bloque déjà! La connexion s'établit correctement car le message "Connexion etablie" apparaît bien à l'écran. Mais après ceci, le programme semble tourner en boucle infinie sur le "read" en attente d'un retour du serveur je suppose.
Ma question est la suivante: Que dois-je faire pour obtenir le code de la page web dans la variable "buf"?
Voici le bout de code:
#include <stdio.h>
#include <netdb.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERV "192.168.0.5"
#define PORT 80
int main()
{ int port,sock;
struct sockaddr_in serv_addr;
struct hostent *serveur;
char *buf[300];
int resultat;
port = PORT;
serveur = gethostbyname(SERV);
if (!serveur){fprintf(stderr, "Problème serveur \"%s\"\n",SERV);exit(1);}
sock = socket(AF_INET, SOCK_STREAM, 0);
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy(serveur->h_addr, &serv_addr.sin_addr.s_addr,serveur->h_length);
serv_addr.sin_port = htons(port);
if (connect(sock, &serv_addr, sizeof(serv_addr)) < 0)
{perror("Connexion impossible");exit(1);}
printf("connexion etablie\n");
resultat = read(sock,buf,200);
printf("Resultat lecture = %d\n",resultat);
}
J'ai cependant essayé de faire un " write (sock,"bonjour",80); " avant le read pour voir si le serveur réagissait. Ceci a eu pour effet de générer un message d'erreur du serveur en réponse à mon message, mais bien entendu pas la page HTML souhaitée!
Merci de votre aide!
Configuration: Windows XP
Firefox 2.0
+
iBook Mac OS X (Serveur Apache activé)