开发者

sending multiple sms using SMSLib within same process

I am using SMSLib to send sms using my samsung gsm modem. I created a seperate thread that gets the messages from server in every 20 seconds and if it gets the message it calls the SendMessage.. here is the code for SendMessage

public class SendMessage {
public boolean doIt(Stri开发者_运维技巧ng num, String umsg) {

    try {
        OutboundNotification outboundNotification = new OutboundNotification();
        System.out.println("Example: Send message from a serial gsm modem.");
        System.out.println(Library.getLibraryDescription());
        System.out.println("Version: " + Library.getLibraryVersion());
        SerialModemGateway gateway = new SerialModemGateway("modem.com10","COM10", 115200, "Samsung", "");
        gateway.setInbound(true);
        gateway.setOutbound(true);
        gateway.setSimPin("0000");

        gateway.setSmscNumber("+919826012311");
        Service.getInstance().setOutboundMessageNotification(outboundNotification);
        Service.getInstance().addGateway(gateway);
        Service.getInstance().startService();
        System.out.println();
        System.out.println("Modem Information:");
        System.out.println("  Manufacturer: " + gateway.getManufacturer());
        System.out.println("  Model: " + gateway.getModel());
        System.out.println("  Serial No: " + gateway.getSerialNo());
        System.out.println("  SIM IMSI: " + gateway.getImsi());
        System.out.println("  Signal Level: " + gateway.getSignalLevel()+ " dBm");
        System.out.println("  Battery Level: " + gateway.getBatteryLevel()+ "%");
        System.out.println();

        OutboundMessage msg = new OutboundMessage(num, umsg);
        Service.getInstance().sendMessage(msg);

        System.out.println(msg);

        Service.getInstance().stopService();
        gateway.stopGateway();

        return true;
    } catch (GatewayException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TimeoutException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SMSLibException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {

        try {
            Service.getInstance().stopService();
        } catch (TimeoutException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (GatewayException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SMSLibException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return false;
}

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

}

This code is working great for the first time i call doIt. but If my thread gets more sms from server and then if i call doIt , it throws an 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:275)

where is the problem ?


Looks like you are not closing down SmsLib correctly as the exception seems to implicate that the connection to the serial port is left open.


it works for me. Use

Service.getInstance().sendMessages(myList, gateway.getGatewayId()); 

function instead of using sendmessage mylist.add(msg);

mylist is list containing outboung msg

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