Problème Socket entre windows et unix
Bonjour, pour un projet je dois faire communiquer deux script perl sur un réseaux. Le premier, jouant le rôle de serveur, se situe sur une machine UNIX (Ubuntu 10.04 pour les test) et le second sous Windows 7.
Pour mes test, j'ai virtualisé les deux systèmes d'exploitation sur mon pc portable et les ai mis sur le réseau local créé par Virtual Box.
Mon problème est que le client se connecte au serveur (enfin il semble) mais le serveur ne reçoit rien du tout. je n'ai aucun affichage dans les deux cas.
Voici donc le code de mon serveur simplifier au maximum pour les test :
Code:
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
|
#!/usr/bin/perl -w
use strict;
use IO::Socket;
$SIG{CHLD}='IGNORE';
#Creating socket
my $s = IO::Socket::INET->new(LocalAddr => '192.168.56.102',
LocalPort =>10200,
Listen => 1,
Reuse => 1);
die "No socket\n" unless $s;
print STDOUT "Server listening\n";
#Wait for a client
while(my $skt = $s->accept())
{
my $received;
#Message received
while(defined($received = <$skt>))
{
print "Client connected\n";
chomp $received;
print "Client say : $received\n";
print $skt "I don't understand what you say\n";
}
close $skt;
} |
Or mis le "Server listening" le serveur n'affiche rien d 'autre.
et voici aussi le code de mon client :
Code:
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 51
|
#!/usr/bin/perl -w
use strict;
use IO::Socket;
my ($host, $port, $kidpid, $skt, $line);
my ($netmask, $gateway) = ("255.255.248.0", "10.0.7.41");
die "usage: $0 host port" unless (@ARGV == 2);
($host, $port) = @ARGV;
#Creating socket
$skt = IO::Socket::INET->new("$host:$port")
or die "can't connect to port $port on $host: $!";
print STDOUT "[Connected to $host:$port]\n";
#Creating a fork()
die "can't fork: $!" unless defined($kidpid = fork());
if ($kidpid)
{
#Wait for a message from the server
while (defined ($line = <$skt>))
{
print STDOUT $line;
}
}
else
{
#Launch a ifconfig command and read the answer
open(MAC, "ipconfig /all |");
while(<MAC>)
{
my $ligne = $_;
#Search for an network interface called eth0
if($ligne =~ m/Physical Address/){
#Get back the MAC address of the interface
$ligne =~ s/\s+(\w+\s+\w+)(. ){9}:\s//;
$ligne =~ s/-/:/g;
#Send it to the server
print STDOUT $ligne;
print $skt $ligne;
last;
}
}
#Close the file
close(MAC);
} |
Et dans se cas présent je n'ai le droit qu'au "[Connected to 192.168.56.102:10200]"
et a l'adresse mac a la ligne suivante.
Voila si quelqu'un aurait une idée du pourquoi du comment je suis preneur :P
EDIT : après un petit test, il semble que lors de l'envoie d'un message du client, tout se bloque, comme si le message restai suspendu et que le serveur ne recevait rien et donc le client attend la confirmation de son envoie(enfin je pense^^)
EDIT2 : je m'y suis un peu remis aujourd'hui, en fait le serveur arrive a envoyer un message au client lors de la connexion se celui si, mais dés que le client envoie un message, le client a l'air de se bloquer totalement.