Bonjour,
J’aimerais faire du client-serveur intéractif en Perl.
J’ai un serveur.pl qui fonctionne correctement, j’ai repris ce script : lien
Et j’ai un client.pl dont voici le code :
use IO::Socket;
use warnings;
use strict;
my ($sock, $kidpid);
$sock = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => "192.168.0.11",
PeerPort => 9000)
|| die "Failed : $!";
$sock->autoflush(1);
$kidpid = fork();
die "can't fork: $!" if ! defined($kidpid);
if ($kidpid) {
# PERE : Ecoute des entrées clavier et envoi à la socket
while (<STDIN>) { print $sock $_; }
} else {
# FILS : Ecoute de la socket et affichage à l'écran
while (<$sock>) { print STDOUT $_; }
}
close $sock;
Mon problème :
La connexion réussie, et le client reçoit et affiche les messages d’accueil du serveur.
Mais après la première ligne rentrée au clavier, çà se “bloque”. Et le serveur ne recoit même pas cette ligne.
Après un déboggage “approfondi” :p, j’en ai conclu que le processus père n’arrive pas à écrire sur la socket tant que le fils boucle sur cette même socket pour écouter.
En effet, si je ne fais que écrire ou que écouter, cà fonctionne très bien.
J’ai essayer plusieurs scripts client trouvés sur le net et j’en arrive toujours au même problème.
Même celui proposé ici réagit pareil : lien
Config : Windows 2000 , Perl 5.8.8
Est-ce à cause de Windows qui gère mal le fork() ou les sockets ?
Merci d’avance pour votre aide !!