IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Problème Socket entre windows et unix


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 15
    Points
    15
    Par défaut 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 : 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;
    }
    Or mis le "Server listening" le serveur n'affiche rien d 'autre.

    et voici aussi le code de mon client :
    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 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

    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.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Problème résolu !

    J'ai fini par trouver sur un site caché loooiiiin sur internet une personne ayant sensiblement le même souci.
    Il s’avère en fait que sous Windows lors d'un fork, si le fils attend sur un socket au cas où il y aurai quelqu'un qui parle, le père ne peut pas parler sur le socket en question -_-.

    Sans fork donc sa fonctionne parfaitement.

    Je remercie ceux qui ont pris la peine de lire se post^^.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2012, 16h25
  2. portabilité programme perl entre windows et unix
    Par danathane dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 11/01/2010, 12h20
  3. Réponses: 5
    Dernier message: 16/03/2006, 00h09
  4. Réponses: 2
    Dernier message: 21/10/2004, 15h08
  5. Réponses: 3
    Dernier message: 30/03/2004, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo