Rechercher : dans
Par :

[socket]Problème lecture sur socket client

Dernière réponse le 19 mar 2008 à 16:30:55 Freedandan, le 20 jui 2007 à 12:10:43 
 Signaler ce message aux modérateurs

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é)

Meilleures réponses pour « [socket]Problème lecture sur socket client » dans :
Lire ses emails Yahoo!Mail avec un client de messagerie VoirAfin de vous permettre de lire vos mails Yahoo! Mail avec l'aide d'un logiciel de messagerie (exemple: Mozilla ThunderBird, Outlook, Netscape, Eudora, etc.), voici les manipulations à effectuer : Configurer le compte Yahoo!Mail Configurer le...
Lire les sous-titres VoirCertains films possèdent des sous-titres dans un fichier à part, possédant généralement l'extension .srt, .ssa ou .sub. Le plus simple pour lire les sous-titres est de renommer le fichier de sous-titres comme le fichier vidéo (à l'exception de...
VirtualBox - Installer les additions client dans Ubuntu VoirUne fois le système d'exploitation installé dans VirtualBox, il est recommandé d'installer les additions client. Ce sont des pilotes à installer dans la machine virtuelle qui améliorent le fonctionnement : affichage graphique plus rapide ; ...
Les fonctions de l'API Socket VoirLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une...
Environnement Client/Serveur VoirPrésentation de l'architecture d'un système client/serveur De nombreuses applications fonctionnent selon un environnement client/serveur, cela signifie que des machines clientes (des machines faisant partie du réseau) contactent un serveur, une...
Réseaux - Architecture client/serveur à 3 niveaux VoirPrésentation de l'architecture à 2 niveaux L'architecture à deux niveaux (aussi appelée architecture 2-tier, tier signifiant rangée en anglais) caractérise les systèmes clients/serveurs pour lesquels le client demande une ressource et le serveur la...

1

Freedandan, le 20 jui 2007 à 14:21:49

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

Merci par avance

Répondre à Freedandan

2

Freedandan, le 20 jui 2007 à 18:08:12

Je vous en prie! Aidez-moi! C'est vital...
Merci

Répondre à Freedandan

3

zabbi, le 20 jui 2007 à 20:42:15

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+

Répondre à zabbi

4

Freedandan, le 21 jui 2007 à 13:36:49

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

Répondre à Freedandan

5

freedandan, le 23 jui 2007 à 16:39:18

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

Répondre à freedandan

6

zabbi, le 23 jui 2007 à 19:52:07

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+

Répondre à zabbi

7

Freedandan, le 23 jui 2007 à 21:20:00

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.

Répondre à Freedandan

8

 jiji_fun, le 19 mar 2008 à 16:30:55

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

Répondre à jiji_fun