je voudrais faire une appli pour faire dialoguer 2 system, pb je n'arrive
pas à les faire dialoguer
dans les 2 sens, je m'explique :
server.pl ouvre un socket sur le port 8888, il doit m'afficher ce qu'il
recoit et repondre au client.pl
qu'il à bien recu les information.
actuellement le serveur est incapable de me dire ce qu'il recoit (je pense
que le client emet bien)
merci pour votre aide
---------------------------------------------------
# server.pl
use strict;
use Socket;
my $port = 8888;
my $proto = getprotobyname('tcp');
socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";
my $paddr = sockaddr_in($port, INADDR_ANY);
bind(SERVER, $paddr) or die "bind: $!";
listen(SERVER, SOMAXCONN) or die "listen: $!";
print "server listen on port : $port\n";
my $client_addr;
while ($client_addr = accept(CLIENT, SERVER)) {
# accepte la connection
my ($client_port, $client_ip) = sockaddr_in($client_addr);
my $client_ipnum = inet_ntoa($client_ip);
my $client_host = gethostbyaddr($client_ip, AF_INET);
# affiche la connexion et repond au client
print "connection de : $client_host", " ($client_ipnum) \n";
print CLIENT "SRV: welcome ! \n";
#!/usr/local/bin/perl
#
# Client qui emet les messages.
#
use Socket;
my $port = 8888;
my $protoc = getprotobyname('tcp');
my $adrserv = 'localhost'; # machine locale pour les tests
my $iaddr = inet_aton($adrserv);
my $paddr = sockaddr_in($port,$iaddr);
#
# création de la socket et connexion au serveur
#
socket (SOCK, PF_INET, SOCK_STREAM, $protoc) || die ("Erreur Creation
Socket: $!");
connect(SOCK, $paddr) || die ("Erreur Connect: $!");
#
# Saisie et émission ligne à ligne du message
#
my $line;
while ($line = <SOCK>) {
print "$line\n";
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Ronan Le Hy
Alain a écrit:
server.pl ouvre un socket sur le port 8888, il doit m'afficher ce qu'il recoit et repondre au client.pl qu'il à bien recu les information. actuellement le serveur est incapable de me dire ce qu'il recoit (je pense que le client emet bien)
[...] my $line; while ($line = <SOCK>) { print "$linen"; }
Ce while ne se termine pas (au moins tant que la socket n'est pas refermée, ou tant que le serveur n'envoie pas une ligne vide). Donc le client n'arrive jamais aux deux lignes ci-dessous.
print SOCK "CLNT : yo ! n"; print SOCK "FIN n";
close SOCK;
Si j'ajoute last if $line =~ /welcome/; dans le while du client (ainsi que des montants appropriés de ++$|, et autres select((select(OUTPUT_FILEHANDLE), $| = 1)[0]); pour m'assurer que tout se fait imprimer en temps et en heure (perldoc -q flush)), tout marche bien.
HTH
-- Ronan
The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language. Donald E. Knuth
Alain a écrit:
server.pl ouvre un socket sur le port 8888, il doit m'afficher ce qu'il
recoit et repondre au client.pl
qu'il à bien recu les information.
actuellement le serveur est incapable de me dire ce qu'il recoit (je pense
que le client emet bien)
[...]
my $line;
while ($line = <SOCK>) {
print "$linen";
}
Ce while ne se termine pas (au moins tant que la socket n'est pas
refermée, ou tant que le serveur n'envoie pas une ligne vide). Donc le
client n'arrive jamais aux deux lignes ci-dessous.
print SOCK "CLNT : yo ! n";
print SOCK "FIN n";
close SOCK;
Si j'ajoute
last if $line =~ /welcome/;
dans le while du client (ainsi que des montants appropriés de ++$|, et
autres
select((select(OUTPUT_FILEHANDLE), $| = 1)[0]);
pour m'assurer que tout se fait imprimer en temps et en heure (perldoc
-q flush)), tout marche bien.
HTH
--
Ronan
The most important thing in the programming language is the name. A
language will not succeed without a good name. I have recently invented
a very good name and now I am looking for a suitable language.
Donald E. Knuth
server.pl ouvre un socket sur le port 8888, il doit m'afficher ce qu'il recoit et repondre au client.pl qu'il à bien recu les information. actuellement le serveur est incapable de me dire ce qu'il recoit (je pense que le client emet bien)
[...] my $line; while ($line = <SOCK>) { print "$linen"; }
Ce while ne se termine pas (au moins tant que la socket n'est pas refermée, ou tant que le serveur n'envoie pas une ligne vide). Donc le client n'arrive jamais aux deux lignes ci-dessous.
print SOCK "CLNT : yo ! n"; print SOCK "FIN n";
close SOCK;
Si j'ajoute last if $line =~ /welcome/; dans le while du client (ainsi que des montants appropriés de ++$|, et autres select((select(OUTPUT_FILEHANDLE), $| = 1)[0]); pour m'assurer que tout se fait imprimer en temps et en heure (perldoc -q flush)), tout marche bien.
HTH
-- Ronan
The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language. Donald E. Knuth