日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

smpp客户端_SMPP Java示例(客户端)

發(fā)布時(shí)間:2023/12/3 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 smpp客户端_SMPP Java示例(客户端) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

smpp客戶端

這篇文章通過(guò)創(chuàng)建一個(gè)簡(jiǎn)單的SMPP客戶端向移動(dòng)用戶發(fā)送短信來(lái)提供SMPP Java示例,使用該客戶端我們可以簡(jiǎn)單地提交以將消息發(fā)送給單個(gè)移動(dòng)用戶,也可以一次將消息廣播給多個(gè)移動(dòng)用戶。另外,我們將驗(yàn)證交貨收據(jù)。 出于客戶端的目的,我們將使用現(xiàn)有的Java SMPP客戶端庫(kù)– jSMPP

什么是SMPP

SMPP代表短消息對(duì)等。 它是一種開(kāi)放的行業(yè)標(biāo)準(zhǔn)協(xié)議,旨在為短消息數(shù)據(jù)的傳輸提供靈活的數(shù)據(jù)通信接口。大多數(shù)時(shí)候,SMPP用于批量傳送短消息,您可以一次將消息廣播給數(shù)千個(gè)訂戶。不僅限于短消息,我們還可以攜帶語(yǔ)音郵件通知,小區(qū)廣播,WAP消息(包括WAP Push消息)

SMPP操作

SMPP使用客戶機(jī)/服務(wù)器操作模型。在向SMPP提交任何消息之前,我們發(fā)送一個(gè)bind命令。 在此示例中,我們將發(fā)送bind_transmitter,因?yàn)槲覀儍H對(duì)向服務(wù)器提交消息感興趣。 除了bind_transmitter以外,其他bind命令是bind_receiver,這意味著客戶端將僅接收消息,bind_transceiver允許雙向傳輸消息。

SMPP操作的完整細(xì)節(jié)不在本文討論范圍之內(nèi)。 如果您想詳細(xì)了解操作,請(qǐng)?jiān)L問(wèn)– SMPP Wiki

使用jSMPP

要開(kāi)始使用SMPP客戶端,我們將使用jSMPP。 要將jSMPP包含在您的項(xiàng)目中,請(qǐng)將以下maven依賴項(xiàng)添加到pom.xml中

pom.xml

<dependency><groupId>org.jsmpp</groupId><artifactId>jsmpp</artifactId><version>2.3.5</version> </dependency>

SMPP多次提交示例

正如我們討論的那樣,SMPP可用于向單個(gè)或多個(gè)訂戶發(fā)送消息。以下是向多個(gè)移動(dòng)訂戶發(fā)送消息的示例。第一步是使用主機(jī)名,用戶名和密碼向服務(wù)器發(fā)送綁定命令。 我們正在initSession()中執(zhí)行此操作。 完成此操作后,將創(chuàng)建SMPP會(huì)話,然后我們可以使用此會(huì)話發(fā)送消息。

相應(yīng)的提供程序?qū)⑻峁┎煌膮?shù),例如ip,主機(jī),用戶名,密碼。

MultipleSubmitExample.java

public class MultipleSubmitExample {private static final Logger LOGGER = LoggerFactory.getLogger(MultipleSubmitExample.class);private static final TimeFormatter TIME_FORMATTER = new AbsoluteTimeFormatter();private final String smppIp = "127.0.0.1";private int port = 8086;private final String username = "localhost";private final String password = "password";private final String address = "AX-DEV";private static final String SERVICE_TYPE = "CMT";public void broadcastMessage(String message, List numbers) {LOGGER.info("Broadcasting sms");SubmitMultiResult result = null;Address[] addresses = prepareAddress(numbers);SMPPSession session = initSession();if(session != null) {try {result = session.submitMultiple(SERVICE_TYPE, TypeOfNumber.NATIONAL, NumberingPlanIndicator.UNKNOWN, address,addresses, new ESMClass(), (byte) 0, (byte) 1, TIME_FORMATTER.format(new Date()), null,new RegisteredDelivery(SMSCDeliveryReceipt.FAILURE), ReplaceIfPresentFlag.REPLACE,new GeneralDataCoding(Alphabet.ALPHA_DEFAULT, MessageClass.CLASS1, false), (byte) 0,message.getBytes());LOGGER.info("Messages submitted, result is {}", result);Thread.sleep(1000);} catch (PDUException e) {LOGGER.error("Invalid PDU parameter", e);} catch (ResponseTimeoutException e) {LOGGER.error("Response timeout", e);} catch (InvalidResponseException e) {LOGGER.error("Receive invalid response", e);} catch (NegativeResponseException e) {LOGGER.error("Receive negative response", e);} catch (IOException e) {LOGGER.error("I/O error occured", e);} catch (Exception e) {LOGGER.error("Exception occured submitting SMPP request", e);}}else {LOGGER.error("Session creation failed with SMPP broker.");}if(result != null && result.getUnsuccessDeliveries() != null && result.getUnsuccessDeliveries().length > 0) {LOGGER.error(DeliveryReceiptState.getDescription(result.getUnsuccessDeliveries()[0].getErrorStatusCode()).description() + " - " +result.getMessageId());}else {LOGGER.info("Pushed message to broker successfully");}if(session != null) {session.unbindAndClose();}}private Address[] prepareAddress(List numbers) {Address[] addresses = new Address[numbers.size()];for(int i = 0; i< numbers.size(); i++){addresses[i] = new Address(TypeOfNumber.NATIONAL, NumberingPlanIndicator.UNKNOWN, numbers.get(i));}return addresses;}private SMPPSession initSession() {SMPPSession session = new SMPPSession();try {session.setMessageReceiverListener(new MessageReceiverListenerImpl());String systemId = session.connectAndBind(smppIp, Integer.valueOf(port), new BindParameter(BindType.BIND_TX, username, password, "cp", TypeOfNumber.UNKNOWN, NumberingPlanIndicator.UNKNOWN, null));LOGGER.info("Connected with SMPP with system id {}", systemId);} catch (IOException e) {LOGGER.error("I/O error occured", e);session = null;}return session;}public static void main(String[] args) {MultipleSubmitExample multiSubmit = new MultipleSubmitExample();multiSubmit.broadcastMessage("Test message from devglan", Arrays.asList("9513059515", "8884377251"));} }

