当sms再次发送时命令显示忙(在java中)

时间:2013-06-05 17:51:20

标签: java gsm at-command

import javax.comm.*;
import java.io.*;
import java.util.*;


public class Sms {
public synchronized static String main1(String arr) {
 char cntrlZ=(char)26;
InputStream input = null;
OutputStream output = null;
SerialPort serialPort = null;
try {
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");


serialPort = (SerialPort) portId.open("SimpleReadApp1", 2000);
//System.out.println("sdiosdfdsf");
String f=null;int n;
input = serialPort.getInputStream();
output = serialPort.getOutputStream();


Thread readThread;
serialPort.notifyOnDataAvailable(true);

try {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, 
SerialPort.STOPBITS_1, 
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}

output.write(("ATZ\r\natH\r\n+CMGW: 0\r\n+CMGW: 1\r\n").getBytes());
output.flush();Thread.sleep(200);
output.write(("ath0\r\n").getBytes());
output.flush();Thread.sleep(200);
output.write(("AT+CMGF=1\r\n").getBytes());
output.flush();Thread.sleep(200);
output.write(("AT+CMGS=\"09629993650\"\r\n+CMGW: 20\r\n").getBytes());

output.write(("hellooopssss445 545inoo you there?").getBytes());
output.write(("\032").getBytes());
output.flush();


Thread.sleep(2000);
byte[] readBuffer = new byte[120];

try {
while (input.available() > 0) {
int numBytes = input.read(readBuffer);
}

 input.close();
 output.close();
 serialPort.removeEventListener();
serialPort.sendBreak(1000);
serialPort.getInputStream().close();
serialPort.getOutputStream().close();
if (serialPort!=null)
System.out.print("Port is not null!!!");
//serialPort.closeport();
if (serialPort!=null)
System.out.print("Port is not null!!!");
System.out.print(new String(readBuffer));


return(new String(readBuffer));
} catch (IOException e) {}
 output.flush();

} catch (NoSuchPortException e) {
System.out.println("Exception in Adding Listener" + e);
} catch (PortInUseException e) {
System.out.println("Exception in Adding Listener" + e);
} catch (IOException e) {
System.out.println("Exception in Adding Listener" + e);
}
catch (InterruptedException e) {
System.out.println("Exception in Adding Listener" + e);
}
return ("fault");
}



public static void main(String[] arg) {


char ii[]=main1("").toCharArray();
for(int j=0;j<ii.length;j++)
{
if((ii[j]=='O')&&(ii[j+1]=='K'))
System.out.println("GOT");
}
}

}

当我编译并执行此程序时,直到我从USB移除我的手机才会发送消息。如果我不删除我的手机并运行相同的程序,则显示Busy和CMI ERROR:503。

永远不会发送第二条消息(再次编译程序时).Moreover Port永远不会关闭,正如您在程序中看到的那样。

这段代码可以做些什么?请不要向我提供其他程序,如SMSLIB,而是改进/编辑此代码。

我正在尝试这个约3天,仍然是负面结果。  请帮帮我。我想发送批量短信,而不是一次又一次地断开手机。

1 个答案:

答案 0 :(得分:0)

你必须从不使用那样的睡眠;您必须读取并解析调制解调器给出的响应。像那样睡觉只是稍微好一点,然后根本不等待(我在这个answer中解决)。请参阅此answer,了解如何阅读和解析您收到的回复。

顺便说一句,AT命令应该只用\r而不是\r\n终止(除非您更改了S3,并且不应该这样做),请参阅V.250以获取更多详细信息。一般来说这和AT命令(例如,如果您还没有阅读过该规范,则强烈建议)。