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 :

socket avec http


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut socket avec http
    Voila j'aissai de faire un logiciel qui peut envoyer des requête HTTP sur un site, mais je ne recois jamais de réponse de celui ci... par exemple avec une requête:"GET www.google.fr/index.html HTTP/1.1 \r\n\r\n" j’attends ensuite avec recv mais le programme reste bloque la avec le curseur qui clignote... voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include<iostream>
    #include<string>
    #include<winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
    using namespace std;
     
    struct in_addr resolve (char *name)
    {
    static struct in_addr in;
    unsigned long l;
    struct hostent *ent;
    if ((l = inet_addr(name)) != INADDR_NONE)
    {
    in.s_addr = l;
    return in;
    }
    if (!(ent = gethostbyname(name)))
    {
    in.s_addr = INADDR_NONE;
    return in;
    }
    return *(struct in_addr *)ent->h_addr;
    }
     
    int main(void)
    {
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,2), &WSAData);
    	SOCKET sock;
    	SOCKADDR_IN sin;
     
    	string mess;
    	char messchar[150];
        sin.sin_addr                = resolve("www.google.fr");
    	sin.sin_family				= AF_INET;
    	sin.sin_port				= htons(80);
    	cout<<"\tcreation du socket";
    	sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if(sock < 0)  // Au cas ou la création de la socket ne fonctionnerais pas
    	{
    		cerr<<"\nImpossible de creer la socket\n";
    		return 1;
    	}
     
        cout<<"\r[ok]\n\tconnection au serveur";
    	if (connect(sock,(struct sockaddr *)&sin, sizeof sin) < 0)
    	{
    		cerr<<"\nImpossible de se connecter au serveur\n";
    		return 1;
    	}
        cout<<"\r[ok]\n\n";
    	mess="GET www.google.fr/index.html HTTP/1.1 \r\n\r\n";
    	cout<<"\tenvois de \""<<mess<<"\"";
     
    	send(sock, mess.c_str(), sizeof(mess),0);
        cout<<"\r[ok]\n";
        cout<<"\tattente reponse du serveur";
    	recv(sock, messchar, 150, 0);
    	cout<<"\r[ok]\n";
    	mess=messchar;
    	cout<<mess;
    	closesocket(sock);
    	WSACleanup();
     
    	return 0;
    }
    en esperent que quelqu'un saura de quoi il s'agit.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 86
    Points : 97
    Points
    97
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    send(sock, mess.c_str(), sizeof(mess),0);
    c'est sans doute ton sizeof() qui pose probleme, essaye mess.length() plutot.

    -pirus.

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    tu mets ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mess="GET www.google.fr/index.html HTTP/1.1 \r\n\r\n";
    Mais, tu es de toute facon connecté à Google.
    donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GET /index.html HTTP/1.1\r\n\r\n
    Mais il faut voir s'il ne faut pas autre chose dans les headers. Il faut plus d'information que ca il me semble.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    je pense tres fortement que dans ce cas ci Qt devrait etre vraiment utilisé,
    d'abord parce que c'est immediat de faire un http request,
    et puis le multiplateforme

    J'aimerais honnetement voir Linux se developper plus que Windows et leurs api proprietaires

  5. #5
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par epsilon68
    J'aimerais honnetement voir Linux se developper plus que Windows et leurs api proprietaires
    Où tu vois des fonctions spécifiques à windows ? à part WSAStartup et WSACleanup.

    Comme l'as dit Antoine_935, il manque le champ host.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mess = "GET / HTTP/1.1\r\n" "Host: www.google.fr\r\n\r\n";
    Et n'oublies pas la remarque de pirus.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par Mayti4
    Où tu vois des fonctions spécifiques à windows ? à part WSAStartup et WSACleanup.
    oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include<winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
    et c'est dommage

  7. #7
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par epsilon68
    oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include<winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
    et c'est dommage
    Il suffit d'utiliser une macro conditionnelle.

    Comment crois-tu que QT est compilé.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par Mayti4
    Il suffit d'utiliser une macro conditionnelle.
    Comment crois-tu que QT est compilé.
    Qt est une lib, et son utilisation est transparente pour l'utilisateur.
    non je le repete, c'est vraiment dommage

    PAR EXPERIENCE, si tu ne t'appuies pas sur des libraries multiplateformes, tu seras confronté a beaucoup de probleme lorsque tu voudras le compiler sur un autre systeme, et tu ne le feras pas.

    mais bon, je sais que c'est peine perdu ....

    c'est peut-etre pour ca que beaucoup de logiciels ne verront pas le jour sur Linux ou Macos, vraiment dommage !!!

  9. #9
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Je suis d'accord, mais ici il utilise les sockets, qui sont déjà très portable.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par Mayti4
    il utilise les sockets, qui sont déjà très portable.
    Je te garantie que non !!! malheureusement

    mais on peut encapsuler les differences, et le porter sur tous les environnements pour voir si on a reellement fait du code portable, et ensuite l'utiliser en toute confiance ....

    ... que du temps de perdu !!!!

    Je sais que c'est peine perdu de toute facon,
    il y a trop d'exemples de ce genre sur ce forum.

    a+

  11. #11
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    merci de toute vos reponse, alors le probleme majeur etait bien le mess.length je n'avais pas penser a transphormer cela puisque tout les tuto que j'avais vu etait en c et utilisait un tableau de char... ensuite j'ai enlever le www.google.fr je me doutait bien que c'etait inutil mais bon j'aissayai tout plein de chose, et je n'ai pas eu a rajoute le host:

    merci sa fonctionne tres bien meintenant

    ensuite pour se qui est du multi plateforme je suis bien d'accord avec vous. le probleme c'est que j'ai besoin de cette aplication uniquement pour moi et je ne voulais pas prendre trop de temp pour la code, aprendre une nouvelle librairie sa ralonge beaucoup le processus. de plus je travaille moi meme avec linux a temp partiel mais presentement (et pour les 6 prochaine mois) je ne peux pas l'utiliser autrement qu'en machine virtuel n'ayant pas le droit de faire se que je veut sur cette ordi... je ne fais donc pas de programmation sur celle-ci. mais en general je fait tout pour que se soit portable.

    encor merci de vos solution

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Publication d'un site web avec HTTP ou FTP ?
    Par Mohammed200 dans le forum Autres langages pour le Web
    Réponses: 1
    Dernier message: 07/12/2005, 16h12
  2. [MS-DOS] Lancement de MozillaFirebird avec http://localhost/
    Par Furius dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/11/2005, 14h31
  3. [HTTP][Socket] avec une url c'est possible ?
    Par tck-lt dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 19/08/2005, 09h39
  4. [CF][PPC/VB.NET] Comment utiliser les Socket avec Pocket PC ?
    Par joefou dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 17/05/2005, 14h24
  5. Erreur de socket avec le composant Indy idHTTP
    Par Etanne dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/10/2004, 11h27

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