JAVA 对接 短信猫

一,环境

windows 11, JDK8

二,使用资料

链接:https://pan.baidu.com/s/13dy6DV5RcnFn-k_Oe5b8Cw
提取码:30uh

我的JAVA_HOME 是 D:\env\jdk\

  1. 放置RXTXcomm.jar 于JDK的lib下面,还有JRE的lib\ext 下面(我的是这个,D:\env\jdk\libD:\env\jdk\jre\lib\ext
  2. 放置 rxtxSerial.dllrxtxParallel.dll 于JDK的 bin下面,还有JRE的bin下面(我的是这个,D:\env\jdk\binD:\env\jdk\jre\bin
  3. smslib-3.5.1.jar 你可以导入本地仓库 或者项目引用也行
  4. 串口转usb 驱动(这个特别注意,如果你安装最新的,会一直报端口占用问题,我被坑的怀疑人生,搞个旧版本的就行),把 CH341S64.SYS 放置 C:\Windows\System32 下面就行了,如果之前有安装过的替换掉。

三,maven 依赖

        <dependency>
            <groupId>org.smslib</groupId>
            <artifactId>smslib</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

第一个依赖在资料内部,自己导入本地仓库

四,使用直接调用 sendSMS 就行

  1. yml配置
sms:
  id: 1 # 编号不重复便可
  comPort: COM1 # 串口号
  baudRate: 115200 # 波特率
  manufacturer: Quectel # 厂家 (可为空)
  model: # 型号(可为空)
  1. 配置类
@Configuration
@ConfigurationProperties("sms")
@Data
public class SmsConfig {
    //编号
    private String id;

    //串口
    private String comPort;

    //波特率
    private String baudRate;

    //厂家
    private String manufacturer;

    //型号
    private String model;

    //sim卡的pin码
    private String simPin;
}
  1. 工具类
@Slf4j
@Component
public class SMSUtil {


    static SerialModemGateway gateway;

    @Autowired
    public SMSUtil(SmsConfig smsConfig) {
        gateway = new SerialModemGateway(smsConfig.getId(),
                smsConfig.getComPort(),
                Integer.valueOf(smsConfig.getBaudRate()),
                smsConfig.getManufacturer(),
                smsConfig.getModel());
        gateway.setInbound(true);
        gateway.setOutbound(true);
        gateway.setSimPin(smsConfig.getSimPin());
    }
    public static void sendSMS(String mobile, String content) throws IOException, InterruptedException, SMSLibException {
        log.info("发送短信:" + mobile + ",内容:" + content);
        Service.getInstance().addGateway(gateway);
        Service.getInstance().startService();
        OutboundMessage outboundMessage =
                new OutboundMessage(mobile, content);
        outboundMessage.setEncoding(Message.MessageEncodings.ENCUCS2);
//        outboundMessage.setEncoding(Message.MessageEncodings.ENCCUSTOM);
//        outboundMessage.setEncoding(Message.MessageEncodings.ENC8BIT);
        Service.getInstance()
                .sendMessage(outboundMessage);
        Service.getInstance().stopService();
        Service.getInstance().removeGateway(gateway);
    }
}

五,可能出现的异常问题

PortInUseException

  1. 输出是拒绝访问的,可能是其他程序占用了 (可能用了其他工具占用了端口)
  2. 输出是设备不可用,那么就是驱动有问题,要换驱动(我被坑惨了)

NoSuchPortException

  1. 检测下端口是否输入错误 可能是COM2 COM3
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容