在創(chuàng)建SMPP會(huì)話時(shí),我們已經(jīng)注冊(cè)了消息接收方偵聽(tīng)器,該偵聽(tīng)器將用于獲取消息的傳遞收據(jù)。 以下是示例。

MessageReceiverListenerImpl.java

public class MessageReceiverListenerImpl implements MessageReceiverListener {private static final Logger LOGGER = LoggerFactory.getLogger(MessageReceiverListenerImpl.class);private static final String DATASM_NOT_IMPLEMENTED = "data_sm not implemented";public void onAcceptDeliverSm(DeliverSm deliverSm) throws ProcessRequestException {if (MessageType.SMSC_DEL_RECEIPT.containedIn(deliverSm.getEsmClass())) {try {DeliveryReceipt delReceipt = deliverSm.getShortMessageAsDeliveryReceipt();long id = Long.parseLong(delReceipt.getId()) & 0xffffffff;String messageId = Long.toString(id, 16).toUpperCase();LOGGER.info("Receiving delivery receipt for message '{}' from {} to {}: {}",messageId, deliverSm.getSourceAddr(), deliverSm.getDestAddress(), delReceipt);} catch (InvalidDeliveryReceiptException e) {LOGGER.error("Failed getting delivery receipt", e);}}}public void onAcceptAlertNotification(AlertNotification alertNotification) {LOGGER.info("AlertNotification not implemented");}public DataSmResult onAcceptDataSm(DataSm dataSm, Session source)throws ProcessRequestException {LOGGER.info("DataSm not implemented");throw new ProcessRequestException(DATASM_NOT_IMPLEMENTED, SMPPConstant.STAT_ESME_RINVCMDID);} }

SMPP交貨收據(jù)

SMPP提供了許多標(biāo)準(zhǔn)的交貨收據(jù)錯(cuò)誤代碼來(lái)標(biāo)識(shí)交貨收據(jù)。 我們幾乎沒(méi)有采取任何措施來(lái)識(shí)別實(shí)際的收貨信息。有關(guān)完整的詳盡清單,請(qǐng)遵循– smpperrorcodes

DeliveryReceiptState.java

package com.devglan.smpp;public enum DeliveryReceiptState {ESME_ROK(0, "Ok - Message Acceptable"),ESME_RINVMSGLEN(1, "Invalid Message Length"),ESME_RINVCMDLEN(2, "Invalid Command Length"),ESME_RINVCMDID(3, "Invalid Command ID"),ESME_RINVBNDSTS(4, "Invalid bind status"),ESME_RALYBND(5, "Bind attempted when already bound"),ESME_RINVPRTFLG(6, "Invalid priority flag"),ESME_RINVREGDLVFLG(7, "Invalid registered-delivery flag"),ESME_RSYSERR(8, "SMSC system error"),ESME_RINVSRCADR(9, "Invalid source address"),ESME_RINVDSTADR(11, "Invalid destination address"),ESME_RINVMSGID(12, "Invalid message-id"),NOT_FOUND(000, "Couldn't resolve.Ask admin to add.");private int value;private String description;DeliveryReceiptState(int value, String description) {this.value = value;this.description = description;}public static DeliveryReceiptState getDescription(int value) {for (DeliveryReceiptState item : values()) {if (item.value() == value) {return item;}}return NOT_FOUND;}public int value() {return value;}public String description() {return description;}}

SMPP單一提交示例

jSMPP為單個(gè)提交提供了commitShortMessage()。以下是實(shí)現(xiàn)。 源代碼中提供了完整的實(shí)現(xiàn)。

String messageId = session.submitShortMessage(SERVICE_TYPE,TypeOfNumber.NATIONAL, NumberingPlanIndicator.UNKNOWN, address,TypeOfNumber.NATIONAL, NumberingPlanIndicator.UNKNOWN, number,new ESMClass(), (byte)0, (byte)1, TIME_FORMATTER.format(new Date()), null,new RegisteredDelivery(SMSCDeliveryReceipt.FAILURE), (byte)0, new GeneralDataCoding(Alphabet.ALPHA_DEFAULT, MessageClass.CLASS1, false), (byte)0,message.getBytes());

結(jié)論

這是Java中SMPP客戶端實(shí)現(xiàn)的簡(jiǎn)單示例。 在下一篇文章中,我們將討論其模擬器。

翻譯自: https://www.javacodegeeks.com/2018/03/smpp-java-exampleclient.html

smpp客戶端

總結(jié)

以上是生活随笔為你收集整理的smpp客户端_SMPP Java示例(客户端)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。