smslib не отправляет смс, почему?

Я пытаюсь отправить смс с помощью smslib, но он не отправил сообщение, может ли кто-нибудь помочь мне в этом?

это мой код:

import org.smslib.AGateway;
import org.smslib.IOutboundMessageNotification;
import org.smslib.Library;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;

public class SendMessage
{
    public void doIt() throws Exception
    {
        OutboundNotification outboundNotification = new OutboundNotification();
        System.out.println("Example: Send message from a serial gsm modem.");
        System.out.println(Library.getLibraryDescription());
        System.out.println("Version: " + Library.getLibraryVersion());
        SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM4", 115200, "Huawei", "");
        gateway.setInbound(true);
        gateway.setOutbound(true);
        gateway.setSimPin("0000");
        // Explicit SMSC address set is required for some modems.
        // Below is for VODAFONE GREECE - be sure to set your own!
        gateway.setSmscNumber("+919825068000");
        Service.getInstance().setOutboundMessageNotification(outboundNotification);
        Service.getInstance().addGateway(gateway);
        Service.getInstance().startService();
        System.out.println();
        System.out.println("Modem Information:");
        System.out.println("  Manufacturer: " + gateway.getManufacturer());
        System.out.println("  Model: " + gateway.getModel());
        System.out.println("  Serial No: " + gateway.getSerialNo());
        System.out.println("  SIM IMSI: " + gateway.getImsi());
        System.out.println("  Signal Level: " + gateway.getSignalLevel() + " dBm");
        System.out.println("  Battery Level: " + gateway.getBatteryLevel() + "%");
        System.out.println();
        // Send a message synchronously.
        OutboundMessage msg = new OutboundMessage("+524747388616", "que onda como andas!");
        Service.getInstance().sendMessage(msg);
        System.out.println(msg);
        // Or, send out a WAP SI message.
        //OutboundWapSIMessage wapMsg = new OutboundWapSIMessage("306974000000",  new URL("http://www.smslib.org/"), "Visit SMSLib now!");
        //Service.getInstance().sendMessage(wapMsg);
        //System.out.println(wapMsg);
        // You can also queue some asynchronous messages to see how the callbacks
        // are called...
        //msg = new OutboundMessage("309999999999", "Wrong number!");
        //srv.queueMessage(msg, gateway.getGatewayId());
        //msg = new OutboundMessage("308888888888", "Wrong number!");
        //srv.queueMessage(msg, gateway.getGatewayId());
        System.out.println("Now Sleeping - Hit <enter> to terminate.");
        System.in.read();
        Service.getInstance().stopService();
    }

    public class OutboundNotification implements IOutboundMessageNotification
    {
        public void process(AGateway gateway, OutboundMessage msg)
        {
            System.out.println("Outbound handler called from Gateway: " + gateway.getGatewayId());
            System.out.println(msg);
        }
    }

