イーサネット通信を備えたマイクロコントローラーに基づくハードウェアがあります。
マイクロコントローラには TCP サーバーがあります。
ハードウェアを構成するために、Android 用の C# で作成されたアプリケーションがあります。
次に、アプリケーションには TCP クライアントがあります。
アプリがハードウェアを見つけるために、私が行っていることは、モバイルの同じネットワーク セグメントの各アドレスに ping を実行することです。つまり、私のモバイルの IP アドレスが 192.168.0.xx の場合、アドレス 192.168.0.1 からアドレス 192.168.0.255 に ping を実行します。
応答するアドレス、ソケットを開いてデータ フレームを送信しようとします。答えが正しければ、ローカル ネットワークにハードウェアが見つかったと想定します (複数のハードウェアが接続されている可能性があります)。
明らかに、応答しない IP アドレス、ソケットを開くことができない IP アドレス、または何か間違ったことに応答する IP アドレスは破棄されます。
これらの有効なアドレスがリストに表示され、ユーザーは対話するアドレスを選択できます。
また、これらの有効なアドレスはアプリケーションに保存されるため、次にアプリを開いたときに、保存されたアドレスに自動的に接続され、IP アドレスのスキャンが回避されます。
これは、ユーザーが初めてハードウェアをインストールしてアプリで構成したときに正しいように思えます
問題は、ルーターが月に 1 回 IP アドレスを更新するように構成されているというユーザーがいると知らされたことです。
これが発生した場合、アプリはすべての IP アドレスのスキャンを再度実行する必要があります。すべての IP のスキャンには時間がかかるため、これはやや面倒です。月に 1 回アプリとハードウェアを構成することにユーザーが満足しているとは思えません。
別の厄介な解決策として、静的 IP アドレスを使用することも考えられますが、それも良い考えではないと思います。
これを改善する方法について何か提案はありますか?