0

私は Java の初心者で、ソケットと外部デバイスを含むプロジェクトに取り組んでいます。ユニットの小さなリスナーを作成しましたが、デバイスにメッセージを送信する際に問題が発生しています。

ユニットには、サーバーに送信される 2 つのメッセージがあります。1. ハート ビート メッセージ ウィッチは 16 進数です。

リスナーはデバイスごとに新しいスレッドを開き、メッセージを待機しています。メッセージの受信には DataInputStream を使用し、メッセージの送信には DataOutputStream を使用します。ユニットがサーバーに接続するたびに、ユニットは新しいスレッドを開き、ハートビートを取得します。そのハートビートから、どのタイプのデバイスが誰であるかがわかります。デバイスが新しい場合、ユニットが私に送信することを認識している 2 つの一意のシリアルに基づいて構成し、それらをデータベースと比較する必要があります。

私の問題は、デバイスに 2 つのシリアルを要求する部分にあります。30~40秒とかなり時間がかかります。コマンドの送信には 10 秒未満である必要があります (別の TCP サーバーでテスト済み)。

コードのその部分は次のとおりです。

String [] commands = deviceDetails.getConfigCommands().split(";"); // I take the commands from a file, and looks like: command1;command2
for (int i=0; i<commands.length; i++) {
sendCommand = commands[i].getBytes(); // sendCommand is a byte[]
out.write(sendCommand);
out.flush();

loop: while (true) {
    in.read(buffer); // buffer is a byte[]
    String[] result = new String(buffer, "ASCII").split(":|="); // the response from the unit looks like: ok:commandname=code, i need the code

    if (configCounter ==2 && imei.equals("")) {
        i = 0;
        break loop;
    } else if(configCounter == 2 && simid.equals("")) {
        i = 1;
        break loop;
    }
    configCounter++;

    switch (result[1]) {
        case "IMEI":
            imei = result[2];
            break loop;

        case "SIMID":
            simid = result[2];
            break loop;
    }
}

}

その間、ユニットからの応答を待っています。しかし、その前にコマンドをユニットに送信しようとしていますが、コマンドごとに約 30 ~ 40 秒かかります。

上記のコードの問題点を誰か教えてもらえますか? DataOutputStream でコマンドを 30 ~ 40 秒より速く送信するにはどうすればよいですか??

ありがとうございました!

4

0 に答える 0