私の会社は、システム用に独自のカスタム Android ハードウェアを作成しています。
現在、互いに通信し、それらの内部の sqlite データベースを同期する必要がある 2 つの Android デバイスがあります。
この問題を解決するために、カスタム ソケット プロトコルの作成を開始しました。これは、サーバー クライアント モデルに基づいていました。しかし、開発を重ねるうちに、各デバイスでサーバー ソケットが実行されている必要があり、システム内で 3 つ以上のデバイスと通信することが可能であり、サーバーが停止したり、再起動したり、クラッシュしたりする可能性があることがわかりました。
したがって、私の考えは、各デバイスに配列に保存した一連のポートを検索させ、デバイスがチェックしたときに現在利用可能なポートにバインドし、その周りに ServerSocket を作成することです。
これは、device1 が ServerSocket(1111) を持ち、device2 が ServerSocket(1112) などを持っている可能性があることを意味します。
次に、各デバイスは複数のポートを介してメッセージを送信します。例: device1 は配列を繰り返し処理し、クライアント ソケットを開き、各ポートにメッセージを送信します。 Socket socket = new Socket(IP,1112); メッセージを送信します... Socket socket = new Socket(IP,1113); メッセージを送信...など
もちろん、私はすでにこれをマルチスレッド (Android サービスによって実行) にしているので、Android デバイスで UI スレッドをブロックすることはありません。
私の質問は、私はこれを正しく行っていますか? または、Javaでこれを行うためのより良い方法はありますか?
編集:
私の問題を説明するためにいくつかのコードを追加することにしました。
私は複数の Android デバイスを TCP/IP 経由で接続しており、各デバイスに次のように ServerSocket を作成しています。
ServerSocket serverSocket = new ServerSocket(4000);
2 番目のデバイスがこれを試みると、ソケットが別のデバイスによって使用されているため、Java でエラーが発生します。それらの IP アドレスは、172.23.3.128 や 172.23.3.127 のようなものです。
したがって、異なるIPアドレスを持っていても、Javaからエラーが発生し、そのポート/ IPに既にバインドされているというエラーが表示されます。これは私が理解していないものです。