我正在通过RS 232串口向GSM调制解调器发送“AT”命令以发送消息。 我在“for”循环中这样做,我需要知道如何减少在for循环中为成功发送消息而需要提供的延迟。
延迟变化很大,例如将消息发送到10 ppl,延迟3800ms就足够了,但对于200个接收者,延迟需要增加到9000ms。
环境 - Netbeans,javax.comm api,具有波特率的wavecom fastrack调制解调器 - 115200 [支持],RS232串口连接。
我正在做类似的事情 -
OutputStream os = serialPortInstance.getOutputStream();
String arrOfNumbers = {"872346334","23423433"};//I have the list of numbers here
String command = "";
for(int i = 0 ;i < arrOfNumbers.length ; i++){
command = "AT+CMGS=\""+arrOfNumbers[i]+"\"\nHello" + ((char)26);
os.write(command.getBytes());
Thread.sleep(5000);
}
我想尽量减少这种延迟 请帮助, 谢谢。
答案 0 :(得分:3)
延迟是超级的 - OutputStream将阻塞,直到所有数据都被写入。你的真正的问题可能是你发送命令后设备正忙,如果你太快发送它就会中止上一个命令。
通过检查设备的回复可以避免这种情况。在每个命令之后,您还需要打开一个InputStream并等待以获取设备的回复。有关可能给出的回复,请参阅设备手册。
答案 1 :(得分:0)
这会使你的for循环更有效:
final OutputStream os = serialPortInstance.getOutputStream();
final String arrOfNumbers = {"872346334","23423433"};//I have the list of numbers here
final Byte[] commands = new Byte[arrOfNumbers.length];
for(int i = 0 ;i < arrOfNumbers.length ; i++){
final String commandString = "AT+CMGS=\""+arrOfNumbers[i]+"\"\nHello" + ((char)26);
commands[i++] = commandString.getBytes();
}
for (int i = 0; i < arrOfNumber.length; i++) {
os.write(commands[i]);
os.flush();
Thread.sleep(5000);
}