Python を使ったプログラム間通信の仕方を勉強していた.
ずいぶん目標に近づいてきた.
したいことは,ネットワーク上で情報の受信可能状態になっているホストをみつけ,そのホスト宛に情報を送信する,ということ.
前半の,「ネットワーク上で情報の受信可能状態になっているホストをみつけ」る部分は前回紹介した Bonjour を用いて行い,後半の「そのホスト宛に情報を送信する」のは TCPServer を用いて行うことを検討した.
pybonjour パッケージの example として公開されている browse_and_resolve.py と register.py を基本として,これらに改良加えることで目的の動作をするようにした.
browse_and_resolve.py には メッセージの発信者(Sender)としての機能を追加し,register.py にはメッセージ受信者(Receiver)としての機能を追加した.
サンプルコードは長くなるので後回しにし,まず実行結果を紹介する.
同一物理ネットワーク上のホスト2台(soave: Browser 兼 Sender と barbaresco: Register 兼 Receiver)を用いて試した結果は以下の通り.
まず,montepulciano (192.168.50.18) は TCPServer を使って情報の受信待機状態となると同時に,Bonjour を使って, _is._tcp というタイプのサービスを登録する.
このとき,fork を使ってプロセスを複製し,親プロセスには TCP 待機状態,子プロセスには Bonjour サービス登録,の役割をそれぞれ担わせる.
soave (192.168.50.11) は,Bonjour を使って,_is._tcp というタイプのサービスをネットワーク上に探す.
_is._tcp のサーバーが見つかればそのサーバーのホスト名から IP アドレスを取得し,そのアドレスに対して長い文字列を送信する.
browser_sender.py と register_receiver.py のどちらを先に起動しても良い.
browser_sender.py が先に起動された場合は,register_receiver.py が起動されてサービスが Bonjour で登録されるまで待機することになる.
register_receiver.py が先に起動された場合は,brower_sender.py は速やかにサービスを発見する.
サンプルプログラムは以下の通り.
オレンジ色の文字の部分が TCP による通信の処理をしているコードである.
プログラム間通信関連メモの目次
ずいぶん目標に近づいてきた.
したいことは,ネットワーク上で情報の受信可能状態になっているホストをみつけ,そのホスト宛に情報を送信する,ということ.
前半の,「ネットワーク上で情報の受信可能状態になっているホストをみつけ」る部分は前回紹介した Bonjour を用いて行い,後半の「そのホスト宛に情報を送信する」のは TCPServer を用いて行うことを検討した.
pybonjour パッケージの example として公開されている browse_and_resolve.py と register.py を基本として,これらに改良加えることで目的の動作をするようにした.
browse_and_resolve.py には メッセージの発信者(Sender)としての機能を追加し,register.py にはメッセージ受信者(Receiver)としての機能を追加した.
サンプルコードは長くなるので後回しにし,まず実行結果を紹介する.
同一物理ネットワーク上のホスト2台(soave: Browser 兼 Sender と barbaresco: Register 兼 Receiver)を用いて試した結果は以下の通り.
=== Browser / Sender === | === Register / Receiver === | |
soave[15]python browser_sender.py | montepulciano[21]python register_receiver.py |
まず,montepulciano (192.168.50.18) は TCPServer を使って情報の受信待機状態となると同時に,Bonjour を使って, _is._tcp というタイプのサービスを登録する.
このとき,fork を使ってプロセスを複製し,親プロセスには TCP 待機状態,子プロセスには Bonjour サービス登録,の役割をそれぞれ担わせる.
soave (192.168.50.11) は,Bonjour を使って,_is._tcp というタイプのサービスをネットワーク上に探す.
_is._tcp のサーバーが見つかればそのサーバーのホスト名から IP アドレスを取得し,そのアドレスに対して長い文字列を送信する.
browser_sender.py と register_receiver.py のどちらを先に起動しても良い.
browser_sender.py が先に起動された場合は,register_receiver.py が起動されてサービスが Bonjour で登録されるまで待機することになる.
register_receiver.py が先に起動された場合は,brower_sender.py は速やかにサービスを発見する.
サンプルプログラムは以下の通り.
オレンジ色の文字の部分が TCP による通信の処理をしているコードである.
=== Browser / Sender === |
import select |
=== Register / Receiver === |
import select |
プログラム間通信関連メモの目次