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循環將被阻止的,我需要一種方法來實現我接受命令的線程,但我不知道正確的方法寫它。