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 :

client/server tcp, probleme socket


Sujet :

Programmation et administration système Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut client/server tcp, probleme socket
    Bonjour,

    J'ai lu certains posts sur le forum qui traitaient de la même chose mais cela n'a pas résolu mon problème.

    Je suis parti d'une architecture simple client/server. D'ailleurs elle est encore commentée dans mon code. Ce que je veus faire c'est lire des données dans un fichier les envoyer au serveur, ce dernier fait les traitements qu'il a à faire, et renvoie un résultat au client. Quand le client reçoit cette réponse il va l'écrire dans un autre fichier.
    Voici le code que j'ai écrit
    Le Client TCP :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #!/usr/bin/perl
    use strict;
    use IO::Socket;
    my ($host, $port, $kidpid, $handle, $line);
     
    unless (@ARGV == 2) { die "usage: $0 host port" }
    ($host, $port) = @ARGV;
     
     
     
    $handle = IO::Socket::INET->new(Proto     => "tcp",
                                    PeerAddr  => $host,
                                    PeerPort  => $port)
           or die "can't connect to port $port on $host: $!";
     
    $handle->autoflush(1);            
    print STDERR "[Connected to $host:$port]\n";
     
    die "can't fork: $!" unless defined($kidpid = fork());
     
    if ($kidpid) {
        # le pere copie la socket dans un fichier
        open(RV,">>192.168.1.2.rv") || die "Impossible d'ouvrir le fichier\n";
        my $line = <$handle>;
        print RV $line;
        close RV;
       #  while (defined ($line = <$handle>)) {
        #     print STDOUT $line;
         #}
     
         kill("TERM" => $kidpid);        # envoie SIGTERM au fils
    }
    else {
        my @tmp;
        # copie la donne sur la socket
        open(TE,"192.168.1.2.se") || die "Impossible d'ouvrir le fichier\n";
        while(<TE>) {
                   @tmp = split(' ',$_) ;
                    print("Fichier non vide et $tmp[1] \n");
                    print $handle $tmp[1];
        }
        close(TE);
    #      while (defined ($line = <STDIN> )) {
    #     	print $handle $line;
    #      }
     
    }
     
    exit;
    Le serveur TCP

    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
     
    #!/usr/bin/perl
    use IO::Socket;
    use Net::hostent;
    $server = IO::Socket::INET->new(LocalPort => 8001,
                                    Type      => SOCK_STREAM,
                                    Reuse     => 1,
                                    Listen    => 10 )
        or die "Couldn't be a tcp server on port 8001 : $@\n";
     
        	while ($client = $server->accept()) {
        		$client->autoflush(1);
    		while (defined ($line = <$client>) ) {
    		print("line vaut $line \n");
    		print $client $line;
    		}
     
    	}
     
    close($server);
    Le probleme que j'ai c'est : côté serveur la ligne : "line vaut ..." ne s'affiche pas dans la console. Pour qu'elle s'affiche il faut que du coté client je fasse CTRL+C et la cette ligne s'affiche, bien sur vu que j'ai tué le client c'est mort pour lui renvoyer la donnée.
    Je comprends pas pourquoi cela ne s'affiche pas directement, quand j'entre quelque chose au clavier, le server reçoit bien ce que j'ai entré et cela est bien recopié sur la partie cliente (code que j'ai laissé entre commentaire). Je ne vois pas quoi les modifications que j'ai faites ammènent un blocage...

    Merci de m'éclaircir

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé le problème que j'avais en fait l'erreur venait de :

    print $handle $tmp[1];

    il fallait que j'envoie le \n et donc faire :
    print $handle $tmp[1]."\n";

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

Discussions similaires

  1. probleme de communication client server (socket
    Par pepejorje dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 07/02/2014, 10h36
  2. [Article] client/server TCP
    Par moldavi dans le forum Contribuez
    Réponses: 8
    Dernier message: 08/06/2012, 16h37
  3. [C] Probleme avec socket client-serveur TCP
    Par LinuxUser dans le forum Réseau
    Réponses: 33
    Dernier message: 15/05/2007, 22h26
  4. [Reseau] probleme client/serveur TCP LInux
    Par jmjmjm dans le forum Réseau
    Réponses: 20
    Dernier message: 03/12/2006, 19h32
  5. [Socket][Client/Server]Exception d'origine inconnue
    Par willowII dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/11/2005, 22h36

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