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

MFC Discussion :

Socket keep-alive


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Socket keep-alive
    Je communique avec un équipement qui a un serveur intégré. Toujours dans le programme dont j'ai parlé dans le sujet "Prob avec strcpy et prob de socket", j'ai un problème ... encore
    Voilà, je crée une socket, je me connecte, je fais mon traitement (méthode GET + traitement des données reçues), tout va bien. Le problème, c'est que le serveur, une fois qu'il a envoyé un paquet de données déconnecte automatiquement ma socket!! C'est un peu pénible étant donné que je n'ai pas qu'un seul paquet à récupérer et surtout que j'ai besoin de réutiliser ma socket ultérieurement.
    J'ai donc mis dans ce que j'envoie un :
    Connection: Keep-Alive\r\n\r\n
    J'ai remarqué grâce au logiciel Ethereal que c'est ce qui se trouve dans les pages rafraichies par le serveur (en fait, l'équipement crée des pages web pour l'exploitation de ses données).
    Bref, pourquoi le serveur ne réagit pas à ma demande de Keep-Alive alors qu'il le fait pour ses propres demandes? Dois-je lui envoyer d'autres informations?
    Merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    cherche Keep-Alive sur le forum j'ai repondu il y a pas longtemps sur le sujet.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ok merci. Je croyais l'avoir fait mais j'ai sûrement du mal cocher dans la rubrique rechercher Pardon...

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    C'est ce que je viens de regarder J'avais oublié de préciser que je n'utilise pas la classe CSocket.... mais les fonctions send() et receive() pour que mon programme soit portable... Comment dois-je faire pour transposer la méthode SetSockOpt?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    voir l'api :
    int setsockopt (
    SOCKET s,
    int level,
    int optname,
    const char FAR * optval,
    int optlen
    );

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup!!! Je te recontacte si j'ai un prob

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Voilà, je te recontacte

    En fait, si j'ai bien compris, la fonction setsockopt demande au serveur si le client est toujours là, mais elle ne dit pas au serveur que le client doit rester connecté et donc de ne pas le déconnecter à la fin d'une requête.

    Parce que moi, mon problème n'est pas réglé, que je rajoute ou non la fonction setsockopt(), il n'y a aucune différence! Ma deuxième requête GET ne marche pas, enfin le buffer que je reçois avec receive() est vide...
    Y a-t-il quelquechose à faire entre mes deux requêtes GET pour dire que la première est finie et qu'on passe à la suivante?

    Bref, quelqu'un peut-il m'aider parce que je n'y comprends rien!! Je suis perdue dans les fonctions.... Merci.

  9. #9
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bon, bah ça ne marche vraiment pas
    Je ne sais plus quoi faire si ce n'est de recréer un socket à chaque requête mais ce n'est pas l'idéal, et surtout je ne vois du coup vraiment pas l'utilité du socket!!
    Avec un socket, on est sensé avoir la possibilité de faire plusieurs requêtes, alors comment dire à mon serveur qu'il faut garder la connexion ouverte?
    Merci.

  10. #10
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Quequ'un peut-il m'aider? Comment faire pour ne pas être obligée de fermer le socket et de le recréer à chaque requête GET?
    Merci d'avance.

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    je reprends depuis le debut !
    je vois pas le rapport avec le keep alive ,
    tu pensais qu' en selectionnant l'option le serveur ne squizerait pas ta socket au premier envoi c'est ça ?

  12. #12
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui c'est ça
    Mais je me suis rendue compte qu'en fait le keep-alive ne sert qu'à obtenir l'état du socket au bout de x temps, alors que moi, mon serveur il déconnecte mon client dès qu'il répond à la première requête GET; le truc c'est que j'ai au moins 3 requêtes semblables à lui faire faire...
    Donc pour l'instant, le seul moyen que j'ai trouvé c'est de fermer proprrement le socket avec closesocket(), de recréer un socket et de le reconnecter... Bref, c'est un peu lourd si je dois le faire pour chacun de mes GET.
    Donc je voudrais savoir s'il y a un moyen de dire au serveur que le socket doit toujours être connecté après qu'il lui ait envoyé la première réponse.
    Voici un bout de 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
    envoi = "GET /page1.htm HTTP/1.1\r_\n\r\n";
    send(envoi, strlen(envoi), 0);
    receive(buffer, sizeof(buffer), 0);
     
    //traitement des données reçues
     
    envoi = "GET /page2.htm HTTP/1.1\r_\n\r\n";
    send(envoi, strlen(envoi), 0);
    receive(buffer, sizeof(buffer), 0);
     
    //traitement des données reçues
     
    envoi = "GET /page3.htm HTTP/1.1\r_\n\r\n";
    send(envoi, strlen(envoi), 0);
    receive(buffer, sizeof(buffer), 0);
    Voilà, rien de bien méchant pour ce qui est de la récupération des données puisque ce n'est que des GET! Le seul prob c'est la réutilisation du socket....

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    une question pourquoi tu n'utilises pas les fonctions wininet ?

  14. #14
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Quesako?

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_core_wininet_.28.http.2c_.ftp.2c_.gopher.29.asp
    et voir exemple ici:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceinternet5/html/wce50conAccessingtheHTTPProtocol.asp

  16. #16
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci, je vais voir ce que je peux en faire. J'ai jeté un coup d'oeil, ça a l'air super compliqué mais je te remercie de m'avoir aider.

  17. #17
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    regarde aussi ce lien peut etre plus clair:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebtool/html/msdn_inet.asp

  18. #18
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ok encore une fois merci beaucoup et espèrons que je m'en sorte

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

Discussions similaires

  1. Paquet keep alive
    Par Adriano1664 dans le forum Réseau
    Réponses: 2
    Dernier message: 31/05/2010, 14h29
  2. keep alive ?
    Par r1-1024 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 24/09/2009, 12h04
  3. WCF Keep-alive inactivityTimeout
    Par matdur dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 27/03/2008, 18h05
  4. HTTP : Keep-Alive et Stop
    Par ChamleyMaxime dans le forum Développement
    Réponses: 2
    Dernier message: 02/07/2006, 17h45

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