2011-01-31 138 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循环将被阻止的,我需要一种方法来实现我接受命令的线程,但我不知道正确的方法写它。

回答

相关问题