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

Sometimes I get from socket not what I expect

我得到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);
}

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

$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 可能 return 只是 "OK" 或 "TROUBLE",但在 100 种情况中的一种情况下,我得到的信息完全不同。为什么会发生? Apache 和 perl 脚本在 VMware 虚拟机上。

因为您只需要一个 GET 请求,所以您不需要求助于 IO::Socket::INET 和处理 HTTP,让 LWP 为您做这件事。

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

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