我的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";
我的server.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/),服务器应该运行该命令并将输出发送回客户端。
问题:-
该命令已在服务器上成功执行,但仅向客户端发送第一行。如果我再次按下来自客户端的任何键,则输出的下一行将发送到客户端。
或告诉我如何将多行输出发送回客户端。
任何帮助,将不胜感激。
谢谢
阿比舍克
最佳答案
服务器将所有行发送到客户端,但是客户端选择只读取一行:
print scalar <$socket>;
如果删除
scalar
,它将正常工作。 但是,您的体系结构仍然是安全的噩梦。 -T
开关)。 关于perl - 使用Perl客户端-服务器(套接字)执行远程命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13740906/