私は電話だけでなくコンピューターでも動作するソフトウェアを書いています。
このサービスは通信に HTTP API を使用し、Zeroconf を使用してローカル ネットワーク上で公開されます。
最初に、サービス タイプとして使用してサービスを公開し_http._tcp.
ましたが、NAS と音楽レシーバー (!) の両方が、その正確なサービス タイプで自分自身をブロードキャストしていることがすぐにわかりました。
そのため、私のサービスと HTTP を使用している他のサービスをどのように区別するかという問題が生じます。
代替案
別のサービス タイプを使用する
これは間違いなく最も簡単な方法であり、(ほぼ) 他のサービスが使用されないことを保証します。
ただし、Apple 1によると、新しいサービスはIANA に登録する必要があります。これは明らかに必須ではありませんが、彼らが推奨しているように見ると、それを行う方法が間違っているように感じます
TXT レコードの使用
Apple 2では、TXT レコードを次のように説明しています。
サービスが登録されると、サービス (SRV) レコード、ポインター (PTR) レコード、およびテキスト (TXT) レコードの 3 つの関連する DNS レコードが作成されます。TXT レコードには、サービスを解決または使用するために必要な追加データが含まれていますが、多くの場合空でもあります。
確かにそれが正しい方法である可能性があるように感じますが、まだ確信が持てず、フィールドに何を含める必要があるかの説明を見つけるのは困難です.
<service_name>-<version>
私の最初のことは、それが実際にどのサービスであるかを確認するために解析されるようなものを置くことです。
私の NAS は、モデル番号とバージョン番号を識別するためにこれを使用しているようです。
サービスに話しかけてみてください
サービスを見つけたら、常にHEAD
既知のエンドポイントでリクエストを実行し、サービスによって設定された既知のヘッダーを探すことができます。
HEAD
これはかなり遅いアプローチのように感じられ、受信者にリクエストを送信するとどうなるかは誰にもわかりません。
明確にするために、この質問は特定の言語やフレームワークとは関係なく、zeroconf の概念に関するものです。
いくつかのコードを表示できますが、それがどのように役立つかわかりません。