2011-01-31 2 views
3

Je vais commencer par dire que j'ai une expérience minimale de la programmation Perl et Socket, donc j'apprécie toute aide que je peux obtenir. J'ai un serveur TCP qui doit gérer plusieurs connexions client simultanément et être en mesure de recevoir des données de n'importe quel client à tout moment et également être en mesure de renvoyer des données aux clients en fonction des informations qu'il a reçues. Par exemple, Client1 et Client2 se connectent à mon serveur. Client2 envoie "Ready", le serveur l'interprète et envoie "Go" à Client1. Ce qui suit est ce que je l'ai écrit à ce jour:Perl TCP Server gérant plusieurs connexions client

my $sock = new IO::Socket::INET 
{ 
    LocalHost => $host, // defined earlier in code 
    LocalPort => $port, // defined earlier in code 
    Proto => 'tcp', 
    Listen => SOMAXCONN, 
    Reuse => 1, 
}; 
die "Could not create socket $!\n" unless $sock; 

while (my ($new_sock,$c_addr) = $sock->accept()) { 
    my ($client_port, $c_ip) = sockaddr_in($c_addr); 
    my $client_ipnum = inet_ntoa($c_ip); 
    my $client_host = ""; 

    my @threads; 

    print "got a connection from $client_host", "[$client_ipnum]\n"; 
    my $command; 
    my $data; 

    while ($data = <$new_sock>) { 
     push @threads, async \&Execute, $data; 
    } 
} 

sub Execute { 
    my ($command) = @_; 

    // if($command) = "test" 
    // send "go" to socket1 

    print "Executing command: $command\n"; 
    system($command); 
} 

Je sais que mes deux boucles while bloquera et je besoin d'un moyen de mettre en œuvre ma commande accepter comme un fil, mais je ne suis pas sûr de la bonne façon de l'écrire.

Répondre

Questions connexes