Kalana Sarange
Kalana Sarange

Reputation: 77

How I send multiple SMS' in one program?

I want to send multiple SMS' via using smslib. I make a Java class to send SMS in a loop. But it works only one time. then it returns the following exception:

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)

This is my class:

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);
    }
  }
}

Please give me advice, what should I do differently?

Upvotes: 0

Views: 2205

Answers (3)

Ishan BG
Ishan BG

Reputation: 43

You must remove the gateway. can use this- Service.getInstance().removeGateway(gateway); you should insert it in doIt method, after - Service.getInstance().stopService();

Upvotes: 1

virajekanayake
virajekanayake

Reputation: 1

Change this.It's Working

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();
        }}
    }

Upvotes: 0

Bernhard Barker
Bernhard Barker

Reputation: 55589

I don't know the smslib, but I imagine everything until startService should only happen once, not each time you want to send a message, as follows:

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);
        }
    }
}

Upvotes: 1

Related Questions