我正在使用Java从我的3G加密狗(GSM调制解调器)使用AT命令发送短信。它主要是工作,但有时SMS文本包含之前触发的部分AT命令。这是间歇性的,但需要修复。
相关代码如下:
public void sendMessage(String phoneNumber, String message) throws InterruptedException {
char qu=34;
char cz=26;
send("AT+CMGF=1\r\n");
Thread.sleep(2000);
send("AT+CMGS=" + qu + phoneNumber + qu + ",145\r\n");
send(message + cz + "\r");
}
public static void main(String args[]) {
GSMConnect gsm = new GSMConnect("COM22");
if (gsm.init()) {
try {
gsm.connect();
Thread.sleep(2000);
gsm.sendMessage("+9172xxxxxxxx", "Test Message sent from GSM Modem using AT Commands.");
System.out.println("Sleeping for 20 secs");
Thread.sleep(20000);
gsm.hangup();
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("Can't init this card");
}
}
我收到的信息有时如下:
AT + CMGS =“+ 9172xxxxxxxx”,145 使用AT命令从GSM调制解调器发送测试消息。
============
提前感谢您的帮助!
此致 Kumarjit
答案 0 :(得分:0)
首先获取一张A3大纸,找一支红笔并写1000次
我永远不会使用
Thread.sleep
代替来自调制解调器的阅读和解析响应。我永远不会使用
Thread.sleep
代替来自调制解调器的阅读和解析响应。我永远不会使用
Thread.sleep
代替来自调制解调器的阅读和解析响应。我永远不会使用
Thread.sleep
代替来自调制解调器的阅读和解析响应。我绝不会使用
Thread.sleep
代替来自调制解调器的阅读和解析响应。...
然后按照有关V.250 的说明阅读this answer,。等到你在回到修复代码之前已经正确地消化了答案中的所有信息(可能需要一些时间让所有信息都沉入其中)。
当然第一部分意味着很有趣,但我对其余部分已经认真了;你必须填补一些巨大的AT命令知识“漏洞”。 这应该不是很困难,但需要付出一些努力。
虽然我无法确切地说明你的AT命令的部分内容是如何在消息内容中结束的,但其根本原因在于你没有像你应该那样阅读和解析调制解调器的响应。
<强> TL; DR:强> 您必须阅读并解析调制解调器发回给您的所有内容。 其他任何东西都无法可靠地运作。