ここでの UDP による通信を Perl で行なう方法については、以下の文献を参考にしました。
here% cat | ipmsg.pl -T -t thereターゲットアドレスを指定するオプション「-t」は省略可能ですが、その場合アドレスは、コマンドライン引数の最後尾でなければなりません。アドレスには「,」で区切って複数指定可能です(IPMSG_MULTICASTOPT)。アドレスに「all」と書いた場合は、メッセージをブロードキャストします(IPMSG_BROADCASTOPT)。そして、メッセージを投げつける「-T」オプションは、送り先に通達確認(IPMSG_SENDCHECKOPT)を要求しません。
もうすぐ21世紀だよ。
来世紀もどうぞよろしく。
^D
here%
ちなみに、環境変数LANGが「ja*」となっている場合にのみ jcode.pl により、IP Messenger で想定されているShift_JISコードへ変換されます。
here% echo 'ちょっとあれあれしといて' | ipmsg.pl -s -T there錠前付きの封書には「-k」オプションを指定します。
here%
% ipmsg.pl -i ~/include/X11/bitmaps/oneko/awake.xbm -T there
あしたの予定はきぃまったかなぁー
^D
% ipmsg.pl -I thereバージョン情報取得要求(IPMSG_GETINFO)を通達するオプション「-I」により、ターゲットアドレスの応答を受け次第、情報を表示し終了しますが、応答がない場合は数秒待った後、何も表示せずに終了します。ターゲットアドレスを省略することで自分自身 localhost とやり取りします。
message from foo@where at 2000年10月04日 (水) 13時41分42秒 JST
Win32版 Ver1.33
%
here% ipmsg.pl -I
message from me@here at 2000年10月04日 (水) 13時45分49秒 JST
ipmsg.pl 0.0 written by Taiji Yamada <taiji@aihara.co.jp>
here%
% ipmsg.pl -B there不在通知文取得要求(IPMSG_GETABSENCEINFO)を通達するオプション「-B」も上の例と同様に、メッセージの往復の通信で実現しています。
message from foo@where at 2000年10月04日 (水) 13時50分43秒 JST
Not Absence mode
%
% ipmsg.pl -G 192.168.0.21
message from somebody@somewhere at 2000年10月04日 (水) 14時12分23秒 JST
foo:where:0:192.168.0.5:2425:foo::
me:here:0:192.168.0.70:2425:me::
somebody:somewhere:0:192.168.0.21:2425:somebody::
he:there:0:192.168.0.23:2425:he::
ipmsg:server:0:192.168.0.67:2425:ipmsg:admin:
iam:home:0:192.168.0.66:2425:iam::
%
% ipmsg.pl -L但し通常は、ホストリスト送出可能通知を応答できるクライアントは見つからないでしょうから、このコマンドは自分自身で応答しようとします。しかし、上の例の場合、サービスにエントリ(IPMSG_BR_ENTRY)していないので、自分自身で保持するホストリストは空です。よって、以下のようにサービスにエントリしつつ数秒待った後に、ホストリスト送出可能メンバ探索同報を通知することにより、自分自身でホストリストの取得と表示を行なうことが出来ます。
message from ipmsg@server at 2000年10月04日 (水) 14時30分23秒 JST
foo:where:0:192.168.0.5:2425:foo::
me:here:0:192.168.0.70:2425:me::
somebody:somewhere:0:192.168.0.21:2425:somebody::
he:there:0:192.168.0.23:2425:he::
ipmsg:server:0:192.168.0.67:2425:ipmsg:admin:
iam:home:0:192.168.0.66:2425:iam::
%
here% ipmsg.pl -ELこの「-E」オプションによりサービスエントリ同報を行ないますが、このプロセスの終了時には、サービスを抜ける(IPMSG_BR_EXIT)ための同報が行なわれます。
message from me@here at 2000年10月04日 (水) 14時35分54秒 JST
foo:where:0:192.168.0.5:2425:foo::
me:here:0:192.168.0.70:2425:me::
somebody:somewhere:0:192.168.0.21:2425:somebody::
he:there:0:192.168.0.23:2425:he::
iam:home:0:192.168.0.66:2425:iam::
here%
home% ipmsg.pl -E -r下記は錠前付き封書のメッセージを受信した例です。
message from me@here at 2000年10月04日 (水) 16時08分57秒 JST
もうすぐ21世紀だよ。
来世紀もどうぞよろしく。
home% ipmsg.pl -E -r一応、(他の実装と同様に)封書は即座に表示されないようになっています。これを開封(IPMSG_READMSG)するには、localhost からの制御メッセージで、封書の開封コマンド「-R」を受信する必要があります。以下はその例です。
message keyed from me@here at 2000年10月04日 (水) 16時13分40秒 JST
#1
home% echo '-R' | ipmsg.pl -T開封ではなく、封書の破棄コマンド「-D」を localhost から受信するとメッセージは破棄(IPMSG_DELMSG)されます。
home% ipmsg.pl -E -r
message keyed from me@here at 2000年10月04日 (水) 16時13分40秒 JST
#1
message keyed from me@here at 2000年10月04日 (水) 16時15分09秒 JST
ちょっとあれあれしといて
open #1
「-r」オプションで起動したプロセスは、「Ctrl+C」などで終了する時に、サービスにエントリしているなら、サービスを抜けるための同報が行なわれます。
server% ipmsg.pl -EX -rこのように起動されたプロセスは、サービスに一旦はエントリするものの、数秒後には「-X」のオプションの効果により抜けてしまうので、他の IP Messenger の利用者たちには見えなくなります。これ以降は、ホストリスト送出要求をこのアドレスに対して通知すればよいでしょう。但し、このアドレスで他の IP Messenger は起動できません。