使用JAVA将AT命令作为消息的一部分发送

使用JAVA将AT命令作为消息的一部分发送,java,gsm,at-command,Java,Gsm,At Command,我正在使用Java通过AT命令从我的3G加密狗(GSM调制解调器)发送SMS。它基本上正常工作,但有时SMS文本包含在此之前启动的at命令的一部分。这是间歇性的,但需要修复 有关守则如下: public void sendMessage(String phoneNumber, String message) throws InterruptedException { char qu=34; char cz=26; send("AT+CMGF=1\r\n"); Th

我正在使用Java通过AT命令从我的3G加密狗(GSM调制解调器)发送SMS。它基本上正常工作,但有时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

从一张大的A3纸开始,找到一支红笔,写1000次

我永远不会用
线程.睡眠
来代替调制解调器的读取解析响应

我永远不会用
线程.睡眠
来代替调制解调器的读取解析响应

我永远不会用
线程.睡眠
来代替调制解调器的读取解析响应

我永远不会用
线程.睡眠
来代替调制解调器的读取解析响应

我永远不会用
线程.睡眠
来代替调制解调器的读取解析响应

然后按照有关V.250的说明阅读。等到您正确地消化了答案中的所有信息之后,再继续修复代码(可能需要一些时间才能让所有信息都融入其中)

当然,第一部分是为了搞笑,但我对其余部分是非常认真的;你有一些巨大的指挥知识“漏洞”,你必须填补。 这应该不是很难,但需要一些努力

虽然我不能确切地说AT命令的一部分是如何在消息内容中结束的,但其根本原因是您没有像应该的那样读取和解析调制解调器响应


TL;医生:
您必须读取并解析调制解调器发送回您的所有内容其他任何操作都不能可靠地工作

听起来您有多线程问题。您是否同时意外运行了两个程序实例?没错。我不得不向两个人发送同样的信息。所以我调用了两次gsm.send消息。但是,当我把它发送到一个号码时,我就遇到了这个问题。还有一些其他的命令也在执行,比如AT+CREG=?而ATZYou需要有一个机制,保证您一次只能从一个程序访问COM22。如果您设置波特率,我会遇到类似的问题,并在一个小延迟后发送命令,否则会发生这种情况,您必须获得延迟的时间。命令行应仅用
\r
终止,而不是
\r\n