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 :

Problème: Numéro de socket attribué deux fois


Sujet :

Réseau C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut Problème: Numéro de socket attribué deux fois
    Bonjour,

    Je travailles actuellement sur un projet de lcient/serveur VPN.
    Dans ma version finale le serveur est censé pouvoir créé de nouveux réseaux virtuels et chaque réseau peut bien sûr accepter plusieurs clients.
    Le problème c'est que, alors que tout depuis que j'ai apporté les dernières modif au programme, quand je lance deux fois le programme client pour les connecter au serveur sur le même réseau, le numéro de la socket attribuée pour les deux clients est la même.
    Du coup ça me fout un bordel monstre (enfin, du moins je penses que c'est à cause de ça):
    - par exemple, j'ai ajouté un STDIN_FILENO aux fd lus par le select du client pour pouvoir lire ce qui est tappé au clavier et l'envoyer au serveur (qui le broadcast) ou quitter le programme de façon moins sale qu'avec ctrl+c; et du coup, ça marche de façon complètement aléatoire (surtout pour celui que je lance en second), des fois il lit, des fois pas, et des fois quand je tappes 'q' au clavier et que j'appuie sur entrée (normalement c'est ce qui permet de quitter le programme) les deux programmes sont arrêtés.
    - de même des messages qu'un seul client doit recevoir sont reçut par les deux (mais celui qui est créé en second reçoit le message tronqué).

    Donc, j'aimerais savoir, d'abord si l'origine du problème est bien celle que je soupçonnes (et pas, par exemple, un énième problème de buffer indétectable) et, le cas échéant, comment contourner le problème.

    Merci d'avance de votre attention.

    PS: je ne mets pas mpon code parce qu'il est beaucoups trop long, et je ne penses pas que ce soit nécéssaire

    PS2: j'ai l'impression que ce problème est apparut quand j'ai créé une structure pour stocker les informations sur les réseaux hébergés par le serveur dans laquelle j'ai mit la structure que j'utilisais déjà auparavant pour stocker les informations sur les clients connecté au réseau, et ce afin de pouvoir gérer plusieurs réseaux sur un même serveur. Mais je ne peux pas en être sûr parce que ça faisait un moment que je testais juste la création d'un nouveau réseau et pas la connection de plusieurs clients, et donc j'ai fait pas mal de modif depuis la dernière fois où plusieurs clients arrivaient à se connecter au serveur.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    très très confus.....

    Deux remarques :

    Citation Envoyé par bactria Voir le message
    Mais je ne peux pas en être sûr parce que ça faisait un moment que je testais juste la création d'un nouveau réseau et pas la connection de plusieurs clients, et donc j'ai fait pas mal de modif depuis la dernière fois où plusieurs clients arrivaient à se connecter au serveur.
    ça t'apprendra que la bonne manière de développer eest que, quand on a quelque chose qui marche et qu'on va modifier , on fait une sauvegarde.ça s'appelle le "développement incrémental", et ça permet de revenir en arrière...



    Citation Envoyé par bactria Voir le message
    - par exemple, j'ai ajouté un STDIN_FILENO aux fd lus par le select du client pour pouvoir lire ce qui est tappé au clavier et l'envoyer au serveur (qui le broadcast) ou quitter le programme de façon moins sale qu'avec ctrl+c; et du coup, ça marche de façon complètement aléatoire (surtout pour celui que je lance en second), des fois il lit, des fois pas, et des fois quand je tappes 'q' au clavier et que j'appuie sur entrée (normalement c'est ce qui permet de quitter le programme) les deux programmes sont arrêtés.
    - de même des messages qu'un seul client doit recevoir sont reçut par les deux (mais celui qui est créé en second reçoit le message tronqué).
    comme un socket est un fichier, si tu déposes quelque chose dessus et que tu lis, ça n'est plus dispo ensuite...

    Donc forcément si les 2 lisent sur le même socket théoriquement la même chose, ben y'a comme un problème de syncrhonicité...

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Mince le mot synchronicité existe vraiment Dans ton cas, ce n'est pas plutôt synchronisation ?

    Je plussoie totalement quant à la mise en place de sauvegarde régulière. La gestion des versions est essentielle pour gérer notamment les retours arrières. bactria, renseigne toi sur SVN ou sur git (d'ailleurs, si tu codes des trucs aussi compliqués que des VPN, tu dois sûrement déjà les connaitre )

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Mince le mot synchronicité existe vraiment Dans ton cas, ce n'est pas plutôt synchronisation ?
    Dans ce cas, les 2 sont possibles..

    • Synchronicité : de lecture : les lectures se font quasi en même temps..
    • Syncrhonisation : pour éviter ça, il faut mettre en place une syncrhonisation





    Citation Envoyé par Bktero Voir le message
    Je plussoie totalement quant à la mise en place de sauvegarde régulière. La gestion des versions est essentielle pour gérer notamment les retours arrières. bactria, renseigne toi sur SVN ou sur git (d'ailleurs, si tu codes des trucs aussi compliqués que des VPN, tu dois sûrement déjà les connaitre )
    Sans aller jusqu'à ces extrêmes, un "cp toto.c toto.c.save" marche aussi
    (si on modifie un seul module. mais on peut le faire aussi avec un répertoire)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Tout d'abord merci pour vos réponses;

    Ensuite, pour ce qui est du versionning (ça dis, ça? je crois que j'ai entendu des informaticiens le dire) c'est vrai que ça fait plusieurs fois que je me dis: rhâ quel boulet, j'aurais dût enregistrer la version précédente qui marche autre part, et puis j'oublie... Sans compter que j'ai vraiment envie que mes ajouts marche.

    Sinon, après relecture au vu des messages, j'avoue que ce que je dis n'est pas très clair.
    En fait, ce que j'aimerais savoir, c'est s'il existe des méthodes pour éviter que deux socket est le même numéro, et donc pointent au même endroit. Au pire il me reste en effet la solutions de revenir en arrière, mais ça me fait chier parce que: -1 faut que je retrouves comment c'était avant, et quand ça à commencé à déconné et -2 ça m'enlève la possibilité d'ajouter des réseaux à mon serveur.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/10/2011, 10h14
  2. probléme lorsqu'on appuis sur un bouton deux fois
    Par maissaab dans le forum wxPython
    Réponses: 1
    Dernier message: 24/03/2011, 12h29
  3. Problèmes de lecture/écriture sur deux sockets
    Par Popof dans le forum Linux
    Réponses: 2
    Dernier message: 26/11/2009, 23h14
  4. Problème pour imprimer deux fois
    Par jodan33 dans le forum Débuter
    Réponses: 6
    Dernier message: 07/04/2008, 15h52
  5. Réponses: 5
    Dernier message: 29/03/2007, 22h26

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