2010-11-23 6 views
0

J'essaye d'écrire une simple connexion IO :: Socket en perl. Cependant, je rencontre des problèmes. Voici le code du côté serveur:problème avec la connexion IO :: Socket TCP

my $listener = 
     IO::Socket::INET->new(LocalPort => 8000, Listen => 1, Reuse => 1); 

    die "Can't create socket for listening: $!" unless $listener; 
    print "Listening for connections on port 8000\n"; 

    while(1) { 
     while ($client = $listener->accept()) { 
     while (<$client>) { 
      my @arguments = split(/ /, $_); 
      my $result = "something" ;# here we do something in my code 
      warn $result; 
      print $client $result; 
      close $client; 
     } 
     } 
    } 

Et le code client:

use IO::Socket; 
my $sock = new IO::Socket::INET (
     PeerAddr => 'xx.xxx.xxx.xxx', 
     PeerPort => '8000', 
     Proto => 'tcp', 
); 
die "Could not create socket: $!\n" unless $sock; 
$sock->autoflush(1); 
print $sock "somethin something"; 
print "sent\n"; 
while (<$sock>) { print } 
close $sock; 

Mon problème est maintenant que les données semblent être envoyées uniquement à partir du client à Teh sever quand je ferme la programme client Perl. Je reçois le message "envoyé" du côté client, mais le message "quelque chose" du côté serveur n'apparaît qu'après que j'ai fermé manuellement le côté client.

En outre, je veux obtenir la réponse du serveur. Jusqu'à présent, puisque je dois fermer le script manuellement, la réponse n'est pas du côté client.

Quelqu'un peut-il aider?

Répondre

1

while (<$sock>)
- attend une ligne. C'est pour une chaîne, terminée par le caractère "\ n".

Vous devez ajouter "\ n" aux chaînes ou utiliser la fonction "read" à la place.

+0

Merci, ça marche! Je ne peux pas croire que je n'ai pas trouvé cette information avant ... Doit l'avoir manqué. – pyvi