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

Langage Perl Discussion :

Aide pour modification de script


Sujet :

Langage 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 Aide pour modification de script
    Hello ! Pour les besoins d'un script je doit utiliser un serveur / client socket , j'ai trouver sur le net ces scripts

    http://www.ac-creteil.fr/util/progra...tp-reseau.html


    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);
     
     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 $ligne;
      }
     }
    }


    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
    #!/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";
        }
    }
    Je voudrais modifier leur fonctionnement pour que le client envoie un scalaire $data au serveur que celui si effectue certaines opérations dessus et renvoie le résultat au client.


    pour envoyer $data au serveur j'ai fait sa dans le client


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( $ligne = $data ) {
    ou $date = "lundi";

    je n'arrive pas a récupérer la varialble dans le serveur , effectuer des opérations et renvoyer le résultat au client.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut
    pour envoyer $data au serveur j'ai fait sa dans le client


    Code:
    while ( $ligne = $data ) {
    ou $date = "lundi";

    je n'arrive pas a récupérer la varialble dans le serveur , effectuer des opérations et renvoyer le résultat au client.
    Tu supprimes les lignes suivantes dans le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      while ($ligne = <> ) {
         print $socket $ligne;
        }
    et tu mets à la place
    Normalement ton serveur devrait récupérer la valeur de $data (attention il ne récupère pas la variable, mais sa valeur

    Rv

  3. #3
    Membre actif Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Points : 219
    Points
    219
    Par défaut
    Strach , je suis ok pour ce qui est de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($ligne = <> ) { 
         print $socket $ligne; 
        }
    Par contre je ne voie vraiment pas ou le serveur récupère la donnée , moi j'ai testé en faisant des print j'avoue ne pas savoir ou est passé la donné
    Vista powaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ::

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par scaleo
    Strach , je suis ok pour ce qui est de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($ligne = <> ) { 
         print $socket $ligne; 
        }
    Attention ce n'est pas ce que j'ai dit, si tu fais ça, $ligne contient ce qui est dans STDIN (l'opérateur diamant, <>, travaille par défaut sur STDIN), donc tu envois au serveur via la handle $socket, ce que tu rentres au clavier sur le client. Pour envoyer le contenu d'une variable $data, il faut faire
    Par contre je ne voie vraiment pas ou le serveur récupère la donnée , moi j'ai testé en faisant des print j'avoue ne pas savoir ou est passé la donné
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     # c'est le processus enfant, chargé de l'écoute des clients
     #############################################################
       while ($ligne = <$client> ) {
         print "client> $ligne";
     
       }
    Dans $ligne sur le serveur, tu récupère le contenu de $data.
    Il y a par contre deux autres soucis :
    - Il faut mettre tes handles en mode sans buffer, sinon pour optimiser les transfères (entre fichiers ou par réseaux) il "bufferise" et n'envoit pas ce que tu attends au bon moment !!!
    - Le while va tourner indéfiniment car il attend pour se finir que $ligne reçoive un "undef", ce que ta variable $data n'enverra pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour modif script
    Par Abdias dans le forum Langage
    Réponses: 5
    Dernier message: 12/10/2006, 07h00
  2. Aide pour un petit script
    Par perldebutant dans le forum Langage
    Réponses: 4
    Dernier message: 28/03/2006, 21h27
  3. Aide pour modification d'un menu dynamique
    Par GarGamel55 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/09/2005, 18h29
  4. Besoin d'aide pour faire un script
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 16/07/2005, 16h44

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