[Perl]IO::Socket实际应用

远程获取其他主机信息,适于远程主机管理(实际应用时添加必要的验证、加密、端口过滤等内容)。

server1:   srv1200read.pl  zclient2200.pl

server45: srv2200read.pl

server1监听1200端口,server45监听2200端口

server1向server45的2200端口发送消息,server45处理后向server1的1200端口返回处理后内容。

#!/usr/bin/perl -w
##srv1200read.pl 
use IO::Socket;
use IO::Select;
$socketread = new IO::Socket::INET (LocalHost => 'server45',
                              LocalPort => 1200,
                              Proto     => 'tcp',
                              Listen    => 5,
                              Reuse     => 1,
                             );
$read_set = new IO::Select;
$read_set->add($socketread);
while (1) {
        ($new) = IO::Select->select($read_set, undef, undef, undef);
        foreach $sock (@$new) {
                if ($sock == $socketread) {
print "########################################## ";
                        while ($new_sock=$sock->accept()) {
                                while (defined ($buf=<$new_sock>)) {
                                        #receive and control $buf
                                        print $buf;
                                }
                        }

                }
        }
}

###########################################################################

#!/usr/bin/perl -w
##srv2200read.pl 
use IO::Socket;
use IO::Select;
$socketread = new IO::Socket::INET (LocalHost => 'server1',
                              LocalPort => 2200,
                              Proto     => 'tcp',
                              Listen    => 5,
                              Reuse     => 1,
                             );
                           );
$read_set = new IO::Select;
$read_set->add($socketread);
while (1) {
        ($new) = IO::Select->select($read_set, undef, undef, undef);
        foreach $sock (@$new) {
                if ($sock == $socketread) {
                        while ($new_sock=$sock->accept()) {
                                while (defined ($buf=<$new_sock>)) {
                                        #receive and control $buf
                                        print "RECEIVE COMMAND:  ". $buf;
                                        $sock1 = new IO::Socket::INET (PeerAddr => 'server45',
                                                                      PeerPort => 1200,
                                                                      Proto    => 'tcp'
                                                                        );
                                        die "Socket could not be created. Reason: $! " unless $sock1;

                                        $aa=`$buf`;
                                        print $sock1 "$aa ";
                                        $sock1->flush();
                                        }

                                }
                }

        }
}

##################################################################################

#!/usr/bin/perl -w
#zclient2200.pl

use IO::Socket;
$sock = new IO::Socket::INET (PeerAddr => 'server1',
                              PeerPort => 2200,
                              Proto    => 'tcp'
);
die "Socket could not be created. Reason: $! " unless $sock;

####send data to srv
while () {
print "[COMMAND]# ";
$_=<STDIN>;
chomp($_);

print $sock "$_ ";
$sock->flush();
print "OK! ";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值