首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java comlib 短信猫发送短信报错 重复发送端口被占用 怎么释放呢?来帮帮忙

2013-07-08 
java comlib 短信猫发送短信报错 重复发送端口被占用 如何释放呢?高手请进来帮帮忙。java comlib 短信猫发

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
[解决办法]
服务是服务,端口是端口,不能根据端口状态判断服务状态,当然也不能通过结束服务来关闭端口...
一个服务可以拥有多个端口,在增加删除每个端口前后应该判断端口状态。

热点排行