IO::Socket::Multicast を使うと簡単。
以下は試しに書いてみたサンプルコードです。
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use IO::Socket::Multicast;
my $server = "0";
my $client = "0";
GetOptions
("s|server" => \$server,
"c|client" => \$client);
if ( $server == '1' and $client == '0' ) { &Server; }
elsif ( $server == '0' and $client == '1' ) { &Client; }
else { exit; }
sub Server {
use constant GROUP => '224.1.1.1';
use constant PORT => '1100';
my $sock = IO::Socket::Multicast->new(Proto=>'udp',LocalPort=>PORT);
$sock->mcast_add(GROUP) || die "Couldn't set group: $!\n";
while ( 1 ) {
my $data;
next unless $sock->recv($data,256);
print "$data\n";
sleep 1;
}
return;
}
sub Client {
use constant DESTINATION => '224.1.1.1:1100';
my $sock = IO::Socket::Multicast->new(Proto=>'udp',PeerAddr=>DESTINATION);
my $msg = "hello";
$sock->send($msg) || die "Couldn't send: $!";
return;
}
exit;
■ サーバの実行
# perl mcast.pl -s
■ クライアントの実行
# perl mcast.pl -c
クライアントを実行する度にサーバ側でデータが受信され表示。
# perl mcast.pl -s hello hello hello
マルチキャスト通信を使っているというだけで、ただの echo サーバですけど考え方次第で色々と使えそう。