有时我从套接字中得到的不是我期望的
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
我得到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