java comlib 短信猫发送短信报错 重复发送端口被占用 如何释放呢?高手请进来帮帮忙。
java comlib 短信猫发送短信报错 重复发送端口被占用 如何释放呢?高手请进来帮帮忙。
报错如下:
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:92)
at org.smslib.modem.AModemDriver.connect(AModemDriver.java:110)
at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:126)
at org.smslib.Service$1Starter.run(Service.java:222)
只能发一条,不能重复发送啊,重复发送就报端口被占用了。
package com.huanrong.util;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;
import org.apache.log4j.Logger;
import org.smslib.AGateway;
import org.smslib.AGateway.Protocols;
import org.smslib.GatewayException;
import org.smslib.InboundMessage;
import org.smslib.Message.MessageEncodings;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;
/**
*
* @ClassName: SendMsg
* @Description: 短信猫发送短信方法
* @author jay
* @date 2012-10-17 下午05:46:04
*
* 使用方法:
*SendMsg.sendMsg("电话号码","发送内容");
*
*/
public class SendMsg {
private static final Logger logger = Logger.getLogger(SendMsg.class);
private Service smsService;
/**
* 发送短信
*/
public SendMsg(String com) {
smsService = Service.getInstance();
String portName = com;//"/dev/ttyUSB0";// COM24
SerialModemGateway gateway = new SerialModemGateway(
"modem." + portName, portName, 9600, "wavecom", "PL2303");
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setProtocol(Protocols.PDU);
gateway.setSimPin("0000");
try {
smsService.addGateway(gateway);
} catch (GatewayException ex) {
logger.error(ex.getMessage());
}
}
/**
*
*/
public void start() throws Exception{
logger.info("SMS service start.....");
smsService.startService();
}
/**
*
*/
public void destroy() throws Exception{
smsService.stopService();
logger.info("SMS service stop");
}
/**
* send SMS
* @param msg
* @return Boolean
*/
public Boolean sendSMS(OutboundMessage msg) throws Exception {
msg.setEncoding(MessageEncodings.ENCUCS2);
return smsService.sendMessage(msg);
}
private boolean isStarted() {
if (smsService.getServiceStatus() == Service.ServiceStatus.STARTED) {
for (AGateway gateway : smsService.getGateways()) {
if (gateway.getStatus() == AGateway.GatewayStatuses.STARTED) {
return true;
}
}
}
return false;
}
/**
* 读取短信
* read SMS
* @return List
*/
public List<InboundMessage> readSMS() {
List<InboundMessage> msgList = new LinkedList<InboundMessage>();
if (!isStarted()) {
return msgList;
}
try {
this.smsService.readMessages(msgList,
InboundMessage.MessageClasses.ALL);
logger.info("read SMS size: " + msgList.size());
} catch (Exception e) {
logger.error("read error:", e);
}
return msgList;
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
SendMsg smsHandler = new SendMsg(com.huanrong.crm.Constant.COMM1);
OutboundMessage outMsg = new OutboundMessage("*******", "信息测试1");
smsHandler.start();
//发送短信
smsHandler.sendSMS(outMsg);
System.out.println("发送成功!1");
smsHandler.destroy();
System.out.println("-----------");
}
}
怎么办啊,一直都是这样,崩溃啦,大家帮帮忙啊。
[解决办法]
destroy()中,没有释放串口连接。可以试试下面的方法
连接独立出来,作为一个属性。发送伪代码:
if(!connected()){
connection.connect();
}
sendmsg(msg);
[解决办法]
是不是用完要close
[解决办法]
服务是服务,端口是端口,不能根据端口状态判断服务状态,当然也不能通过结束服务来关闭端口...
一个服务可以拥有多个端口,在增加删除每个端口前后应该判断端口状态。