当前位置: 首页 > 面试题库 >

使用Java自动检测哪个Com端口连接到USB GSM调制解调器

陶树
2023-03-14
问题内容

我编写了一个Java应用程序,该程序从USB
GSM调制解调器读取和发送SMS消息。我正在使用SMSLib(使用JavaCommAPI),并且它在Windows上运行。我需要传入调制解调器似乎已连接到的COM
PORT。

到目前为止,我一直在使用Windows设备管理器手动查找COM PORT,并将其写入属性文件。我想知道是否有办法检测通过编程方式将调制解调器连接到哪个COM
PORT?

  1. 它将省去每次查找的麻烦
  2. 如果有时拔出/重新插入,端口号会更改

谢谢!!


问题答案:
package com.cubepro.util;

import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Formatter;

import org.apache.log4j.Logger;
import org.smslib.helper.CommPortIdentifier;

import com.cubepro.general.CommonConstants;

import com.cubepro.util.SendMessage;

public class CommPortTester {
   private static final String _NO_DEVICE_FOUND = "  no device found";

   private final static Formatter _formatter = new Formatter(System.out);

   private static Logger log = Logger.getLogger(CommPortTester.class);

   static CommPortIdentifier portId;

   static Enumeration<CommPortIdentifier> portList;

   static int bauds[] = { 9600, 14400, 19200, 28800, 33600, 38400, 56000,
                          57600, 115200 };

   public static final String MAINCLASS = "org.smslib.Service";

   public CommPortTester() throws Exception {
      Class.forName(MAINCLASS);
   }

   /**
    * Wrapper around {@link CommPortIdentifier#getPortIdentifiers()} to be
    * avoid unchecked warnings.
    */
   private static Enumeration<CommPortIdentifier> getCleanPortIdentifiers() {
      return CommPortIdentifier.getPortIdentifiers();
   }

   public String testAndQualifyPort() throws Exception {
      String status = CommonConstants.MODEM_STATUS_ERROR;
      SendMessage sendMessage = new SendMessage();

      log.debug("\nSearching for devices...");
      portList = getCleanPortIdentifiers();

      while (portList.hasMoreElements()) {
         portId = portList.nextElement();
         if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
            _formatter.format("%nFound port: %-5s%n", portId.getName());
            try {
               if(portId.getName()
               boolean comPortSuccess = sendMessage.doIt(portId.getName());
               if(comPortSuccess == true){
                  return portId.getName();
               }
            } catch (final Exception e) {
               log.debug(" Modem error occured -",e);
            }
         }
      }
      log.debug("\nTest complete.");
      return status;
   }

   public static void main(String[]args){
      try{
      CommPortTester tester = new CommPortTester(); 
      tester.testAndQualifyPort();
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}


 类似资料:
  • 问题内容: 我可以知道Java RMI连接使用哪个端口吗? 如果要使用RMI连接将Java客户端应用程序连接到Java服务器应用程序,我需要在服务器计算机上打开哪个端口,以便客户端应用程序可以连接到该端口? 我想在服务器计算机上设置防火墙,但是我不知道应该打开哪个端口。 问题答案: RMI通常无法在防火墙上工作,因为它使用不可预测的端口(它始于1099,然后再使用随机端口运行)。 在这些情况下,通

  • 我正在开发一个应用程序,需要能够在Windows OS上通过串行通信与设备进行通信。应用程序是用Java编写的。我正在使用jSSC库。(javax.comm有问题,RxTx不支持Java8,除了一个非官方的更新)这些设备可以使用串行端口直接连接到PC,或者使用USB到串行转换器。 我的问题是:windows上的COM端口是动态的。这引发了一个定义要连接到哪个通信端口的问题。是否有一种方法可以自动找

  • 我正在开发一个Java应用程序,使用USB调制解调器发送短信(我的是华为E173)。我尝试了SMSLib,它的示例代码成功地发送了短信。但当它连接到互联网时,它就例外了 当手机连接到互联网时,有没有办法发送短信?我必须通过Java应用程序本身建立连接吗?如果必须,如何建立连接? 编辑:这是我发送短信的完整代码(从smslib.org下载,我更改了SMSC号码和发件人号码)

  • 我正在运行Spring Boot2.0.1和JUnit5。我正在尝试在集成测试中获取端口。但是,端口值始终为零。我不确定是什么引起的。我尝试将web环境枚举更改为随机端口,但似乎没有任何工作。 下面是pom(注意:仅显示依赖项) 应用程序.属性

  • 我在Maven中使用SpringREST和Mongo来创建一个连接到服务器的web服务。问题是我还没有为Mongo编写任何代码,它试图连接到localhost,这给我带来了一个MongoSocketOpenException。我所写的唯一代码是从main开始的两行代码。这是stacktrace: 这是我的pom.xml 最后,我必须声明,尽管存在异常,但程序运行良好 提前感谢!

  • 4.2 接口调用 Camel管理端定义了两个版本的接口。第一版接口路径以"/api/"开头,第二版接口路径以"/api/v2"开头。 两个版本接口的主要区别在于:第二版本接口将更改配置、发布配置文件这两部操作聚合成为一个原子操作。则调用第二版本接口,如果成功,则Nginx当前配置为更改之后的配置;如果失败,则Nginx当前配置为调用接口之前的配置。不会出现不安全的中间状态。 第一版本接口: 更新节