網(wǎng)站復(fù)制來的一個(gè)關(guān)于JAVA二次源碼開發(fā)包出現(xiàn)的問題文章,解決提示等問題的錯(cuò)誤其中的一個(gè)可能的方法:
,javax.comm.PortInUseException: Port currently owned by org.smslib
org.smslib.TimeoutException: No response from device
前些天在弄短信設(shè)備時(shí)出現(xiàn)一種情況,即只能發(fā)送一條信息,再次發(fā)送時(shí)就報(bào)端口占用錯(cuò)誤。我用的是官方提供的代碼 如下:public void doIt() throws Exception
{
Service srv;
OutboundMessage msg;
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());
srv = new Service();
SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM1", 115200, "wavecom", "17254");//115200是波特率,一般為9600??梢酝ㄟ^超級(jí)終端測(cè)試出來
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
srv.addGateway(gateway);
srv.startService();
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() + "%");
System.out.println(" Battery Level: " + gateway.getBatteryLevel() + "%");
System.out.println();
// Send a message synchronously.
msg = new OutboundMessage("13152195134", "這個(gè)是用java發(fā)的中文短信!");
msg.setEncoding(MessageEncodings.ENCUCS2);//這句話是發(fā)中文短信必須的
srv.sendMessage(msg);
System.out.println(msg);
System.out.println("Now Sleeping - Hit <enter> to terminate.");
System.in.read();
srv.stopService();
}
我的程序中把這個(gè)方法放到servlet中,每次點(diǎn)擊頁面按鈕時(shí)調(diào)用這個(gè)方法。但第二次點(diǎn)擊時(shí)就報(bào)端口被占用的錯(cuò)誤。開始認(rèn)為是端口沒有關(guān)閉,但后面加上removeGateway(gateway)或gateway.stopGateway()都不行。
最后一想:短信設(shè)備接上電腦即建立了連接,執(zhí)行srv.startService()相當(dāng)于保持一個(gè)長連接,不能用程序斷開!最后把srv設(shè)為靜態(tài)屬性,每次點(diǎn)擊按鈕只調(diào)用 srv.sendMessage(msg)方法,就實(shí)現(xiàn)連續(xù)發(fā)送短信了。
修改后代碼如下:public void doIt() throws Exception
{
Service srv;
OutboundMessage msg;
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());
srv = new Service();
SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM1", 115200, "wavecom", "17254");//115200是波特率,一般為9600??梢酝ㄟ^超級(jí)終端測(cè)試出來
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
srv.addGateway(gateway);
srv.startService();
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() + "%");
System.out.println(" Battery Level: " + gateway.getBatteryLevel() + "%");
System.out.println();
// Send a message synchronously.
msg = new OutboundMessage("13152195134", "這個(gè)是用java發(fā)的中文短信!");
msg.setEncoding(MessageEncodings.ENCUCS2);//這句話是發(fā)中文短信必須的
srv.sendMessage(msg);
System.out.println(msg);
System.out.println("Now Sleeping - Hit <enter> to terminate.");
System.in.read();
srv.stopService();
}
上一篇:沒有了
下一篇:短信設(shè)備不可以只需要發(fā)送短信不需要接收短信功能