用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - perl代码库

perl 设置一个UDP客户端

2012-10-14 作者: 神马举报

[perl]代码库

#-----------------------------
use Socket;
socket ( SOCKET, PF_INET, SOCK_DGRAM, getprotobyname ( "udp" ) )
or die "socket: $!";
#-----------------------------
use IO::Socket;
$handle = IO::Socket::INET->new ( Proto => 'udp' )
          or die "socket: $@";
# yes, it uses $@ here
#-----------------------------
$ipaddr   = inet_aton ( $HOSTNAME );
$portaddr = sockaddr_in ( $PORTNO, $ipaddr );
send ( SOCKET, $MSG, 0, $portaddr ) == length ( $MSG )
or die "cannot send to $HOSTNAME($PORTNO): $!";
#-----------------------------
$portaddr = recv ( SOCKET, $MSG, $MAXLEN, 0 )      or die "recv: $!";
( $portno, $ipaddr ) = sockaddr_in ( $portaddr );
$host = gethostbyaddr ( $ipaddr, AF_INET );
print "$host($portno) said $MSG\n";
#-----------------------------
send ( MYSOCKET, $msg_buffer, $flags, $remote_addr )
or die "Can't send: $!\n";
#-----------------------------
# download the following standalone program
#!/usr/bin/perl
# clockdrift - compare another system's clock with this one
use strict;
use Socket;

my ($host, $him, $src, $port, $ipaddr, $ptime, $delta);
my $SECS_of_70_YEARS      = 2_208_988_800;

socket(MsgBox, PF_INET, SOCK_DGRAM, getprotobyname("udp"))
or die "socket: $!";
$him = sockaddr_in(scalar(getservbyname("time", "udp")),
                   inet_aton(shift || '127.1'));
defined(send(MsgBox, 0, 0, $him))
or die "send: $!";
defined($src = recv(MsgBox, $ptime, 4, 0))
or die "recv: $!";
($port, $ipaddr) = sockaddr_in($src);
$host = gethostbyaddr($ipaddr, AF_INET);
my $delta = (unpack("N", $ptime) - $SECS_of_70_YEARS) - time();
print "Clock on $host is $delta seconds ahead of this one.\n";

#-----------------------------


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...