SMSLib短信收發(fā)包
SMSLib 是一個(gè)經(jīng)GSM貓或者移動(dòng)電話發(fā)送和接收SMS的類庫(kù),有java和.net兩個(gè)版本。
已經(jīng)提供了發(fā)送PDU格式短信的支持了。而且提供服務(wù)器模式,可以通過(guò)http方式調(diào)用收發(fā)短信。
發(fā)送程序來(lái)自smslib的分發(fā)包。SendMessage.java,稍作改動(dòng),以適應(yīng)我手中的wavecom短信貓。
Service srv;
OutboundMessage msg;
srv = new Service();
SerialModemGateway gateway = new SerialModemGateway("modem.com5",
"COM5", 115200, "WAVECOM", "–");
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin("0000");
srv.addGateway(gateway);
srv.startService();msg = new OutboundMessage("13801001000", "中文測(cè)試。");
msg.setEncoding(MessageEncodings.ENCUCS2);
srv.sendMessage(msg);
System.out.println(msg);
這是比較簡(jiǎn)單的同步方式發(fā)送短信,也就是說(shuō)在發(fā)送過(guò)程中,線程將被阻塞,等待發(fā)送結(jié)束繼續(xù)執(zhí)行。測(cè)試了一下,基本上是間隔4-5秒鐘發(fā)送一條。
這對(duì)大規(guī)模使用會(huì)造成影響,尤其是多線程的情況下,smslib提供了另外一種異步的方式,smslib提供了隊(duì)列機(jī)制,調(diào)用者可以將發(fā)送短信排到 隊(duì)列中,然后不停頓的做其他事情。但是smslib沒(méi)有提供持久化的隊(duì)列,當(dāng)斷電或者短信貓中斷,隊(duì)列中的數(shù)據(jù)將消失,因此使用異步方式的時(shí)候,還需要自 己實(shí)現(xiàn)一個(gè)持久的隊(duì)列備份機(jī)制。
另外,需要注意的是,使用smslib需要導(dǎo)入smslib使用的第三方類庫(kù),按照官方文檔的說(shuō)法是log4j,但是,我使用的版本,已經(jīng)更換為 slf4j,那么log4j就不是必須的了,因?yàn)榭梢郧袚Q到j(luò)ava logging api上,另外,如果使用的gateway是SerialModem,也就是串口貓的話,可以不用commons-net api。以下是類庫(kù)的截圖:
