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 :
Or mis le "Server listening" le serveur n'affiche rien d 'autre.
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 #!/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; }
et voici aussi le code de mon client :
Et dans se cas présent je n'ai le droit qu'au "[Connected to 192.168.56.102:10200]"
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
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 a l'adresse mac a la ligne suivante.
Voila si quelqu'un aurait une idée du pourquoi du comment je suis preneur
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.
Partager