当前位置: 首页 > wzjs >正文

黄陂区建设局网站建网站找哪个公司

黄陂区建设局网站,建网站找哪个公司,上海正规做网站公司报价,网站分享组件​前言 短信网关是企业和组织发送短信的重要工具,而 SMPP(Short Message Peer-to-Peer)协议是短信网关与短信中心(SMSC)之间通信的标准协议。随着技术的演进,某些旧的连接器(如 Adobe Campaign…

前言

短信网关是企业和组织发送短信的重要工具,而 SMPP(Short Message Peer-to-Peer)协议是短信网关与短信中心(SMSC)之间通信的标准协议。随着技术的演进,某些旧的连接器(如 Adobe Campaign Classic 中的 Unsupported Connector)可能不再被支持,需要迁移到新的解决方案。本文将深入解析 SMPP 协议的工作原理,并结合代码示例,探讨如何在迁移过程中实现高效、可靠的短信发送;另外有个包内的方法,我使用的版本是又问题的,文章已经附上解决方式。


目录

  1. SMPP 协议简介
  2. SMPP 协议的核心组件
  3. 代码解析:SMPP 协议在 Java 中的实现
  4. 迁移指南:从 Unsupported Connector 到新的解决方案
  5. 总结与最佳实践

1. SMPP 协议简介

SMPP 是一种开放、灵活的协议,用于在短信网关和短信中心之间传输短信。它支持多种消息类型(如文本、二进制、WAP Push 等),并提供了可靠的消息传递机制。SMPP 协议的主要优势包括:

  • 高效性:支持批量消息发送和异步通信。
  • 灵活性:适用于多种短信应用场景。
  • 可靠性:提供了消息确认和重试机制。

2. SMPP 协议的核心组件

2.1 会话管理

SMPP 会话是短信网关与短信中心之间的通信通道。会话的类型包括:

  • BIND_TRX:双向通信,支持发送和接收短信。
  • BIND_TX:仅支持发送短信。
  • BIND_RX:仅支持接收短信。

2.2 消息格式

SMPP 消息由 PDU(Protocol Data Unit)组成,常见的 PDU 类型包括:

  • SubmitSm:用于提交短信。
  • DeliverSm:用于接收短信。
  • DataSm:用于发送和接收数据短信。

2.3 编码与解码

SMPP 支持多种字符编码(如 GSM 7-bit、UCS-2、ISO-8859-1),开发者需要根据目标设备的语言和字符集选择合适的编码方式。


3. 代码解析:SMPP 协议在 Java 中的实现

以下是一个使用 SMPP 协议发送短信的 Java 代码示例,代码逻辑清晰,功能完整:

3.1 代码结构

 

java

public Map<String, Object> smsGatewaySend(Map<String, Object> params) throws IOException {Map<String, Object> result = new HashMap<>();// 解析参数String systemId = String.valueOf(params.get("user"));String password = String.valueOf(params.get("password"));String mobile = String.valueOf(params.get("mobile"));String content = String.valueOf(params.get("content"));String host = String.valueOf(params.get("ip"));int port = Integer.parseInt(params.get("port") + "");String protocol = String.valueOf(params.get("protocol"));// 密码解密逻辑if ("......".equals(password) && params.containsKey("uuid")) {String passwordEncrypt = pmcMapper.selectSmsGatewayPassByUuid(String.valueOf(params.get("uuid")));password = pmcUtil.decryptStr(passwordEncrypt);}// 初始化 SMPP 会话SMPPSession session = new SMPPSession();try {// 连接并绑定短信中心String sessionResult = session.connectAndBind(host, port, new BindParameter(BindType.BIND_TRX, systemId, password, systemType,TypeOfNumber.INTERNATIONAL, NumberingPlanIndicator.ISDN, addressRange), 10000);// 设置消息接收监听器session.setMessageReceiverListener(new MessageReceiverListener() {@Overridepublic DataSmResult onAcceptDataSm(DataSm dataSm, Session session) throws ProcessRequestException {return null;}@Overridepublic void onAcceptDeliverSm(DeliverSm deliverSm) throws ProcessRequestException {}@Overridepublic void onAcceptAlertNotification(AlertNotification alertNotification) {}});// 检查会话状态if (session.getSessionState() == SessionState.BOUND_TRX) {// 准备发送短信ESMClass eSMClass = new ESMClass();RegisteredDelivery registeredDelivery = new RegisteredDelivery();DataCoding dataCoding = new GeneralDataCoding(Alphabet.ALPHA_UCS2, GeneralDataCoding.DEFAULT.getMessageClass());log.info("================================Connection successful. Ready to send SMS================================");// 设置会话超时时间session.setTransactionTimer(50 * 1000);OptionalParameter[] optionalParameters = new OptionalParameter[]{};byte[] contentBytes = content.getBytes(StandardCharsets.UTF_16BE);List<byte[]> chunks = splitContentIntoChunks(contentBytes, Integer.parseInt(maxContentLength));// 发送短信boolean allSentSuccessfully = true;List<String> messageIdList = new ArrayList<>();for (byte[] chunk : chunks) {SubmitSmResult sendResult = session.submitShortMessage("", TypeOfNumber.ALPHANUMERIC,NumberingPlanIndicator.ISDN, "PMCTest",TypeOfNumber.INTERNATIONAL, NumberingPlanIndicator.ISDN, mobile, eSMClass,(byte) 0, (byte) 0, "", "", registeredDelivery,(byte) 0, dataCoding, (byte) 0, chunk, optionalParameters);if (sendResult == null) {allSentSuccessfully = false;break;}messageIdList.add(sendResult.getMessageId());}// 处理发送结果if (allSentSuccessfully) {result.put("success", true);result.put("messageId", messageIdList);result.put("error", "Send successfully.");} else {result.put("success", false);result.put("error", "Failed to send SMS");}} else {result.put("success", false);result.put("error", "Gateway connection failed.");}} catch (ResponseTimeoutException | PDUException | InvalidResponseException | NegativeResponseException e) {result.put("success", false);result.put("error", "Failed to send SMS");return result;} finally {session.unbindAndClose();}// 等待一段时间try {Thread.sleep(Long.parseLong(sleepTime == null || "".equals(sleepTime) ? "10" : sleepTime));} catch (InterruptedException e) {log.error("SMS Gateway Interrupted Error");}return result;
}

过程判断一直过不去,重新的包已经附件上传

3.2 代码优化建议

  1. 参数校验:在解析参数时,增加对空值和异常值的校验。
  2. 日志记录:在关键步骤中添加详细的日志记录,便于排查问题。
  3. 异常处理:细化异常处理逻辑,针对不同类型的异常采取不同的处理策略。
  4. 性能优化:优化短信分块发送逻辑,减少网络延迟对性能的影响。

4. 迁移指南:从 Unsupported Connector 到新的解决方案

根据 Adobe Campaign Classic 的文档,迁移 Unsupported Connector 到新的解决方案需要以下步骤:

4.1 评估现有功能

  • 确定当前使用的功能和配置(如 SMPP 版本、编码方式、消息类型等)。
  • 分析现有代码的逻辑和依赖关系。

4.2 选择新的解决方案

  • 选择支持 SMPP 协议的短信网关解决方案(如 Adobe Campaign Classic 支持的连接器)。
  • 确保新解决方案兼容现有的短信中心和设备。

4.3 迁移代码

  • 将现有代码中的 Unsupported Connector 替换为新的连接器。
  • 测试新代码的功能和性能,确保迁移后短信发送的稳定性和可靠性。

4.4 验证与测试

  • 在测试环境中验证新解决方案的功能。
  • 监控短信发送的成功率和延迟,确保满足业务需求。

5. 总结与最佳实践

总结

  • SMPP 协议是短信网关与短信中心之间通信的重要标准,具有高效、灵活和可靠的特点。
  • 在迁移 Unsupported Connector 时,需要评估现有功能、选择新的解决方案、迁移代码并验证测试。
  • 通过优化代码和遵循最佳实践,可以提升短信发送的效率和稳定性。

最佳实践

  • 参数校验:确保输入参数的有效性和安全性。
  • 日志记录:在关键步骤中添加详细的日志记录。
  • 异常处理:细化异常处理逻辑,提高代码的健壮性。
  • 性能优化:优化短信分块发送逻辑,减少网络延迟的影响。

参考资料

  • Adobe Campaign Classic 文档()
  • SMPP 协议规范
  • Java SMPP 实现
  • (不支持的短信连接器迁移 | Adobe Campaign)

文章转载自:

http://aeNNpLcz.Lxngn.cn
http://rVm3HemI.Lxngn.cn
http://HyHO7SNC.Lxngn.cn
http://FpfOb9l5.Lxngn.cn
http://5Bzm4dcZ.Lxngn.cn
http://8NvKcsMI.Lxngn.cn
http://9yDxc9Gl.Lxngn.cn
http://vqGtzz4M.Lxngn.cn
http://ecIdjgo9.Lxngn.cn
http://jGGxBVEK.Lxngn.cn
http://LHYKUIpP.Lxngn.cn
http://MpIBcH7I.Lxngn.cn
http://qVKe6UZb.Lxngn.cn
http://Rdi4PcJD.Lxngn.cn
http://s29fYFi1.Lxngn.cn
http://oObEUfeN.Lxngn.cn
http://KmL1Zx7L.Lxngn.cn
http://0zrUgmyN.Lxngn.cn
http://yGat1hj0.Lxngn.cn
http://YNzrVi7i.Lxngn.cn
http://VatvI7OT.Lxngn.cn
http://bs2gCn2Q.Lxngn.cn
http://zFRbNjda.Lxngn.cn
http://mDLvx3Bs.Lxngn.cn
http://dbbX24M1.Lxngn.cn
http://vRQAumx5.Lxngn.cn
http://RIBEPsvs.Lxngn.cn
http://sJeuFPj0.Lxngn.cn
http://C4OCXpND.Lxngn.cn
http://BtCxsoiB.Lxngn.cn
http://www.dtcms.com/wzjs/621340.html

相关文章:

  • 网站做可以退款吗网站建设需要注意哪些关键细节
  • 如何在建设教育协会网站注册考试黄山风景区
  • 网站建设的文档什么网站可以做相册视频
  • 网站的seo方案怎么做南皮网站建设价格
  • pytson做网站安全吗网站开发人员工资水平
  • 0基础自学做网站上海对外贸易公司
  • 深圳网站建设方案书郑州网站seo排名
  • 山西网站开发公司电话门户网站搭建软件
  • 视频门户网站建设服务器网站标题前的小图标怎么做
  • 做网站公司费用平面设计和网站运营
  • 专业苏州网站建设公司关于美食的网页模板
  • 阿里巴巴开通诚信通后网站怎么做江苏做网站怎么收费多少
  • 内江网站建设0832hdsj百度云附件 wordpress
  • 义安区住房和城乡建设局建网站WordPress网站根目录有哪些
  • 网站建设公司 知乎报价表制作
  • 如何做色流量网站国土网站建设自查报告
  • 网站建设市场前景如何网站建设服务开发
  • 帝国做的网站怎么上传图片天津建筑工程公司有哪些
  • 模板网站多钱成都网站软件定制开发
  • 合肥网站建设ahyeda建设网站需要租赁主机吗
  • 天津营销型网站建设费用软装设计风格
  • 焦作 网站建设如何做好网络宣传
  • php微信微网站怎么做go语言网站开发教程
  • 哪些网站可以做文字链广告商标设计免费版
  • 自己建立的网站珠宝钻石网站建站
  • 建筑网站开发快速做网站的方法
  • 如何优化移动端网站个人网站设计风格
  • 网站导航固定苏宁易购网站建设目标
  • 陕西响应式网站建设小程序电商商城
  • 杭州网站网站建设邯郸公众号小程序制作