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 :

Besoin d'aide sur les sockets


Sujet :

Programmation et administration système Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Points : 41
    Points
    41
    Par défaut Besoin d'aide sur les sockets
    J'ai un petit problème de socket, j'ai un script A qui transmet des infos a un script B via une socket tcp, mon script A est équipé d'un serveur socket que voila

    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
    #!/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";
     
    # données de test
    my @mm = qw/ a b c d e /;
    my $ml = [ @mm ];
     
    for ($client = $server->accept()) {
     print $client "@$ml";
    }
    et mon script B d'un client que voila


    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
    #!/usr/bin/perl -w
    # client.pl  #
    ##############
    use IO::Socket;
     
    my $socket = IO::Socket::INET->new(
                   PeerAddr => "localhost",
                   Proto    => "tcp",
                   PeerPort => 1234
       )    
       or die "Unable to connect to server.\n";
     
    while ( @$ligne = <$socket> ) {
      foreach my $i (@$ligne) {
        print "$i\n";
      }
    }
    Mon problème est la boucle while du client en fait voila comment marche mon gros script, quand le lient recoit quelque chose a traité les données sont transmise a un sous prog dédié mais sa n'arrive jamais car jamais le client ne sort jamais de la boucle while , et s'il le fait beh il écoute plus

    Comment faire pour que mon client écoute en permanance , et transmette les données a mon sous programme sans pour autant fermé la connexion sortir du while quoi , et ce meme si le serveur en face est hors jeux ?

    merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Points : 41
    Points
    41
    Par défaut
    J'ai retrouvé le script d'origine de mon client et du serveur

    J'ai fait deux modif il écoute tout le temps, et il boucle jusqu'a trouver un 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
    32
    33
    34
    35
    36
    #!/usr/bin/perl -w
    # client.pl
    use IO::Socket;
    use strict;
     
    print "nom ou adresse IP du serveur (localhost par défaut) ";
    my $adresse = <>; chomp($adresse);
    $adresse= "localhost" if $adresse eq "";
     
    my $socket;
    # On boucle jusq'a trouver un client
    while (!$socket) {
    $socket = IO::Socket::INET->new(
            PeerAddr => $adresse,
            Proto => "tcp",
            PeerPort => 1234
            );
    }
    #or die "Connexion au serveur impossible.\n";
     
    my $pid = fork;
    die "Je ne peux pas forker !" if ! defined ($pid);
     
    if ($pid == 0) {
     # L'enfant écoute aussi pendant ce temps
     #############################################################
        while (my $ligne = <$socket> ) {
         print "serveur> $ligne"
        }
    } else {
      # c'est le père qui pendant ce temps écoute le serveur
      #######################################################
        while (my $ligne = <$socket>) {
         print "serveur> $ligne";
        }
    }
    Mon client a encore un problème comment faire pour que lorsque le serveur est hors ligne il continue d'écouter ?

Discussions similaires

  1. besoin d'aide sur les sockets
    Par Mnementh63 dans le forum C++
    Réponses: 11
    Dernier message: 24/02/2007, 11h51
  2. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00
  3. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  4. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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