当前位置: 首页 > 知识库问答 >
问题:

使用HSPA调制解调器发送短信,同时连接到互联网

漆雕唯
2023-03-14

我正在开发一个Java应用程序,使用USB调制解调器发送短信(我的是华为E173)。我尝试了SMSLib,它的示例代码成功地发送了短信。但当它连接到互联网时,它就例外了

org.smslib.GatewayException: Comm library exception: java.lang.RuntimeException: javax.comm.PortInUseException: Port currently owned by Unknown Windows Application
    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:277)

当手机连接到互联网时,有没有办法发送短信?我必须通过Java应用程序本身建立连接吗?如果必须,如何建立连接?

编辑:这是我发送短信的完整代码(从smslib.org下载,我更改了SMSC号码和发件人号码)

// SendMessage.java - Sample application.
//
// This application shows you the basic procedure for sending messages.
// You will find how to send synchronous and asynchronous messages.
//
// For asynchronous dispatch, the example application sets a callback
// notification, to see what's happened with messages.

package sms;

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.com3", "COM3", 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("+947500001");
                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("0094757599108", "Hello from SMSLib!");
                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();
                }
        }
}

共有1个答案

田俊爽
2023-03-14

如果调制解调器被用来“连接到互联网”,已经有一个电话正在进行中。然后你不能用它拨打第二个号码发送短信。可能的解决方案:

  1. 使用其他方法连接到internet,释放调制解调器
  2. 获得第二条电话线和第二个调制解调器
  3. 使用“电子邮件到短信”服务,改为通过互联网通过电子邮件发送信息。例如,在

如果您试图调试通过调制解调器发送SMS的程序,那么选项1或2可能是唯一的解决方案。

 类似资料:
  • 最好的方法是什么?我读过,但大多数话题都过时了。大多数示例都使用“COM”端口,但我在COM连接(在设备管理器中)中找不到USB调制解调器,而不是在“网卡”中。

  • 我正在用PHP7.1编写一个脚本,用华为E3531 usb调制解调器发送短信。没有文档记录,我很难找到解决方案。这是发送短信的脚本,但我收到一个错误100002。首先,我用curl恢复令牌和sessionid,然后再次使用curl发布短信 然而,我已经做了另一个脚本,让短信已经发送,它确实工作。以下是代码: 在这个链接上使用的三个步骤(通过命令行与华为E3131和debian系统上的HiLink发

  • 我试图使用USB调制解调器发送短信(我有一个D-Link Usb调制解调器)。我刚刚找到SmsLib,但我不知道如何使用USB调制解调器。我找到的例子是串行调制解调器,我没有找到任何USB调制解调器的例子。我需要将usb端口映射为串行端口吗?使用什么?我的调制解调器由SmsLib支持。您对如何使用SmsLib配置USB调制解调器有任何想法吗? (我有一台MacBook)。

  • 我有一个调制解调器中兴型号MF190,并希望通过在串行端口上的AT命令发送短信。我的问题是:当我发送AT命令时,调制解调器响应错误CMS error:305 他研究了很多关于错误的信息,他在信息中使用了一些无效字符,但我在信息中没有写任何错误。 检查: 有趣的是,如果我发送一条空消息,我就会收到短信(显然是空的) 有人去过那里,知道如何通过这种型号的调制解调器配置或发送短信?

  • 尝试在Linux上使用USB调制解调器开发应用程序。使用带有CNMI=1,1,0,1,0设置的华为E220(还尝试了其他CNMI设置,但均无效),并在接收到的消息上获得新的消息指示,在接收到的状态传递消息上也获得新的消息指示。是否有其他方法可以配置设备以启用接收到的SMS警报?感谢windows机器,它工作正常。唯一的问题是linux。非常感谢。

  • 我使用华为U盘调制解调器和下面的代码成功发送短信,但长度低于140(请参阅代码--)。 但现在我看到了非常大的短信。 所以我想知道commnds有什么问题,或者可能我的硬件太旧了,所以我无法发送大短信。 有什么线索吗?