Как отправить несколько смс в одну программу?
Я хочу отправить несколько SMS через smslib. Я делаю Java-класс для отправки SMS в цикле. Но это работает только один раз. тогда он возвращает следующее исключение:
org.smslib.GatewayException: Comm library exception:
java.lang.RuntimeException: javax.comm.PortInUseException:
Port currently owned by org.smslib
at org.smslib.modem.SerialModemDriver.connectPort(SerialModemDriver.java:102)
at org.smslib.modem.AModemDriver.connect(AModemDriver.java:114)
at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:189)
at org.smslib.Service$1Starter.run(Service.java:276)
Это мой класс:
import javax.swing.JOptionPane;
import org.smslib.AGateway;
import org.smslib.IOutboundMessageNotification;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;
public class SendSMS1 {
private static String id;
private static String port;
private static int bitRate;
private static String modemName;
private static String modemPin;
private static String SMSC;
public static void doIt(String number, String text) {
try {
OutboundMessage msg;
OutboundNotification outboundNotification = new OutboundNotification();
SerialModemGateway gateway = new SerialModemGateway(id, port, bitRate, modemName, "E17u-1");
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin(modemPin);
Service.getInstance().setOutboundMessageNotification(outboundNotification);
Service.getInstance().addGateway(gateway);
Service.getInstance().startService();
msg = new OutboundMessage(number, text);
Service.getInstance().sendMessage(msg);
System.out.println(msg);
Service.getInstance().stopService();
} catch (Exception ex) {
if (ex.getStackTrace()[2].getLineNumber() == 189) {
JOptionPane.showMessageDialog(null,
"Port currently owned by usb Modem's application. \n Please close it & run the programm again.",
"Port Exception",
JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
} else {
JOptionPane.showMessageDialog(null,
ex.getMessage(),
"Sending faile",
JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
}
}
}
public static class OutboundNotification implements IOutboundMessageNotification {
public void process(AGateway gateway, OutboundMessage msg) {
System.out.println("Outbound handler called from Gateway: " + gateway.getGatewayId());
System.out.println(msg);
}
}
public static void main(String[] args) throws Exception {
String number = "+94772347634", text = "Hello world";
modemName = "Huwawi";
port = "COM4";
bitRate = 115200;
modemPin = "0000";
SMSC = "+947500010";
for (int i = 0; i < 5; i++) {
SendSMS1 app = new SendSMS1();
app.doIt(number, text);
}
}
}
Пожалуйста, дайте мне совет, что я должен делать по-другому?
3 ответа
Я не знаю smslib, но я представляю все до startService
должно происходить только один раз, а не каждый раз, когда вы хотите отправить сообщение, следующим образом:
class SendSMS1
{
public SendSMS1(String modemName, String port, int bitRate,
String modemPin, String SMSC)
{
OutboundNotification outboundNotification = new OutboundNotification();
SerialModemGateway gateway = new SerialModemGateway(id, port, bitRate, modemName, "E17u-1");
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin(modemPin);
Service.getInstance().setOutboundMessageNotification(outboundNotification);
Service.getInstance().addGateway(gateway);
Service.getInstance().startService();
}
public static void doIt(String number, String text) {
try {
OutboundMessage msg = new OutboundMessage(number, text);
Service.getInstance().sendMessage(msg);
System.out.println(msg);
Service.getInstance().stopService();
} catch (Exception ex) {
if (ex.getStackTrace()[2].getLineNumber() == 189) {
JOptionPane.showMessageDialog(null,
"Port currently owned by usb Modem's application. \n Please close it & run the programm again.",
"Port Exception",
JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
} else {
JOptionPane.showMessageDialog(null,
ex.getMessage(),
"Sending faile",
JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
String number = "+94772347634", text = "Hello world";
SendSMS1 app = new SendSMS1("Huwawi", "COM4", 115200, "0000", "+947500010");
for (int i = 0; i < 5; i++) {
app.doIt(number, text);
}
}
}
Вы должны удалить шлюз. можно использовать это - Service.getInstance (). removeGateway (gateway); Вы должны вставить его в метод doIt, после - Service.getInstance (). stopService ();
Изменить это. Это работает
public static void main(String[] args) throws Exception {
Calendar now = Calendar.getInstance();
String ar=(dateFormat.format(now.getTime()));
String text = "We are the Future of Science "+" "+ar;
SendSMS app = new SendSMS("Huawei", "COM20", 115200, "0000", "+9477000003");
for (int i = 0; i < 1; i++) {
String[] numbers = {"+num","+num","+num","+num","+num","+num","+num","+num"};
for (String item : numbers) {
Service.getInstance().startService();
app.doIt(item, text);
Service.getInstance().stopService();
}}
}