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--;
}
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--;
}
相关文章推荐
- How To: Perl TCP / UDP Socket Programming using IO::Socket::INET
- socket、TCP、UDP、HTTP、FTP
- C#UDP入门|Socket通信|UdpClient通信
- C语言的Socket编程例子(TCP和UDP)
- UDP socket也可以使用connect系统调用
- Python+Socket实现基于UDP协议的局域网广播功能示例
- TCP与UDP在socket编程中的区别
- UDP之socket通信
- UDPsocket编程
- 基于TCP和UDP的Socket编程事例代码
- java学习——java 面向 Socket 操作,TCP 和 UDP 示例
- Udp SocketAsyncEventArgs SocketAsyncDataHandler
- 基于UDP的socket聊天室
- Windows UDP socket recvfrom返回10054错误的解决办法
- [C++] socket - 2 [UDP通信C/S实例]
- TCP-UDP Socket
- Java-Socket网络编程TCP和UDP的使用
- TCP--UDP常用代码(socket编程--网上搜索自己整理的)
- [深入浅出WP8.1(Runtime)]Socket编程之UDP协议
- 网络编程Socket之UDP