2009-11-05 5 views
4

Я написал приложение Java, которое считывает и отправляет SMS-сообщения с USB-модема USB. Я использую SMSLib (который использует JavaCommAPI), и он работает в Windows. Мне нужно передать в COM-порт, что модем, похоже, подключен.Автоматически определять, какой Com-порт подключен к USB-модему USB, используя Java

До сих пор я просматривал COM-ПОРТ вручную с помощью диспетчера устройств Windows и записывал его в файл свойств. Мне интересно, есть ли способ определить, какой COM-ПОРТ, модем подключен к программному?

  1. Это будет избавляют смотреть его каждый раз, когда
  2. Номер порта меняется, если я отключаю/переподключить его иногда

Спасибо !!

+0

где вы находите COM-ПОРТ в диспетчере устройств Windows, потому что я также работаю на GSM-модемом, но я не нашел COM-ПОРТА в диспетчере устройств Windows. Ответ, пожалуйста, мне срочно нужна помощь. – Aniket

ответ

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(); 
     } 
    } 
} 
+0

, где вы находите COM-ПОРТ в диспетчере устройств Windows, потому что я также работаю на GSM-модемом, но я не нашел COM-ПОРТА в диспетчере устройств Windows. Ответ, пожалуйста, срочно нужна помощь – Aniket