Невозможно отправить SMS с помощью Java

Я просто пытался отправить SMS с использованием Java, как мне требуется в моем веб-приложении. Но для целей тестирования я являюсь кодом, который описан на этом сайте, и код выглядит следующим образом

package logic;

import com.harshadura.gsm.smsdura.GsmModem;

/**
 * @author     : Harsha Siriwardena  <harshadura@gmail.com>
 * @copyrights : www.Durapix.org     <http://www.durapix.org>
 * @license    : GNU GPL v3          <http://www.gnu.org/licenses/>
 *
 * Example on how to simply send a SMS using the smsdura API Wrapper.
 */
public class TestSMS {

    private static String port = "COM3"; //Modem Port.
    private static int bitRate = 115200; //this is also optional. leave as it is.
    private static String modemName = "ZTE"; //this is optional.
    private static String modemPin = "0000"; //Pin code if any have assigned to the modem.
    private static String SMSC = "+9477000003"; //Message Center Number ex. Mobitel

    public static void main(String[] args) throws Exception {
        GsmModem gsmModem = new GsmModem();
        GsmModem.configModem(port, bitRate, modemName, modemPin, SMSC);
        gsmModem.Sender("+94712244555", "Test Message"); // (tp, msg)
    }
}

Когда я пытался запустить это, я получаю эту ошибку

-----------------------------
*** SMS-DURA - GSM MODEM SMS API WRAPPER ***
www.harshadura.com
-----------------------------
Example: Send message from a serial gsm modem.
SMSLib: A Java API library for sending and receiving SMS via a GSM modem or other supported gateways.
This software is distributed under the terms of the Apache v2.0 License.
Web Site: http://smslib.org
Version: 3.5.1
log4j:WARN No appenders could be found for logger (smslib).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.smslib.GatewayException: Comm library exception: java.lang.RuntimeException: javax.comm.NoSuchPortException
    at org.smslib.modem.SerialModemDriver.connectPort(SerialModemDriver.java:102)
    at org.smslib.modem.AModemDriver.connect(AModemDriver.java:114)
    at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:189)
    at org.smslib.Service$1Starter.run(Service.java:276)

Пожалуйста, кто-нибудь скажите мне, как решить эту проблему

4 ответа

В основном вам программа не может найти ПОРТ, используйте

org.smslib.helper.CommPortIdentifier

найти правильный COM-порт из списка портов.

Я знаю, что это не тот ответ, который вы ожидаете от SO, но, учитывая альтернативу, я думаю, что это лучше, чем ничего.

а) Ваша библиотека сообщает, что ваш модем не подключен.
б) Вы не знаете, как проверить, подключен ли ваш модем.

Хотя это никак не связано с компанией, в прошлом я пользовался Nexmo с большим успехом.

Если это необходимо для вашего приложения, я настоятельно рекомендую вам подойти к проблеме с помощью API-интерфейса, который сэкономит вам огромное количество работы.

Есть несколько компаний, которые предоставляют эту услугу, и использование более или менее прямолинейно, вы просто форматируете URL, чтобы передать параметры обратно компании. Пример Nexmo:

// by calling a crafted url you are requesting the company to send the sms for you 
urlString = "https://rest.nexmo.com/sms/json?api_key={api_key}&api_secret={api_secret}&from=MyCompany20&to=447525856424&text=helloworld";
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream()

Nexmo не единственный, кто предоставляет эту услугу. Они единственные, с кем у меня был опыт.

Да, я также получил это исключение в SMS-оболочке Харшадуры. Их может быть две вещи, которые вы не делали

  • Вы не объявляли никаких дополнений в коде, поэтому в начале кода просто введите этот простой код для объявления добавителей.

    package logic;
    
    import com.harshadura.gsm.smsdura.GsmModem;
    
    /**
     * @author     : Harsha Siriwardena  <harshadura@gmail.com>
     * @copyrights : www.Durapix.org     <http://www.durapix.org>
     * @license    : GNU GPL v3          <http://www.gnu.org/licenses/>
     *
     * Example on how to simply send a SMS using the smsdura API Wrapper.
     */
    public class TestSMS {
    
    private static String port = "COM3"; //Modem Port.
    private static int bitRate = 115200; //this is also optional. leave as it is.
    private static String modemName = "ZTE"; //this is optional.
    private static String modemPin = "0000"; //Pin code if any have assigned to the modem.
    private static String SMSC = "+9477000003"; //Message Center Number ex. Mobitel
    
    public static void main(String[] args) throws Exception {
        BasicConfigurator.configure();//Declares appenders
        GsmModem gsmModem = new GsmModem();
        GsmModem.configModem(port, bitRate, modemName, modemPin, SMSC);
        gsmModem.Sender("+94712244555", "Test Message"); // (tp, msg)
    }    }
    
  • Определение порта вашего GSM модема. Чтобы решить эту проблему, перейдите на значок "Мой компьютер", нажмите "Управление"> "Диспетчер устройств"> "Нажмите модемы" и выберите порт вашего модема.

Порт, который вы определили, затем напишите его в своем коде.String port="MyPort";

Скопируйте API(comm.jar),dll(win32com), файл свойств (javax.comm) в

1) Если инструмент Net Beans вы используете средства

C:\Program Files\Java\jdk1.7.0\jre\lib\ext

а также

C: \ Program Files \ Java \ jdk1.7.0 \ jre \ bin

2) Если инструмент Eclipse вы используете средства

C:\Program Files\Java\jre7\lib\ext

а также

C:\Program Files\Java\jre7\bin

в соответствии с инструкциями, приведенными на сайте Code projects.com, где вы загрузили этот проект.

Другой способ. Если вы можете настроить свой инструмент, тогда сделайте это, логика заключается в том, что API должны находиться под вашей JVM во время выполнения (jre). и убедитесь, что указанный вами порт должен быть свободным, и на нем не должны запускаться другие приложения.

Другие вопросы по тегам