⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmppsubmit.java

📁 短信系统SMS:支持普通短信、长短信和wap push短信的发送。
💻 JAVA
字号:
package com.ekun.sms.cmpp2;

import java.io.*;

//import cmppapi.*;

public class CmppSubmit
{

  /*名称:CmppSubmit
   * 功能:组装submit包,但不包括Reserve项目
   * 输入参数:无
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public CmppSubmit(CmppSocket sock)
  {
    byte temp_chn[] = null;

    bodybytes = new byte[307]; //包体
    headbytes = new byte[12]; //包头

    pos = 299; //指向Reserve项目的位置
    CommandID = 4;
    TotalLength = 307 + 12; //包大小(假设短消息的长度为160)
    this.sock = sock;
    //conn.seq ++;
    SequenceId = 0;

    //MsgId = 1;
    PkTotal = 0;
    PkNumber = 0;
    RegisteredDelivery = 1;
    MsgLevel = 1;
    ServiceId = "";
    FeeUserType = 1;
    feeterminalid = "";
    tppid = 0;
    tpudhi = 0;
    MsgFmt = 8;
    MsgSrc = "";
    FeeType = "";
    FeeCode = "";
    ValidTime = "";
    AtTime = "";
    SrcTerminalId = "";
    DestUsrTl = 1;
    DestTerminalId = "";
    MsgLength = 160;
    MsgContent = new byte[160];
    Reverse = "";

    /*设置包头*/
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(TotalLength), headbytes, 0, 3,
                         0);
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(CommandID), headbytes, 0, 3, 4);
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(SequenceId), headbytes, 0, 3, 8);

    int cur_pos = 0; //位置指针

    /*设置包体*/
    MsgId = new byte[8];
    CmppCommon.BytesCopy(MsgId, bodybytes, 0, 7, cur_pos);
    cur_pos += 8;

    bodybytes[cur_pos] = (byte) PkTotal;
    cur_pos++;

    bodybytes[cur_pos] = (byte) PkNumber;
    cur_pos++;

    bodybytes[cur_pos] = (byte) RegisteredDelivery;
    cur_pos++;

    bodybytes[cur_pos] = (byte) MsgLevel;
    cur_pos++;

    byte tempbytes[] = new byte[10];
    ServiceId.getBytes(0, ServiceId.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 9, cur_pos);
    cur_pos += 10;

    bodybytes[cur_pos] = (byte) FeeUserType;
    cur_pos++;

    tempbytes = new byte[21];
    feeterminalid.getBytes(0, feeterminalid.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, cur_pos);
    cur_pos += 21;

    bodybytes[cur_pos] = (byte) tppid;
    cur_pos++;

    bodybytes[cur_pos] = (byte) tpudhi;
    cur_pos++;

    bodybytes[cur_pos] = (byte) MsgFmt;
    cur_pos++;

    tempbytes = new byte[6];
    MsgSrc.getBytes(0, MsgSrc.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, cur_pos);
    cur_pos += 6;

    tempbytes = new byte[2];
    FeeType.getBytes(0, FeeType.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 1, cur_pos);
    cur_pos += 2;

    tempbytes = new byte[6];
    FeeCode.getBytes(0, FeeCode.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, cur_pos);
    cur_pos += 6;

    tempbytes = new byte[17];
    ValidTime.getBytes(0, ValidTime.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, cur_pos);
    cur_pos += 17;

    tempbytes = new byte[17];
    AtTime.getBytes(0, AtTime.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, cur_pos);
    cur_pos += 17;

    tempbytes = new byte[21];
    SrcTerminalId.getBytes(0, SrcTerminalId.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, cur_pos);
    cur_pos += 21;

    bodybytes[cur_pos] = (byte) DestUsrTl;
    cur_pos++;

    int len = 21 * DestUsrTl;
    tempbytes = new byte[len];
    DestTerminalId.getBytes(0, DestTerminalId.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, len - 1, cur_pos);
    cur_pos += len;

    bodybytes[cur_pos] = (byte) MsgLength;
    cur_pos++;

    CmppCommon.BytesCopy(MsgContent, bodybytes, 0, MsgLength - 1, cur_pos);

    cur_pos += MsgLength;
  }

  /*名称:sendCmppSubmit
   * 功能:发送submit包
   * 输入参数:无
   *
   * 输出参数:无
   *
   * 返回值:0:成功,-1:失败
   */
  public int sendCmppSubmit()
  {
    try
    {
      sock.bout.write(headbytes);
      byte tmp[] = new byte[TotalLength - 12];
      CmppCommon.BytesCopy(bodybytes, tmp, 0, TotalLength - 13, 0);
      sock.bout.write(tmp);
      sock.bout.flush();
      return 0;
    }
    catch (IOException e)
    {
      return -1;
    }
    catch (NullPointerException npe)
    {
      return -2;
    }
  }

  /*名称:setSequenceId
   * 功能:设置SequenceId项目
   * 输入参数:SequenceId
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setSequenceId(int SequenceId)
  {
    this.SequenceId = SequenceId;
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(SequenceId), headbytes, 0, 3, 8);
  }

  /*名称:setMsgId
   * 功能:设置Msg_id项目
   * 输入参数:MsgId
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setMsgId(byte[] MsgId)
  {
    this.MsgId = MsgId;
    CmppCommon.BytesCopy(MsgId, bodybytes, 0, 7, 0);
  }

  /*名称:setPkTotal
   * 功能:设置Pk_tatal项目
   * 输入参数:PkTotal
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setPkTotal(int PkTotal)
  {
    this.PkTotal = PkTotal;
    bodybytes[8] = (byte) PkTotal;
  }

  /*名称:setPkNumber
   * 功能:设置Pk_number项目
   * 输入参数:PkNumber
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setPkNumber(int PkNumber)
  {
    this.PkNumber = PkNumber;
    bodybytes[9] = (byte) PkNumber;
  }

  /*名称:setRegisteredDelivery
   * 功能:设置Registered_Delivery项目
   * 输入参数:RegisteredDelivery
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setRegisteredDelivery(int RegisteredDelivery)
  {
    this.RegisteredDelivery = RegisteredDelivery;
    bodybytes[10] = (byte) RegisteredDelivery;
  }

  /*名称:setMsgLevel
   * 功能:设置Msg_Level项目
   * 输入参数:MsgLevel
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setMsgLevel(int MsgLevel)
  {
    this.MsgLevel = MsgLevel;
    bodybytes[11] = (byte) MsgLevel;
  }

  /*名称:setServiceId
   * 功能:设置Service_Id项目
   * 输入参数:ServiceId
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setServiceId(String ServiceId)
  {
    this.ServiceId = ServiceId;
    byte tempbytes[] = new byte[10];
    ServiceId.getBytes(0, ServiceId.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 9, 12);
  }

  /*名称:setFeeUserType
   * 功能:设置FeeUserType项目
   * 输入参数:FeeUserType
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setFeeUserType(int FeeUserType)
  {
    this.FeeUserType = FeeUserType;
    bodybytes[22] = (byte) FeeUserType;
  }

  /*名称:setFeeterminalid
   * 功能:设置fee_terminalid项目
   * 输入参数:feeterminalid
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setFeeterminalid(String feeterminalid)
  {
    this.feeterminalid = feeterminalid;
    byte tempbytes[] = new byte[21];
    feeterminalid.getBytes(0, feeterminalid.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, 23);
  }

  /*名称:setTppid
   * 功能:设置tp_pid项目
   * 输入参数:tppid
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setTppid(int tppid)
  {
    this.tppid = tppid;
    bodybytes[44] = (byte) tppid;
  }

  /*名称:setTpudhi
   * 功能:设置tp_pid项目
   * 输入参数:tppid
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setTpudhi(int tpudhi)
  {
    this.tpudhi = tpudhi;
    bodybytes[45] = (byte) tpudhi;
  }

  /*名称:setTpudhi
   * 功能:设置tp_pid项目
   * 输入参数:tppid
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setMsgFmt(int MsgFmt)
  {
    this.MsgFmt = MsgFmt;
    bodybytes[46] = (byte) MsgFmt;
  }

  /*名称:setMsgSrc
   * 功能:设置Msg_Src项目
   * 输入参数:MsgSrc
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setMsgSrc(String MsgSrc)
  {
    this.MsgSrc = MsgSrc;
    byte tempbytes[] = new byte[6];
    MsgSrc.getBytes(0, MsgSrc.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, 47);
  }

  /*名称:setFeeType
   * 功能:设置Fee_Type项目
   * 输入参数:FeeType
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setFeeType(String FeeType)
  {
    this.FeeType = FeeType;
    byte tempbytes[] = new byte[2];
    FeeType.getBytes(0, FeeType.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 1, 53);
  }

  /*名称:setFeeCode
   * 功能:设置Fee_Code项目
   * 输入参数:FeeCode
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setFeeCode(String FeeCode)
  {
    this.FeeCode = FeeCode;
    byte tempbytes[] = new byte[6];
    FeeCode.getBytes(0, FeeCode.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, 55);
  }

  /*名称:setValidTime
   * 功能:设置Valid_Time项目
   * 输入参数:ValidTime
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setValidTime(String ValidTime)
  {
    this.ValidTime = ValidTime;
    byte tempbytes[] = new byte[17];
    ValidTime.getBytes(0, ValidTime.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, 61);
  }

  /*名称:setAtTime
   * 功能:设置At_Time项目
   * 输入参数:AtTime
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setAtTime(String AtTime)
  {
    this.AtTime = AtTime;
    byte tempbytes[] = new byte[17];
    AtTime.getBytes(0, AtTime.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, 78);
  }

  /*名称:setAtTime
   * 功能:设置At_Time项目
   * 输入参数:AtTime
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setSrcTerminalId(String SrcTerminalId)
  {
    this.SrcTerminalId = SrcTerminalId;
    byte tempbytes[] = new byte[21];
    SrcTerminalId.getBytes(0, SrcTerminalId.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, 95);
  }

  /*名称:setRequiredItems
   * 功能:设置Msg_Fmt,Src_TerminalId,Dest_Terminal_Id,Msg_Length,Msg_Content必须项目
   * 输入参数:MsgFmt,SrcTerminalId,DestTerminalId,MsgLength,MsgContent
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setRequiredItems(String DestTerminalId, int MsgLength,
                               byte[] MsgContent)
  {
    byte temp_chn[] = null;
    byte tempbytes[] = null;

    this.MsgContent = MsgContent;
    this.MsgLength = MsgContent.length;
    this.DestTerminalId = DestTerminalId;

    byte tmp_con[] = new byte[MsgContent.length];

    for (int i = 0; i < MsgContent.length; i++)
    {
      tmp_con[i] = MsgContent[i];
    }

    TotalLength = 147 + MsgLength + 12; //计算实际包大小

    /*设置包头实际包大小*/
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(TotalLength), headbytes, 0, 3,
                         0);

    /*设置实际包体*/

    tempbytes = new byte[21];
    DestTerminalId.getBytes(0, DestTerminalId.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, 117);

    bodybytes[138] = (byte) MsgLength;

    CmppCommon.BytesCopy(tmp_con, bodybytes, 0, MsgLength - 1, 139);

    tempbytes = new byte[8];
    Reverse.getBytes(0, Reverse.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 7, 139 + MsgLength);

    pos = 139 + MsgLength;
  }

  /*名称:setReverse
   * 功能:设置Reverse项目
   * 输入参数:Reverse
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setReverse(String Reverse)
  {
    this.Reverse = Reverse;

    int cur_pos = pos;

    byte tempbytes[] = new byte[8];
    Reverse.getBytes(0, Reverse.length(), tempbytes, 0);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 7, cur_pos);
    cur_pos += 8;
  }

  /*名称:getTotalLength
   * 功能:返回包总长度
   * 输入参数:
   *
   * 输出参数:无
   *
   * 返回值:包总长度
   */
  public int getTotalLength()
  {
    return TotalLength;
  }

  byte[] MsgId;
  int PkTotal;
  int PkNumber;
  int RegisteredDelivery;
  int MsgLevel;
  String ServiceId;
  int FeeUserType;
  String feeterminalid;
  int tppid;
  int tpudhi;
  int MsgFmt;
  String MsgSrc;
  String FeeType;
  String FeeCode;
  String ValidTime;
  String AtTime;
  String SrcTerminalId;
  int DestUsrTl = 1;
  String DestTerminalId;
  int MsgLength;
  byte[] MsgContent;
  String Reverse;

  private int TotalLength; //包总长
  private int CommandID; //包类型
  private int SequenceId; //包序列号

  public byte bodybytes[]; //包体
  public byte headbytes[]; //包头

  CmppSocket sock; //socket链路

  int pos = 299; //包体指向Reverse的位置
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -