您的位置:首页 > 其它

perl udp socket program

2015-04-02 15:44 344 查看
#!/usr/bin/perl -w

use
strict;

use
Socket;

use
Sys::Hostname;

my
(
$count,
$hisiaddr,
$hispaddr,
$histime,

$host,
$iaddr,
$paddr,
$port,
$proto,

$rin,
$rout,
$rtime,
$SECS_OF_70_YEARS);

$SECS_OF_70_YEARS =
2_208_988_800;

$iaddr =
gethostbyname(hostname());

$proto =
getprotobyname("udp");

$port =
getservbyname("time",
"udp");

$paddr =
sockaddr_in(0,
$iaddr);
# 0 means let kernel pick

socket(SOCKET,
PF_INET,
SOCK_DGRAM,
$proto) ||

die "socket: $!";

bind(SOCKET,
$paddr) ||

die "bind: $!";

$| =
1;

printf
"%-12s %8s %s\n",
"localhost",
0,

scalar
localtime();

$count =
0;

for $host
(@ARGV)
{

$count++;

$hisiaddr =
inet_aton($host) ||

die "unknown host";

$hispaddr =
sockaddr_in($port,
$hisiaddr);

defined(send(SOCKET,
0,
0,
$hispaddr)) ||

die "send $host: $!";

}

$rin =
"";

vec($rin,

fileno(SOCKET),
1) =
1;

# timeout after 10.0 seconds

while ($count &&

select($rout =
$rin,

undef,
undef,
10.0))
{

$rtime =
"";

$hispaddr =
recv(SOCKET,
$rtime,
4,
0) ||

die "recv: $!";

($port,
$hisiaddr) =
sockaddr_in($hispaddr);

$host =
gethostbyaddr($hisiaddr,
AF_INET);

$histime =
unpack("N",
$rtime) -
$SECS_OF_70_YEARS;

printf
"%-12s ",
$host;

printf
"%8d %s\n",
$histime -
time(),

scalar
localtime($histime);

$count--;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: