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 サーバですけど考え方次第で色々と使えそう。