处理多个客户端连接的 Perl TCP 服务器

4

首先声明,我在Perl和Socket编程方面都缺乏经验,所以非常感谢您的帮助。我有一个TCP服务器需要同时处理多个客户端连接,并能够随时接收任何一个客户端发送的数据,并根据接收到的信息向客户端发送数据。例如,Client1和Client2连接到我的服务器。Client2发送"Ready",服务器解释这个消息并向Client1发送"Go"。以下是我目前已经写的代码:

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循环都是阻塞的,我需要一种实现接受命令作为线程的方法,但我不确定正确的编写方式。
1个回答

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接