MCPcopy Index your code
hub / github.com/Lihuanghe/sms-client

github.com/Lihuanghe/sms-client @v0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1 ↗ · + Follow
132 symbols 278 edges 24 files 0 documented · 0% updated 15mo agov0.1 · 2023-12-19★ 131
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

技术问题请加QQ群

qq 20180420170449

群名称:cmppGate短信

群 号:770738500

一个基于SMSGate框架 的纯发送短信客户端库,使用简单

How To Use

<dependency>
  <groupId>com.chinamobile.cmos</groupId>
  <artifactId>sms-client</artifactId>
  <version>0.1</version>
</dependency>
  • 如何创建smsClient对象

通过builder模式,为同一个账号创建唯一一个实例对象,不能重复创建。 smsClient对象创建后会自行管理多个tcp连接,如果重复创建Client对象,就会造成总连接数超过最大值。

  • 如何发送短信?

参考test包里的测试用例 :

        String uri = "cmpp://127.0.0.1:17890?username=test01&password=1qaz2wsx&version=32&spcode=10086&msgsrc=test01&serviceid=000000&window=32&maxchannel=1";

        //通过builder创建一个Client对象,同一个通道账号只用保持一个smsClient实例。可以使用Spring注册为单例Bean。或者单例模式
        SmsClientBuilder builder = new SmsClientBuilder();
//      EndpointEntity client =  builder.createEndpointEntity(uri);
        final SmsClient smsClient = builder.uri(uri) // 保持空闲连接,以便能接收上行或者状态报告消息
                .receiver(new MessageReceiver() {
                    public void receive(BaseMessage message) {
//                      System.out.println(message.toString());
                    }
                }).build();


        Future future = null;

        //发送5000条短信
        for (int i = 0; i < 1; i++) {
             future = executor.submit(new Runnable() {

                public void run() {
                    //new 一个短信 Request对象
                    CmppSubmitRequestMessage msg = new CmppSubmitRequestMessage();
                    msg.setDestterminalId(String.valueOf(13800138000));
                    msg.setSrcId(String.valueOf(10699802323));
                    msg.setLinkID("0000");
                    msg.setMsgContent("老师好,Hello World");
                    msg.setRegisteredDelivery((short) 1);
                    msg.setServiceId("ssss");
                    CmppSubmitResponseMessage response;
                    try {
                    //调用send方法发送
                        response = (CmppSubmitResponseMessage) smsClient.send(msg);

                        //收到Response消息
                    } catch (Exception e) {
                        logger.info("send ", e);
                    }
                }

            });
        }
  • 如何发送长短信?

默认已经处理好长短信了,就像发送普通短信一样。

  • 如何接收短信?

参考test包里的测试用例 : 创建 Builder的时候注册 MessageReceiver类。

SGIP协议是特例,因为该协议要求开启一个Server端口,网关作为客户端连上来推送上行短信和状态报告。

  • 使用 http 或者 socks 代理

SmsGate支持HTTP、SOCKS代理以方便在使用代理访问服务器的情况。代理设置方式:

    // 无username 和 password 可写为  http://ipaddress:port
    client.setProxy("http://username:password@ipaddress:port");  //http代理
    client.setProxy("socks4://username:password@ipaddress:port");  //socks4代理
    client.setProxy("socks5://username:password@ipaddress:port");  //socks5代理

SGIP回收状态报告和用户回复

  • 为什么smsClient不提供sgip协议的接收上行消息、状态报告能力

smsClient是一个tcp客户端,它需要主动去连接服务端的tcp端口。而sgip协议要求接收上行回复短信时,SP要启动一个tcp服务,等待来自运营商短信网关的连接请求(此时运营商是tcp客户端)。 一般系统部署时,作为客户端可能会部署多个进程节点,类似HTTP请求,可以从多个节点分别发起请求。

但sgip的上行短信接收服务作为一个tcp服务端只能有一个,集成在client端很别扭。 替代方式为:根据系统架构特点,设计接收上行消息的tcp服务如何部署,比如可以独立一个节点,也可以与Http的web服务一起部署。 SgipServer的开发方式可以参考smsServer

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 108
Class 21
Interface 3

Languages

Java100%

Modules by API surface

src/main/java/com/chinamobile/cmos/InnerBasePooledObjectFactory.java13 symbols
src/main/java/com/chinamobile/cmos/InnerSmsClient.java12 symbols
src/main/java/com/chinamobile/cmos/SmsClientBuilder.java10 symbols
src/main/java/com/chinamobile/cmos/SmsClient.java10 symbols
src/main/java/com/chinamobile/cmos/InnerSgipEndpointConnector.java10 symbols
src/main/java/com/chinamobile/cmos/InnerSMPPEndpointConnector.java10 symbols
src/main/java/com/chinamobile/cmos/InnerSMGPEndpointConnector.java10 symbols
src/main/java/com/chinamobile/cmos/InnerCmppEndpointConnector.java10 symbols
src/test/java/com/zx/sms/LoggerNameBasedDiscriminator.java6 symbols
src/test/java/com/chinamobile/cmos/test/TestSmppClient.java4 symbols
src/test/java/com/chinamobile/cmos/test/TestSgipClient.java4 symbols
src/test/java/com/chinamobile/cmos/test/TestSMGPClient.java4 symbols

For agents

$ claude mcp add sms-client \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page