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

Réseau C Discussion :

sockets! serveur bloqué en attente d'une connexion client


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut sockets! serveur bloqué en attente d'une connexion client
    bonjour, tous le monde,
    je commance a utilisé les sockets, j'ai essayé d'executer l'exemple donné dans le site de Emmanuel Delahaye, dans cette exemple le serveur se bloquer en attente de connexion d'un client. j'ai lancé un client Telnet sur la meme machine , mais j toujours le serveur bloqué!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ....
    wating for a client connexion on port 23...
    quelqu'un peut m'éclairer sur ce point?

    MErci

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par moon93
    je commance a utilisé les sockets, j'ai essayé d'executer l'exemple donné dans le site de Emmanuel Delahaye,
    http://emmanuel-delahaye.developpez.com/reseaux.htm
    dans cette exemple le serveur se bloquer en attente de connexion d'un client. j'ai lancé un client Telnet sur la meme machine ,
    Avec quelle adresse IP ?
    mais j toujours le serveur bloqué!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ....
    wating for a client connexion on port 23...
    quelqu'un peut m'éclairer sur ce point?
    Tu as bien lancé le serveur avant le client ?
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    oui, oui
    j'ai lancer le serveur en premier!

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si c'est sous Linux, tu es bien en root ?

    (enfin, je pense que oui, d'après Emmanuel, le bind() échoue avec "access denied" sinon...)

    PS: Emmanuel t'a posé une autre question...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    pour l'adresse IP, on utiliser :
    pour toute les adresse locales

    non?

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par moon93
    pour l'adresse IP, on utiliser :
    pour toute les adresse locales
    Uniquement sur le serveur. Ca veut dire "accepter n'importe quelle adresse IP".

    Sur le client tu dois préciser que tu t'adresses au serveur. Si il est sur la même machine, tu peux utiliser 127.0.0.1

    Sinon, tu utiises l'adresse de la machine qui fait tourner le serveur.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh, pour être précis, je crois bien que ça veut dire "écouter sur toutes les interfaces" et que ça ne marche pas si tu tentes un bind() avec une adresse qui n'est pas une des adresses du poste...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par Médinoc
    Euh, pour être précis, je crois bien que ça veut dire "écouter sur toutes les interfaces" et que ça ne marche pas si tu tentes un bind() avec une adresse qui n'est pas une des adresses du poste...
    Citation Envoyé par man ip
    Lorsqu'on indique INADDR_ANY lors de l'attachement, la socket sera affectée à toutes les interfaces locales. Si on invoque listen(2) ou connect(2) sur une socket non affectée, elle est automatiquement attachée à un port libre aléatoire, avec l'adresse locale fixée sur INADDR_ANY.
    Citation Envoyé par man ip
    Il existe plusieurs adresses particulières : INADDR_LOOPBACK (127.0.0.1) correspond toujours à l'hôte local via le périphérique loopback ; INADDR_ANY (0.0.0.0) signifie un attachement à n'importe quelle adresse ; INADDR_BROADCAST (255.255.255.255) signifie n'importe quel hôte et à le même effet que INADDR_ANY pour des raisons historiques.
    man ip

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh, c'est normal que INADDR_BROADCAST soit égal à INADDR_NONE ?

    Edit: oups... j'ai du poser ma question à l'envers. Enfin, après tout, puisque toutes les valeurs disponibles sont prises, il fallait bien trouver une valeur d'erreur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par Médinoc
    Euh, c'est normal que INADDR_BROADCAST soit égal à INADDR_NONE ?

    Edit: oups... j'ai du poser ma question à l'envers. Enfin, après tout, puisque toutes les valeurs disponibles sont prises, il fallait bien trouver une valeur d'erreur.
    INADDR_BROADCAST = 0xffffffff
    INADDR_NONE = -1

    Oui une adresse d'hote invalide est aussi celle d'une adresse de réseau (broadcast).

    Citation Envoyé par man 3 inet
    La fonction inet_addr() convertit l'adresse Internet de l'hôte cp depuis la notation standard avec nombres et points en une donnée binaire dans l'ordre des octets du réseau. Si l'adresse est invalide, INADDR_NONE (généralement -1) est renvoyé. Ceci est une interface obsolète pour la fonction inet_aton, décrite ci-dessus, car -1 est une adresse valide (255.255.255.255), et inet_aton utilise un renvoi d'erreur plus propre.
    man 3 inet
    INADDR_BROADCAST
    INADDR_NONE

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    bonjour,

    mon programme serveur est tjr bloqué en attente de connexion client. Emmanuel votre ptogramme client qui se connecte sur le port 23 c'est lequel?
    et, quelle est la fonction qui permet de spécifié l'adresse IP?
    merci

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par moon93
    mon programme serveur est tjr bloqué en attente de connexion client. Emmanuel votre ptogramme client qui se connecte sur le port 23 c'est lequel?
    J'utilise un client telnet. Si c'est local, je met l'adresse 127.0.0.1 ou celle de la machine si elle est en réseau (le firewall du serveur doit être d'accord...)
    et, quelle est la fonction qui permet de spécifié l'adresse IP?
    Il suffit de lancer le client avec le bon paramètre

    Windows : Démarrer / Exécuter
    telnet 127.0.0.1
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    il est ou ton programme client?, et j pas compris ce que vous voulez dire par:

    'L'utilisateur tape 'a' sur la console du client:' pour la Reception d'un caractère!!!!!

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par moon93
    il est ou ton programme client?,
    telnet.exe. Ca fait partie de la distribution de Windows. Il faut aussi apprendre à se servir de son système... Je t'ai déjà indiqué comment le lancer...
    et j pas compris ce que vous voulez dire par:

    'L'utilisateur tape 'a' sur la console du client:' pour la Reception d'un caractère!!!!!
    Une fois que tu as lancé telnet avec la bonne adresse IP, tu te retrouves devant une console. Si tu tapes a sur le clavier, le client émet une trame IP avec 'a' comme données, et ça suffit à débloquer le serveur et à le fermer (ce n'est qu'un programme d'exemple qui valide le principe).

    Ensuite, comme expliqué, il faut évidemment modifier le serveur pour qu'il reçoive et traite des trames entières...
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par moon93
    il est ou ton programme client?, et j pas compris ce que vous voulez dire par:

    'L'utilisateur tape 'a' sur la console du client:' pour la Reception d'un caractère!!!!!
    En résumé :

    tu fais "démarrer" puis "exécuter" puis la tu as une fenetre avec une boite de sélection dans laquelle tu tapes "cmd".
    Et la ca ouvre une fenetre avec un fond noir si ta pas changer les couleurs de base.
    Dans cette fenêtre il y a un prompt "XXX>" et la tu tapes "telnet 127.0.0.1" si le serveur que tu as lancé tourne deja sur la meme machine.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    a la compilation j'ai un warning:
    "return type of main is not int"

    ?

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    sans doute parce que tu as déclaré main() en void...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    pourquoi, la fonction main doit retourné un int?!!

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben oui.
    main() accepte deux prototypes standard:
    Code C/C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(void);
    /* ou */
    int main(int argv, char *argv[]);

    les constantes EXIT_SUCCESS et EXIT_FAILURE, déclarées dans stdlib.h, sont les codes de retour à préférer pour la valeur retournée par main().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par moon93
    pourquoi, la fonction main doit retourné un int?!!
    http://emmanuel-delahaye.developpez....s.htm#typemain

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. socket TCP et temps d'attent pour une connexion?
    Par toutounesan dans le forum VB.NET
    Réponses: 28
    Dernier message: 19/08/2011, 16h51
  2. [PHP 5.0] Navigateur bloqué en attente d'une commande
    Par guidav dans le forum Langage
    Réponses: 5
    Dernier message: 26/10/2009, 11h18
  3. Attente d'une connexion d'un client
    Par midotek dans le forum Réseau
    Réponses: 4
    Dernier message: 06/12/2008, 13h41
  4. Serveur dormant refuse d'accepter une connexion
    Par Babcool dans le forum POSIX
    Réponses: 1
    Dernier message: 02/11/2008, 13h10

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