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 confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    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