私は 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 秒より速く送信するにはどうすればよいですか??
ありがとうございました!