Моя цель: реализовать программирование сокетов, чтобы клиент пытался подключиться к серверу, если сервер не установлен на удаленном компьютере, клиент (хост) со своей стороны передает tar-файл на сервер (target) и скрипт perl. Этот скрипт perl распаковывает папку и запускает скрипт (серверный perl-скрипт), теперь проблема заключается в следующем: этот серверный скрипт должен запускаться вечно (несколько клиентов), пока машина не перезагрузится или что-то не произойдет. , поэтому скрипт работает правильно: но поскольку он постоянно работает, элемент управления не возвращается к клиенту, который снова попытается подключиться к серверу (на каком-то предопределенном сокете), поэтому в основном я хочу, чтобы каким-то образом я запускал сервер, но возвращал обратно для моего хоста, который является клиентом в этом случае.Perl: реализация программирования сокетов (система никогда не возвращается)
вот код:
my $sourcedir = "$homedir/host_client/test.tar";
my $sourcedir2 = "$homedir/host_client/sabkuch.pl";
my $remote_path = "/local/home/hanmaghu";
# Main subroutines
my $ssh = Net::OpenSSH->new ($hostmachine, user =>$username, password => $password);
$ssh->scp_put($sourcedir,$sourcedir2,$remote_path)
or die "scp failed \n" . $ssh->error;
# test() is similar to system() in perl openssh package
my $rc = $ssh->test('perl sabkuch.pl');
# check if test function returned or not -> this is never executed
if ($rc == 1) {
print "test was ok , server established \n";
}
else {
print "return from test = $rc \n";
}
exit;
Другой сценарий, который ссылается на наш серверный скрипт является:
#!/usr/bin/perl
use strict;
use warnings;
system('tar -xvf test.tar');
exec('cd utpsm_run_automation && perl utpsm_lts_server.pl');
#system('perl utpsm_lts_server.pl');
# Tried with system but in both cases it doesn't return,
# this xxx_server.pl is my server script
exit;
Сценарий сервера:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;
#flush after every write
$| =1;
my $socket = new IO::Socket::INET (
LocalHost => '0.0.0.0',
LocalPort => '7783',
Proto => 'tcp',
Listen => 5,
Reuse => 1
);
die "cannot create socket $! \n" unless $socket;
print "server waiting for client on port $socket->LocalPort \n";
while (1)
{
# waiting for new client connection
my $client_socket = $socket->accept();
# get info about new connected client
my $client_address = $client_socket->peerhost();
my $client_port = $client_socket->peerport();
print "connection from $client_address:$client_port \n";
# read upto 1024 characters from connected client
my $data = "";
$client_socket->recv($data,1024);
print "rceeived data = $data";
# write response data to the connected client
$data = "ok";
$client_socket->send($data);
# notify client response is sent
shutdown($client_socket,1);
}
$socket->close();
Пожалуйста, помогите, как выполнить это: с точки зрения дизайна это то, что я хочу, но имея эту проблему во время реализации, могу ли я сделать это несколько другой работа вокруг способ.
Напоминание см. В разделе «Что делать, если кто-то отвечает на мой вопрос?» (Http://stackoverflow.com/help/someone-answers) – zdim