2011-01-31 199 views
3

我將在前言中說我對Perl和Socket編程有最小的經驗,所以我很感激我能得到的任何幫助。我有一個TCP服務器需要同時處理多個客戶端連接,並且能夠隨時從任何一個客戶端接收數據,並且能夠根據收到的信息將數據發送回客戶端。例如,Client1和Client2連接到我的服務器。客戶端2發送「就緒」,服務器解釋併發送「去」到客戶端1。下面是我到目前爲止寫:處理多個客戶端連接的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); 
} 

我知道我的兩個while循環將被阻止的,我需要一種方法來實現我接受命令的線程,但我不知道正確的方法寫它。

回答