为什么我的Perl脚本在尝试与服务器通信时会挂起?

dig*_*age 2 perl tcp

介绍

我正在关注Stein的"Perl网络编程"一书.这是本书中的第二个Perl脚本,脚本尝试使用正确的协议与日间服务器进行通信,以便从服务器获取日期和时间作为响应.

从远程服务器读取第一行

#!/usr/bin/perl 
# file: lgetr.pl 

use IO::Socket; 


my $server = shift; 
my $fh = IO::Socket::INET->new($server); 
my $line = <$fh>; 
printf $line;
Run Code Online (Sandbox Code Playgroud)

运行脚本(已经使用chmod使其可执行)

然后本书使用此服务器作为连接的参数.

wuarchive.wust1.edu:daytime

./lgetr.pl wuarchive.wust1.edu:daytime
Run Code Online (Sandbox Code Playgroud)

问题

执行时,程序就会挂起.我猜这个程序正在等待来自服务器的响应.这是否意味着服务器不再存在?或者输错了?我怎么能让这个工作,或者我最好的选择是创建我自己的日间服务器?(我在C中有一点经验)

cho*_*oba 5

尝试一下这里提到的一些服务器:http://tf.nist.gov/tf-cgi/servers.cgi(谷歌第一次点击"白天").

另外,不要使用printf,其中print足够,特别是在没有格式字符串的情况下.

而且,似乎你需要第二行,而不是第一行.

您可以使用循环来打印所有行:

print while <$fh>;
Run Code Online (Sandbox Code Playgroud)

适用于我,例如time.maconbibb.us:daytime.