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