• 大小: 330KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Java
  • 标签: cmpp  

资源简介

java cmpp2.0 3.0 无jar纯源码demo(含服务端测试工具)[20171205] 找了挺多资料,CMPP的资源很多,但可以参考可用的不多, 特此开源cmpp的DEMO程序,无jar插件,纯源码实现。 语言为:java 工具为:Intellij IDEA 2017 附带第三方CMPP服务器测试工具,便于调试。 注解详细如: private long Msg_Id=0x00;//信息标识,由SP接入的短信网关本身产生,本处填空。 private byte Pk_total=0x01;//相同Msg_Id的信息总条数,从1开始 private byte Pk_number=0x01;//相同Msg_Id的信息序号,从1开始 private byte Registered_Delivery=0x01;//是否要求返回状态确认报告:0:不需要 1:需要 private byte Msg_level=0x01;//信息级别 private String Service_Id="";//业务类型,是数字、字母和符号的组合。 private byte Fee_UserType=0x00;//计费用户类型字段 0:对目的终端MSISDN计费; 1:对源终端MSISDN计费;2:对SP计费 private String Fee_terminal_Id="";//被计费用户的号码 private byte TP_pId=0x00;//GSM协议类型 private byte TP_udhi=0x00;//GSM协议类型。详细是解释请参考 private byte Msg_Fmt=0x0f;//信息格式0:ASCII串 3:短信写卡操作 4:二进制信息 8:UCS2编码 (0f)15:含GB汉字 private String Msg_src="";//信息内容来源(SP_Id) private String FeeType="01";//资费类别 01:对“计费用户号码”免费 02:对“计费用户号码”按条计信息费 03:对“计费用户号码”按包月收取信息费 04:对“计费用户号码”的信息费封顶 05:对“计费用户号码”的收费是由SP实现 private String FeeCode="000000";//资费代码(以分为单位) private String ValId_Time="";//存活有效期 private String At_Time="";//定时发送时间 private String Src_Id="";//源号码 SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码 private byte DestUsr_tl=0x01;//接收信息的用户数量(小于100个用户) private String Dest_terminal_Id="";//接收短信的MSISDN号码 private byte Msg_Length;//信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节) private byte[] Msg_Content;//信息内容 private String Reserve="";//保留

资源截图

代码片段和文件信息

import cmpp.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by qq:599097707 轻舟 on 2017/12/5/005.
 */
public class testMain {
    public static Socket socket;
    public static String IP=“192.168.1.169“;//服务器IP
    public static int port=9966;//端口号
    public static String spid=“2123“;//企业代码 和 spid 一样
    public static String secret=“abc@aaa“;//
    public static DataInputStream in;
    public static DataOutputStream out;


    /***
     * 创建指定地址socket连接
     * @return
     */
    public static Socket getSocketInstance(){
        try {
            socket=new Socket(IPport);
            socket.setKeepAlive(true);
            socket.setSoTimeout(10000);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return socket;
    }

    /***
     * connect初始化连接服务器
     * @throws IOException
     */
    public static void connectISMG() throws IOException{
        System.out.println(“正在连接到服务器“+IP);
        CMPP_CONNECT connect=new CMPP_CONNECT();

        connect.setTotalLength(12+6+16+1+4);
        connect.setCommandId(0x00000001);//请求连接
        connect.setSequenceId(MsgUtils.getSequence());
        connect.setSourceAddr(spid);//源地址,此处为SP_Id,即SP的企业代码。

        String timestamp=MsgUtils.getTimestamp();
        connect.setAuthenticatorSource(MsgUtils.getAuthenticatorSource(spid secret timestamp));//用于鉴别源地址。其值通过单向MD5 hash计算得出
        connect.setTimestamp(Integer.parseInt(timestamp));//时间戳的明文由客户端产生格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。
        //connect.setVersion((byte)0x20);//双方协商的版本号(高位4bit表示主版本号低位4bit表示次版本号)
        connect.setVersion((byte)0x14);//双方协商的版本号(高位4bit表示主版本号低位4bit表示次版本号)
        List dataList=new ArrayList();
        dataList.add(connect.toByteArray());
        out=new DataOutputStream(getSocketInstance().getOutputStream());
        if(out!=null&&null!=dataList){
            for(byte[]data:dataList){
                out.write(data);
                out.flush();
                System.out.println(“connect数据发送完成“);
            }
        }
        in=new DataInputStream(socket.getInputStream());
        int len=in.readInt();
        List getData=new ArrayList();
        if(null!=in&&0!=len){
            byte[] data=new byte[len-4];
            in.read(data);
            getData.add(data);
            for(byte[] returnData:getData){
                Message_Header header=new Message_Header(returnData);
                switch(header.getCommandId()){
                    case 0x80000001:
                        CMPP_CONNE

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     327680  2004-05-31 10:24  cmpp2smg\cmpp2smg.exe

     文件     176128  2004-05-31 10:23  cmpp2smg\CMPPAPI.dll

     文件       1078  2004-05-29 16:24  cmpp2smg\intro.txt

     文件       6317  2017-12-05 18:39  cmpp2smg\log\20171205.log

     文件        169  2017-12-05 18:06  cmpp2smg\setting.ini

     目录          0  2017-12-05 17:29  cmpp2smg\log

     目录          0  2017-12-05 17:29  cmpp2smg

----------- ---------  ---------- -----  ----

               511372                    7


评论

共有 条评论