    public static void main(String args[])
    {
        SendMessage app = new SendMessage();
        try
        {
            app.doIt();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

и мой результат:

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

Modem Information:
  Manufacturer: Nokia Corporation
  Model: Nokia Internet Stick CS-10
  Serial No: 359340022861915
  SIM IMSI: ** MASKED **
  Signal Level: -53 dBm
  Battery Level: 0%


===============================================================================
<< OutboundMessage >>
-------------------------------------------------------------------------------
 Gateway Id: *
 Message Id: 0
 Message UUID: e30f84ad-b083-4956-85ef-16dc89020769
 Encoding: 7-bit
 Date: Fri Mar 09 13:15:52 CST 2012
 SMSC Ref No: null
 Recipient: 524747388616
 Dispatch Date: null
 Message Status: FAILED
 Failure Cause: UNKNOWN
 Validity Period (Hours): -1
 Status Report: false
 Source / Destination Ports: -1 / -1
 Flash SMS: false
 Text: que onda como andas!
 PDU data: F17A19F47693C3A0F1BBFD0685DDE4F03C04
 Scheduled Delivery: null
===============================================================================

Now Sleeping - Hit <enter> to terminate.

person bentham    schedule 09.03.2012    source источник
comment
+52, кажется, предполагает, что вы отправляете это сообщение на мексиканский номер. Вы изменили номер SMSC, как говорит вам комментарий в источнике, или у вас действительно есть греческая SIM-карта Vodafone? (хотя +91, кажется, предполагает Индию...)   -  person andri    schedule 10.03.2012
comment
На самом деле я поменял смс по программе в которой стоит мой модем gsm, и программа печатает название модели и все, только смс не отправляются   -  person bentham    schedule 11.03.2012
comment
Вы уже успешно отправили SMS с этой палкой из предоставленного программного обеспечения на случай, если эта функция может быть отключена аппаратно или для этой SIM-карты?   -  person Yves Martin    schedule 12.03.2012
comment
Вы должны включить уровень отладки log4j для smslib. В логах может быть подсказка...   -  person Yves Martin    schedule 12.03.2012
comment
Я отправлял сообщения с помощью программного обеспечения Nokia, и я пробовал другое программное обеспечение gsm com demos, и я отправлял сообщения с помощью этих программ.   -  person bentham    schedule 12.03.2012


Ответы (3)


В этом примере есть дополнительная строка кода для SMSC-номера. Я играл с этой же библиотекой, и в моем коде нет SMSC - ни в одной строке моего кода.

Это предложение «при необходимости», и я определенно считаю, что избавление от него решит вашу проблему. Скорее всего, вы не знаете, что именно вам нужно надеть, так что лучше пропустите это. Тогда модем не будет пытаться сделать эту маршрутизацию вручную на заданный номер, а сможет сделать это на правильный, который он знает по настройкам SIM на SIM-карте.

Еще я бы проверил, действительно ли модем отвечает с порта COM4. Хотя сейчас вроде так, потому что мощность сигнала считывается. Но проверяйте это всегда, потому что каждый запуск сервера может отображать устройство на другой порт. По крайней мере, у меня была такая проблема на стороне Linux.

person mico    schedule 12.03.2012

Возможно, вы недостаточно позаботились (пока) об аргументах конструктора SerialModemGateway, поскольку оставили «Huawei» в качестве поставщика, а используете устройство Nokia. Этот параметр не важен, важна скорость передачи данных. Согласно документации SMSlib, большинство устройств правильно работают только при предустановленной/уникальной скорости передачи данных.

Я предлагаю вам открыть другие настройки программного обеспечения, чтобы получить или подтвердить параметры, которые вы использовали:

  • скорость передачи данных
  • номер шлюза SMSC - возможно, из меню истории подключений в соответствии с руководством пользователя Nokia

Поскольку вы получаете свой код из примера Huawei, в этом примере задается номер SMSC шлюза, но этот параметр должен быть необязательным для большинства устройств, он может потребоваться только устройствам Huawei. Попробуйте пробежать без gateway.setSmscNumber !

Я также предлагаю вам отслеживать трафик последовательного порта с помощью, например, Portmon и сообщать об этом здесь. и на форуме SMSlib, чтобы получить поддержку.

Наконец, вы должны спросить у сопровождающего SMSlib, как он относится к вашему устройству, так как оно находится в списке совместимости (пока )

person Yves Martin    schedule 12.03.2012

Ниже приведен пример кода, который я использовал и тестировал. Вы можете повторно использовать его.

package com.stackoverflow.smstest;

import java.net.URL;

import org.smslib.AGateway;
import org.smslib.IOutboundMessageNotification;
import org.smslib.Library;
import org.smslib.OutboundMessage;
import org.smslib.OutboundWapSIMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;

public class Main {

    public void sendMessage() throws Exception {
        OutboundNotification outboundNotification = new OutboundNotification();
        System.out.println("Sample of Send message from a serial gsm modem.");
        System.out.println(Library.getLibraryDescription());
        System.out.println("Version: " + Library.getLibraryVersion());
        SerialModemGateway gateway = new SerialModemGateway("modem.com4",
                "COM4", 57600, "Huawei", "E160");
        gateway.setInbound(false);
        gateway.setOutbound(true);
        // gateway.setSimPin("");
        Service.getInstance().setOutboundMessageNotification(
                outboundNotification);
        Service.getInstance().addGateway(gateway);
        Service.getInstance().startService();
        System.out.println();
        System.out.println("Modem Information:");
        System.out.println("  Manufacturer: " + gateway.getManufacturer());
        System.out.println("  Model: " + gateway.getModel());
        System.out.println("  Serial No: " + gateway.getSerialNo());
        System.out.println("  SIM IMSI: " + gateway.getImsi());
        System.out.println("  Signal Level: " + gateway.getSignalLevel()
                + " dBm");
        System.out.println("  Battery Level: " + gateway.getBatteryLevel()
                + "%");

        // Send a message synchronously.
        OutboundMessage msg = new OutboundMessage("+94123456789",
                "SMS test: sample message from StackOverflow");

        Service srvice = Service.getInstance();
        // Service.getInstance().sendMessage(msg);
        System.out.println(msg);
        // Or, send out a WAP SI message.
        OutboundWapSIMessage wapMsg = new OutboundWapSIMessage("+94123456789",
                new URL("http://stackoverflow.com/"),
                "WAP test: sample message from StackOverflow!");
        // gateway.setFrom("chandpriyankara");
        // wapMsg.setFrom("chandpriyankara");
        srvice.queueMessage(wapMsg);

        Service.getInstance().stopService();
    }

    /**
     * Outbound Message informations handler
     * 
     * @author chandpriyankara
     * 
     */
    public class OutboundNotification implements IOutboundMessageNotification {
        public void process(AGateway gateway, OutboundMessage msg) {
            System.out.println("Outbound handler called from Gateway: "
                    + gateway.getGatewayId());
            System.out.println(msg);
        }
    }

    public static void main(String args[]) {
        Main app = new Main();
        try {
            app.sendMessage();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
person Chand Priyankara    schedule 23.06.2013
comment
я пробую ваш код, и я получаю это исключение java.lang.UnsupportedClassVersionError: org/smslib/IOutboundMessageNotification: Unsupported major.minor version 51.0 - person Usman Riaz; 03.09.2014
comment
Похоже, что между некоторыми компонентами существует несоответствие версий, чего я не могу точно сказать, но, пожалуйста, перепроверьте, используете ли вы исходный код с тем же jar и dll. - person Chand Priyankara; 16.10.2014