2011-01-31 4 views
3

필자는 Perl과 소켓 프로그래밍에 대해 최소한의 경험이 있다고 말하면서 얻을 수있는 도움을 주시면 감사하겠습니다. 나는 여러 클라이언트 연결을 동시에 처리하고 언제든지 클라이언트 중 하나에서 데이터를 수신 할 수 있어야하며 수신 된 정보를 기반으로 클라이언트에 데이터를 다시 보낼 수 있어야하는 TCP 서버가 있습니다. 예를 들어, Client1과 Client2는 내 서버에 연결합니다. Client2가 "Ready"를 전송하면 서버는이를 해석하고 "Go"를 Client1에 보냅니다. 다음은 내가 지금까지 쓴 것입니다 :다중 클라이언트 연결을 처리하는 Perl TCP 서버

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); 
} 

내 루프가 차단됩니다 동안 모두 알고 내가 스레드로 명령을 받아 내 구현하는 방법이 필요합니다,하지만 적절한 방법 확실하지 않다 그것을 쓰는 중.

답변

관련 문제