有时我从套接字得到的不是我所期望的

时间:2015-01-23 11:00:11

标签: perl sockets tomcat servlets virtual-machine

我得到Httpd的套接字句柄,主机是“127.0.0.1”,端口是80;

sub getHttpNetSock {
    my $client = IO::Socket::INET->new(Proto     => "tcp",
                                    PeerAddr  => $host,
                                    Blocking  => 1,
                                    PeerPort  => $port)
        or return($client);
    $client->autoflush(1);              # so output gets there right away
    return($client);
}

在此之后,如果我能够连接,我尝试从socket获取信息。

$ch = getHttpNetSock($apachePort);
if ($ch) {
$ret = getSockVal($ch, $apachePort);
}

其中getSockVal:

sub getSockVal {
    my $sock = shift;
    print $sock "GET http://127.0.0.1:80/test/servlet/HealthServlet\n";   
    my $val= <$sock>;
    chomp($val);
    return($val);
}

HealthServlet只能返回“OK”或“TROUBLE”,但在100个案例中,我得到了绝对的另一个信息。为什么会发生? Apache和perl脚本位于VMware虚拟机上。

1 个答案:

答案 0 :(得分:3)

由于你只是想要一个GET-Request,你不需要求助于IO :: Socket :: INET并处理HTTP,让LWP为你做这件事。

为了便于错误检查,首选方法是使用LWP :: UserAgent,如下所述:

http://search.cpan.org/dist/libwww-perl/lib/LWP/UserAgent.pm