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

Programmation et administration système Perl Discussion :

Socket connexion permanente


Sujet :

Programmation et administration système Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut Socket connexion permanente
    Je n'arrive pas à connecter deux scripts via un socket et à les faire communiquer via celui-ci. J’entends par la que mon client A ce connecte a mon serveur B le serveur B envoie des données que A reçois bien, mais je n'arrive pas à envoyer de nouvelles donnée via le socket sans la régénérer c'est à dire sans relancer le client.

    Existe-t-il un moyen de connecter A et B sans avoir besoin d'ouvrir à chaque fois le socket ?

    merci

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Montre nous donc ton code, qu'on te dise ce que tu fais mal (parce que ce que tu demandes est évidemment possible vu que tous les serveurs TCP fonctionnent comme ça...).

    --
    Jedaï

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    Voila " mon code ", que j'ai pris sur un site
    ICI


    le serveur

    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
    #!/usr/bin/perl -w
    # serveur.pl  #
    ###############
    use IO::Socket;
     
    $server = IO::Socket::INET->new(
        LocalPort => 1234,
        Type      => SOCK_STREAM,
        Reuse     => 1,
        Listen    => 5
    ) or die "Création du serveur impossible.\n";
    print "Démarrage du serveur ..\n";
     
    while ($client = $server->accept()) {
     print $client "Le serveur dit 'bonjour' au client !\n";
     
     $pid = fork;
     die "Je ne peux pas forker !" if ! defined ($pid);
     my $ligne;
     if ($pid ==0) {
     # c'est le processus enfant, chargé de l'écoute des clients
     #############################################################
       while ($ligne = <$client> ) {
         print "client> $ligne";
     
       }
      } else {
      # c'est le père qui pendant ce temps répond au client #
      #######################################################
       while ($ligne = <>) {
         print $client "maison";
      }
     }
    }
    le client :


    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
    #!/usr/bin/perl -w
    # client.pl  #
    ##############
    use IO::Socket;
     
    print "nom ou adresse IP du serveur (localhost par défaut) ";
    $adresse = <>; chomp($adresse);
    $adresse= "localhost" if $adresse eq "";
     
    $socket = IO::Socket::INET->new(
            PeerAddr => $adresse,
            Proto => "tcp",
            PeerPort => 1234
            )
    or die "Connexion au serveur impossible.\n";
     
    $pid = fork;
    die "Je ne peux pas forker !" if ! defined ($pid);
    if ($pid ==0) {
     # c'est le processus enfant, chargé de l'émission au serveur
     #############################################################
    #    while ($ligne = <> ) {
      #   print $socket $ligne;
     #   }
    #} else {
      # c'est le père qui pendant ce temps écoute le serveur
      #######################################################
        while ($ligne = <$socket>) {
         print "serveur> $ligne";
        }
    }
    Le but de ce code est d'essaie est d'envoyer au client le message maison en permanence, j'ai mis en commentaire la partie cliente qui répond au serveur car dans mon script ce ne sera pas le cas !!

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Problème de buffer probablement... "maison" ne comprend pas de "\n" donc est bufferisée, rajoute un \n (ou flush ton $client, il y a une chance que ça marche).

    --
    Jedaï

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    J'ai fait quelque essaie en désactivant la bufferisation avec $| = 1; j'ai ensuite flushé $client et mis \n mais rien n'y fait sa ne marche pas

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    par defaut les handler de socket sont deja en autoflush (depuis perl 5.6 au moins).
    Tu es sous windows?
    Si c'est el cas ton probleme est peut etre du à l'emulation de fork que perl est obligé de faire sur cette plateforme.
    Esque ca marche avec un serveur plus simple, sans fork?
    Au fond d'ailleurs pourkoi n'utilise tu pas les solutions qui marchent sur cpan? (POE, Net::Server, etc.)
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    Merci Pospos Net::Server::Multiplex correcpond a ce que je veut faire je vais donc tester sa je vous tient au jus

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    Désolé de vous déranger une fois de plus j'ai après avoir lu plusieurs fois la doc de Net::Server et Net::Server::Multiplex je n'arrive pas a comprendre comment m'en servir

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/05/2006, 00h01
  2. [Socket]Connexion au port distant 161
    Par arsenik7 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 22/11/2005, 17h14
  3. [MFC] Problème Socket + Connexion SQL
    Par BananaUltra3C dans le forum MFC
    Réponses: 6
    Dernier message: 20/05/2005, 16h41
  4. [socket] connexion à un serveur irc
    Par soad dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 19/11/2004, 02h59
  5. [SOCKET] connexion client serveur avec applet
    Par kaiser2003 dans le forum Applets
    Réponses: 2
    Dernier message: 06/10/2004, 22h32

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