mDNSはマルチキャストDNSで、主にLAN内のホスト同士が従来のDNSサーバーを使わずに互いに発見・通信できるようにし、使用されるポートは以下の通りです。5353はDNSプロトコルに従い、既存のDNS情報構造、構文、リソースレコード型を使用します。 また、新しいアクションコードやレスポンスコードも指定されていません。 LANでは、デバイスとデバイスが通信する前にお互いのIPアドレスを知る必要があります。多くの場合、デバイスのIPは静的IPではなく、DHCPプロトコルを通じて動的に割り当てられたIPアドレスです。デバイスの発見方法はMDNSによってそのスキルを示すことです。例えば、IoTデバイスとアプリ(アプリがブロードキャストまたはマルチキャストを通じて)との間で特定の情報を送信し、関心のあるデバイスが応答してLANデバイスの発見を実現します。もちろん、mDNSはこれよりも強力です。
サービス登録
まず、新しい.NET Core 3.1プロジェクトを作成し、nugetコマンドを使って以下のパッケージを参照します。
現在のサービス名と住所は放送によって特定され、以下のコードで示されます。
サービス発見
.NET/C#コードで実現可能なサービスディスカバリーは以下の通りです:
また、サービスディスカバリーを有効にしてすべてのブロードキャストを受信することもできます。コードは以下の通りです:
サーバー:CentOS Linux リリース 7.8.2003(Core)では、avahi と avahi-tools ツールをインストールすることでサービスも検出できます。インストールコマンドは以下の通りです:
avahi-daemonはLinuxオペレーティングシステム上で動作し、クライアントマシン上でネットワークベースのZeroconfサービスのルックアップを実装するサービスデーモンです。 このサービスはZeroconfネットワーク向けにDNSサービスディスカバリおよびDNSマルチキャスト仕様を実装できます。 ユーザープログラムは、Linux D-Busメッセージングを通じて発見されたネットワークサービスやリソースの通知を受け取ります。 このデーモンはユーザープログラムの応答をキャッシュし、応答に伴うネットワークトラフィックの削減を支援します。 avahi-daemon.service サービスを実行し、以下のコマンドで実行します:
avahi-toolsをインストールした後にavahi-browseコマンドを使うことができます。
LAN内のすべてのMDNSサービスを以下のコマンドで閲覧できます:
指定されたサービスをクエリするには、以下のコマンドが使われます:
.NET Coreアプリケーションを閉じて別のサーバーでサービスにクエリすると、以下のエラーが報告されます。
+ eth0 IPv4 テスト _itsvse_discovery._tcp local ドメイン「local」内の「_itsvse_discovery._tcp」型のサービス「test」の解決に失敗:タイムアウトに到達しました
添付はソースコードです:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ 答える
(終わり)
|