私のclient.pl
#!/usr/bin/perl
use IO::Socket::INET;
use strict;
my $name = '172.20.10.189'; #Server IP
my $port = '7890';
my $socket = IO::Socket::INET->new('PeerAddr' => $name,
'PeerPort' => $port,
'Proto' => 'tcp') or die "Can't create socket ($!)\n";
print "Client sending\n";
while (1) {
my $msg = <STDIN>;
print $socket $msg;
print scalar <$socket>;
}
close $socket
or die "Can't close socket ($!)\n";
私のサーバー.pl
#!/usr/bin/perl
use IO::Socket::INET;
use strict;
my $port = "7890";
my $socket = IO::Socket::INET->new('LocalPort' => $port,
'Proto' => 'tcp',
'Listen' => SOMAXCONN)
or die "Can't create socket ($!)\n";
while (my $client = $socket->accept) {
my $name = gethostbyaddr($client->peeraddr, AF_INET);
my $port = $client->peerport;
while (<$client>) {
print "[$name $port] $_";
my @out = `$_`;
print @out;
print $client "$.: @out";
}
close $client
or die "Can't close ($!)\n";
}
die "Can't accept socket ($!)\n";
私のクライアントはコマンド (ls -lrt /) をサーバーに送信しており、サーバーはそのコマンドを実行し、出力をクライアントに送り返すことになっています。
問題:-
コマンドはサーバー上で正常に実行されますが、最初の行のみがクライアントに送信されます。クライアントから任意のキーをもう一度押すと、出力の次の行がクライアントに送信されます。
または、複数行の出力をクライアントに送信する方法を教えてください。
どんな助けでも大歓迎です。
ありがとうアビシェーク