Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Windows & socket ... marche pas !

1 réponse
Avatar
Arnaud
Bonjour,

je souhaite écrire une application client / serveur sous windows.
Pour cela j'ai avant tout testé avec un script classique pour le client et
le serveur (cf fin de message).

Cela marche très bien sous linux mais ne fait rien sous windows ... je pense
que cela vient des forks ... Ma question est donc : comment faire un script
client / serveur sous windows via les sockets si fork ne marche pas sous
windows ...

Merci
Arnaud

#Le serveur
use IO::Socket;

$server = IO::Socket::INET->new(
LocalPort => 1234,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 5,
LocalHost => '127.0.0.1'
) 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;
}
}
}


# Le client
#!/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";
}
}

1 réponse

Avatar
dominix
Arnaud wrote:
Bonjour,

je souhaite écrire une application client / serveur sous windows.
Pour cela j'ai avant tout testé avec un script classique pour le
client et le serveur (cf fin de message).


$server = IO::Socket::INET->new(
LocalPort => 1234,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 5,
LocalHost => '127.0.0.1'
) or die "Création du serveur impossible.n";
print "Démarrage du serveur ..n";



il y a t'il un message d'erreur ?

$pid = fork;
die "Je ne peux pas forker !" if ! defined ($pid);



si le message d'erreur c'est
"Je ne peux pas forker !"
ou bien "Création du serveur impossible.n"

remplace donc ces messages par
"Je ne peux pas forker $!"
et "Création du serveur impossible $!n"
car $! contient le message d'erreur et là on en saura plus.

--
dominix