IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Débutant] socket : client et serveur sur un même programme.


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut [Débutant] socket : client et serveur sur un même programme.
    Bonjour,

    J'ai créé un programme qui permet d'envoyer une requête http et de recevoir le résultat (code source d'une page html) mais le programme ne fonctionne pas très bien.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SOCKADDR_IN sin;
    sin.sin_family      	= AF_INET;
    sin.sin_addr.s_addr     = inet_addr(ip);
    sin.sin_port       		= htons(port);
    sock = socket(PF_INET, SOCK_STREAM, 0);
     
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    send(sock, requete, strlen(requete), 0);
    recv(sock, buffer2, 655536, 0);
    (Je n'ait pas montrer le code qui test si connect,send et recv renvoi -1 pour ne pas avoir un trop gros code ici)

    - Quand je fait une requete sur www.google.fr, je reçoit l'en-tête HTTP ainsi que le code source de la page.
    - Par contre quand je passe par un proxy (donc ip=IP_PROXY et dans ma requete http j'ai "host : IP_PROXY\r\n") je ne reçoit pas toujours le code source de la page html de google. Pourtant quand je sniffe mon réseau, mon pc reçoit bien le code source de la page html de google.

    Merci...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    Avec ces infos, on devinera le problème....

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Pour commencer, dans l'en-tête HOST tu ne dois PAS mettre ton IP mais bien le domaine du site en question.

    Ensuite, c'est peut être juste ton proxy qui bug

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    1) Voici ma requete HTTP:
    char req[]= "GET http://www.google.fr/index.html HTTP/1.1\r\n"
    "Host: 203.115.10.43\r\n"
    "\r\n";

    Et 203.115.10.43, c'est l'ip du proxy et j'envoi cette requete au proxy.

    2) Quand je sniffe mon réseau juste après avoir envoyer ma requette HTTP, je reçoit 2 paquet http : un paquet qui contient uniquement une en-tête http et un autre paquet qui contient le code source de la page index.html de google.

    - Le problème c'est dans ma variable buffer2: j'ai toujours le premier paquet et le deuxième paquets se trouve rarement dans ma variable buffer2.

    -Si j'ai ce code:
    send(sock, requete, strlen(requete), 0);
    recv(sock, buffer2, 655536, 0);
    recv(sock, buffer3, 655536, 0);

    Dans buffer2, j'ai le premier paquet et rarement le deuxième.
    Dans buffer3, j'ai presque toujours le deuxième paquet.

    ==> Mon problème : Comment être sur d'avoir toujours le même résultat !

    J'espère avoir été plus clair.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(recv( sock, buffer, sizeof(buffer), 0 ) )
    {
        // buffer contient le paquet reçu courant
    }
    ?

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    En fait, le proxi t'envoi le resutat sur plusieurs paquets, donc il faut que tu prevois ça à la reception.
    En revanche je ne sais pas comment le protocole http te precise si tu as fini de recevoir les donnée demandées. Peu etre que dans l'en-tête http, tu as la taille qui est precisée...

Discussions similaires

  1. Hébergement de client et serveur sur la même machine?
    Par --Peace-- dans le forum Développement
    Réponses: 11
    Dernier message: 10/10/2012, 23h09
  2. Hébergement de client et serveur sur la même machine?
    Par --Peace-- dans le forum Virtualisation
    Réponses: 4
    Dernier message: 08/10/2012, 20h38
  3. Client et serveur sur même JVM
    Par BigzYeah dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 29/02/2012, 10h41
  4. Réponses: 1
    Dernier message: 21/08/2008, 12h49
  5. installation de deux serveurs sur une même machine
    Par desdak dans le forum Installation
    Réponses: 1
    Dernier message: 29/06/2005, 23h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo