[socket]Problème lecture sur socket client

Freedandan -  
 jiji_fun -
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!
A voir également:

4 réponses

Freedandan
 
Personne n'a d'idée sur le sujet? Cela doit bien être possible, non?

Merci par avance
0
Freedandan
 
Je vous en prie! Aidez-moi! C'est vital...
Merci
0
zabbi Messages postés 35 Statut Membre 4
 
slt.
vraiment pour savoir le probleme il faut tester le programme lancer le serveur ensuite le client.

d'abord essaie de voir est ce que le serveur marche (fonction listen et connect surtout) pour cela tu dois essayer d'echanger des simples messages entre le client et le serveur.

c sa marche alors tu reviens sur le pb de buffer.
moi sa fait un an que j'ai travaillé sur les sockets(réalisation d'un mini chat transfert de fichier ) alors je
peux t'aider s'il ya pb.

A+
0
Freedandan > zabbi Messages postés 35 Statut Membre
 
Salut!

Merci beaucoup pour ta réponse! Il y a un petit problème, c'est que je ne peux pas lancer de socket serveur!

En fait à terme, je dois récuperer et retraiter des pages web qui se situent sur un serveur web implanté dans une carte électronique contenant un microcontroleur simple, sur laquelle on ne peut donc pas implanter de programme.

Je souhaite donc effectuer la même manipulation que d'envoyer une requête HTML via le navigateur web mais en C. Par exemple taper dans la barre d'addresse:
http://192.168.0.5/index.html

Le but étant que la carte électronique renvoie à la socket client le code HTML de la page voulue et que je puisse stocker ca dans un ficher pour ensuite le retraiter.

Cela te paraît-il possible?

Merci d'avance
0
freedandan > zabbi Messages postés 35 Statut Membre
 
Je suis désolé de relancer comme cela mais aurais tu une idée pour moi Zabbi, ou même quelqu'un d'autre?

Merci d'avance
0
zabbi Messages postés 35 Statut Membre 4 > freedandan
 
slt.
je vois que ton projet est trés poussé .

lol
tous ce que je peux c de t'envoyer un programme qui permet de transferer un fichier .
le serveur cherche le nom fournie par le client et l'envoi.
tu peux ajouter une fonction remove pour supprimer le fichier(qui est la page web dans ton cas)
j'attends votre reponse.
a+
0
Freedandan
 
Bonjour,

Merci pour ta réponse. Tout programme utilisant des sockets m'interesse donc effectivement si tu pouvais m'envoyer ça, ça serait très sympa!

Mon adresse mail est freedandan (at) hotmail . com

Merci d'avance.
0
jiji_fun
 
salut!
dsl si je perturbe un peu la discussion, mais j'ai aussi un blem dans la socket, je sais k cela permet d'établir une communication entre les différentes applications, et que sous visual C++ il y a des classes MFC(Winsock) qui aident à réaliser ce labour, ce que j'aime savoir c'est comment utiliser ces classes, et est ce qu'il ya klk1 qui a un exemple d'application pour bien comprendre de quoi s'agit il?
merci d'avance
0