`
wangshiyang
  • 浏览: 69883 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java短信"猫"实现发送短信

阅读更多
短信"猫"可以实现无手机发送短信,和mas机比起来就是比较灵活点,不用那么多繁杂的步骤,下面来说说短信"猫"发短信的实现.
一般来说,对于信息的处理无外乎两种方式:一种是把任务保存到缓存队列中,然后去调度任务.优点就是速度快,缺点也很明显,如果任务处理的不好,很容出现任务无法执行或者等待.另一种就是保存到数据库中,短信发送和数据的处理分开处理,但是速度方面会有影响.这里说的第二种方法.
首先把任务的数据保存到数据库中,这块的话没有什么难度,就是普通的增删改查.
发送短信的单独分离出来运行,既web端和发送端分开.
首先需要初始化设备
public static void initDriver() {
		if (!initDriver) {
			initDriver = true;
			String driverName = "com.sun.comm.Win32Driver";
			String libname = "win32com";
			CommDriver commDriver = null;
			try {
				System.loadLibrary("win32com");
				log.info(libname + " Library Loaded");

				commDriver = (CommDriver) Class.forName(driverName)
						.newInstance();
				commDriver.initialize();
				log.info("comm Driver Initialized");

			} catch (Exception e) {
				log.error(e.getMessage(), e);
			}
		}
	}

然后需要查找SMS设备
public static List<String> findSMS() {
		TreeMap<String, String> portsMap = new TreeMap<String, String>();
		log.info("GSM Modem 串行端口连接测试开始...");
		Enumeration<?> en = CommPortIdentifier.getPortIdentifiers();
		CommPortIdentifier portId;
		while (en.hasMoreElements()) {
			portId = (CommPortIdentifier) en.nextElement();
			if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
				if (checkCommPortForSMS(portId.getName())) {
					log.info(" 设备端口 : " + portId.getName() + " 满足短信发送要求");
					portsMap.put(portId.getName(), portId.getName());
				}
			}
		}
		log.info("GSM Modem 检查结束 ...");
		return new Vector<String>(portsMap.keySet());
	}

public static boolean checkCommPortForSMS(String portName) {
		portList = CommPortIdentifier.getPortIdentifiers();
		while (portList.hasMoreElements()) {
			portId = (CommPortIdentifier) portList.nextElement();
			if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL
					&& portName.equals(portId.getName())) {
				log.info("找到串口: " + portId.getName());
				for (int i = 0; i < bauds.length; i++) {
					log.info("  Trying at " + bauds[i] + "...");
					try {
						SerialPort serialPort;
						InputStream inStream;
						OutputStream outStream;
						int c;
						StringBuffer response = new StringBuffer();
						serialPort = (SerialPort) portId.open(
								"SMSLibCommTester", 2000);
						serialPort
								.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN);
						serialPort.setSerialPortParams(bauds[i],
								SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
								SerialPort.PARITY_NONE);
						inStream = serialPort.getInputStream();
						outStream = serialPort.getOutputStream();
						serialPort.enableReceiveTimeout(1000);
						c = inStream.read();
						while (c != -1) {
							c = inStream.read();
						}
						outStream.write('A');
						outStream.write('T');
						outStream.write('\r');
						try {
							Thread.sleep(1000);
						} catch (Exception e) {
							log.error(e.getMessage(), e);
						}
						c = inStream.read();
						while (c != -1) {
							response.append((char) c);
							c = inStream.read();
						}
						if (response.indexOf("OK") >= 0) {
							log.info("  正在检测设备:");
							try {
								outStream.write('A');
								outStream.write('T');
								outStream.write('+');
								outStream.write('C');
								outStream.write('G');
								outStream.write('M');
								outStream.write('M');
								outStream.write('\r');
								response = new StringBuffer();
								c = inStream.read();
								while (c != -1) {
									response.append((char) c);
									c = inStream.read();
								}

								log.info("  发现设备: "
										+ response.toString().replaceAll(
												"(\\s+OK\\s+)|[\n\r]", ""));
								if (!"ERROR".equals(response.toString()
										.replaceAll("(\\s+OK\\s+)|[\n\r]", "")
										.trim())) {
									serialPort.close();
									inStream.close();
									outStream.close();
									return true;
								}
								return false;
							} catch (Exception e) {
								log.info("  检测设备失败,获取设备信息异常:" + e.getMessage());
							}
						} else {
							log.info("  检测设备失败,没有接收到响应结果!");
						}
						serialPort.close();
					} catch (Exception e) {
						log.info("  检测设备失败,发生异常:" + e.getMessage());
					}
				}
			}
		}
		return false;
	}

调用结束后会返回当前计算机可用的端口号,然后就可以注册gateway了
for (String portId : ports) {
				SerialModemGateway gateway = new SerialModemGateway(
						"modem.MAGUS" + portId, portId, 9600, "wavecom", "");
				gateway.setInbound(true);
				gateway.setOutbound(true);
				smsService.addGateway(gateway);
			}

然后需要设置smsService的各种监听事件了.这些都搞定之后就可以设置一个while(true)循环去不停的读取数据库发送短信了,但是有一点,需要设置一个安全的线程去执行,同时还要添加同步锁.保证当前只有一个工作在进行.


网上有很多简单的方法,可以结合着学习.直接贴代码的话就没意思了.
分享到:
评论

相关推荐

    java代码实现短信猫发短信

    在实现短信发送功能后,需要编写测试用例来验证其正确性。这可能包括发送短信到一个已知的手机号码,检查是否能成功发送,以及是否能接收到正确的返回信息。同时,考虑到可能存在的网络延迟和短信中心的处理时间,...

    java短信猫收发短信的例子

    Java短信猫收发短信的例子是基于Java编程语言实现的一个实用工具,主要用于与短信猫设备进行交互,实现短信的发送和接收功能。短信猫是一种硬件设备,通常通过USB或串口连接到计算机,使得电脑能够通过GSM网络发送和...

    用短信猫发送短信java版及所需jar包

    要实现短信发送功能,开发者需要解压文件,理解并运行`SendMessage.java`,同时根据`网上写得比较好的配置.txt`进行配置,确保已正确安装和导入`smslib-v3.5.2`和`javacomm20-win32`这两个库。对于Java开发者,特别...

    java 短信猫项目

    Java短信猫项目是一种基于Java语言实现的短信发送与接收系统,它主要依赖于两个关键库:smslib-3.3.3.jar和log4j-1.2.13.jar。这个项目对于需要进行短信服务集成的企业或者开发者来说,是一个非常有价值的参考案例。...

    java短信猫源码

    总之,Java短信猫源码是通过Java语言实现的串口通信示例,它演示了如何控制短信猫设备进行短信发送,并且支持连续发送,是学习和开发相关应用的良好参考。在研究和使用这些源码时,应深入了解串口通信、AT命令集以及...

    JAVA短信猫开发包源码

    Java短信猫开发包源码是针对短信猫设备进行二次开发的工具,主要目的是为了通过编程方式控制短信猫发送和接收短信。短信猫是一种硬件设备,它能够连接到计算机并模拟手机的功能,允许用户通过电脑来收发短信。在Java...

    java短信猫发短信

    Java短信猫发短信技术主要涉及Java编程语言与硬件设备——短信猫的交互,以及通过串行通信接口(串口)实现短信的发送和接收。在本文中,我们将深入探讨这一技术,包括短信猫的工作原理、Java如何操作串口以及相关的...

    java 实现短信猫发短信代码

    Java 实现短信猫发短信是一项常见的通信技术应用,主要用于企业或服务端系统向用户发送验证码、通知等。本文将深入探讨如何使用Java编程语言通过短信猫(GPRS Modem)来实现这一功能,并重点关注给定文件中的关键...

    基于短信猫,采用PDU编码的短信收发java实现

    在实际应用中,开发者还需要处理各种异常情况,如串口通信失败、短信发送超时、PDU解析错误等。此外,为了提高效率和用户体验,还可能需要实现短信队列管理,批量发送等功能。 总结起来,通过Java实现基于短信猫的...

    java短信猫短信发送程序

    Java短信猫短信发送程序是一个基于Java语言开发的实用工具,主要用于实现系统中的短信提醒功能。在企业级应用中,这种功能常用于用户验证、订单通知、异常报警等场景,极大地提高了自动化处理和用户互动的效率。这个...

    Java使用短信猫发送短信(AT指令操作串口)

    总之,通过Java和"comm.jar"库,我们可以实现与短信猫的串口通信,发送和接收短信,这在许多自动化场景中都非常实用,例如远程监控、报警系统或者设备控制等。在实际开发中,确保对硬件设备的理解和Java串口编程的...

    通过短信猫发送与接收短信

    本文将深入探讨如何利用短信猫进行短信的发送与接收功能的实现。 首先,我们要了解短信猫的工作原理。短信猫通常采用串行通信接口(如USB或RS232),连接到计算机或服务器。它内置SIM卡槽,可以插入运营商的SIM卡,...

    java短信猫二次开发

    由于业务的需要,今天用java实现了用短信猫收发短信的功能, 本来这个应该用随猫购买的二次开发接口实现的,但由于这几台猫买的时候,经销商没有提供二次开发接口,自己写了几个方法实现了发短信的功能。...

    java代码实现短信猫发送短信

    Java代码实现短信猫发送短信是一项常见的通信技术应用,主要用于企业级服务或自动化系统中的通知功能。短信猫(SMS Modem)是一种硬件设备,...通过理解和实践这些知识点,开发者可以构建出稳定可靠的短信发送系统。

    短信猫收发例子(用于短信猫串口编程)

    5. 短信的编码格式,如7位ASCII、16位Unicode,以及它们在短信发送中的应用。 6. 错误处理和状态查询机制,确保程序的健壮性。 通过这个项目,开发者可以进一步提升其在嵌入式通信、物联网领域的技能,也能为需要...

    JAVA短信验证源码DEMO

    这个"JAVA短信验证源码DEMO"提供了实现短信验证功能的基本框架,主要涉及Java编程语言和网络通信技术。以下是对该DEMO中核心知识点的详细解释: 1. **TCP/IP Socket通信**:TCP(Transmission Control Protocol)/...

    短信猫java,java集成短信接口

    标题中的“短信猫java,java集成短信接口”指的是在Java应用程序中使用短信猫设备来实现短信的发送功能。短信猫是一种硬件设备,它通过串行接口(如USB...通过理解和实践这个过程,开发者可以构建出可靠的短信发送系统。

    用java实现的短信发送

    Java 实现短信发送 Java 实现短信发送是指利用 Java 语言编写程序来实现服务器向手机发送短信的过程。在这里,我们将使用 Java 语言来实现这个功能,并且使用了 Apache 的 Commons HttpClient 库来发送 HTTP 请求。...

Global site tag (gtag.js) - Google Analytics