private void initSGIP() {
    SGIPClientInitInfo info = new SGIPClientInitInfo();

    info.IP = this.ip;
    info.port = this.port;
    info.userName = this.userName;
    info.passWord = this.passWord;
    info.maxLink = this.maxLink;

    this.client = SGIPClient.getInstance();
    this.client.init(info);

    this.submit = new SGIPSubmit();

    this.submit.getBody().setChargeNumber(this.chargeNumber);
    this.submit.getBody().setUserCount(1);
    this.submit.getBody().setCorpId(this.corpId);
    this.submit.getBody().setFeeType(1);
    this.submit.getBody().setFeeValue("4");
    this.submit.getBody().setGivenValue("000807");
    this.submit.getBody().setAgentFlag(0);
    this.submit.getBody().setMorelatetoMTFlag(0);
    this.submit.getBody().setPriority(0);
    this.submit.getBody().setExpireTime("");
    this.submit.getBody().setScheduleTime("");
    this.submit.getBody().setReportFlag(1);
    this.submit.getBody().setTP_pid(1);
    this.submit.getBody().setTP_udhi(1); // 默认启用发长短信,具体发送短信时,根据短信的长度,再调整短信的方式发送方式
    this.submit.getBody().setMessageCoding(8); // UCS2模式发送短信
    this.submit.getBody().setMessageType(0);
    this.submit.getBody().setReserve("HX-PAXY");

    System.out.println("SGIP初始化完毕。");
  }
  public static void main(String[] args) throws Exception {

    System.out.println(new SGIPSendGZ().getClass().getCanonicalName());

    //    	DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    System.out.println(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
    //    	for (int i=0; i<100; i++)
    //    	{
    //    		System.out.println(new Random().nextInt(254)+1);
    //    	}

    //    	SimpleClient sm = new SimpleClient();
    //		sm.initialize("zjlt", "1FFy6NZZtn3q", "101.227.68.68", 8088);
    //
    //		long msgId = System.currentTimeMillis() + new Random().nextInt();
    //
    //		int ii = sm.send(msgId, "11590132493", "家长,你好!接上级通知精神,今年七年级夏令");
    //		System.out.println(ii);

    String testMsg =
        "1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab12345678";
    System.out.println(testMsg.length());
    System.out.println(testMsg.getBytes("UnicodeBigUnmarked").length);
    System.out.println(
        "尊敬的七年级学生家长,你好!接上级通知精神,今年七年级夏令营暂停,请家长于8月29日登陆玉海实验中学网站或到玉海实验中学(本部)宣传栏查看七年级分班结果。8月31日上午8:30学生分别到本部或公园路校区报到注册、领取校服、始业教育、班容布置等。谢谢!【瑞安市玉海实验中学】"
            .length());
    // 据测试,最大长度为=361
    System.out.println(
        "小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信,ABCabc123!@#$%^&*()兰蔻电影大赏:催人泪下的人狗奇缘——《忠犬八公的故事》:ABCabc123!@#$%^&*()"
            .getBytes()
            .length);
    System.out.println(
        "拆分短信的时候是直接将短信的内容根据字符数来拆分,第一条、第二条后面的每一条都是公平的,不会存在第一条160,第二条146的情况,只会都是153,除了其最后一条可能小于153.这里笔者想表达的含义是拆分与统计是两码事,拆分是将短信内容根据规定拆分成具体的短短信,是在短信的发送流程中进行的。统计是在用户输入字符的时候提示给用户的,统计只是为了方便用户知道当前长短信拆分后的数量以及输入字符数的限制等。"
            .length());

    try {
      // #################################################################
      // 测试MD5开始

      // 添加时间戳
      DateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");
      String timeSpan = df.format(new Date());

      // 添加4位随机数
      Random r = new Random();

      timeSpan += String.valueOf(r.nextInt(10));
      timeSpan += String.valueOf(r.nextInt(10));
      timeSpan += String.valueOf(r.nextInt(10));
      timeSpan += String.valueOf(r.nextInt(10));

      System.out.println(timeSpan);

      char hexDigits[] = {
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
      };
      byte[] btInput = timeSpan.getBytes();
      // 获得MD5摘要算法的 MessageDigest 对象
      MessageDigest mdInst = MessageDigest.getInstance("MD5");
      // 使用指定的字节更新摘要
      mdInst.update(btInput);
      // 获得密文
      byte[] md = mdInst.digest();
      // 把密文转换成十六进制的字符串形式
      int j = md.length;
      char str[] = new char[j * 2];
      int k = 0;
      for (int i = 0; i < j; i++) {
        byte byte0 = md[i];
        str[k++] = hexDigits[byte0 >>> 4 & 0xf];
        str[k++] = hexDigits[byte0 & 0xf];
      }
      System.out.println(new String(str));

      // 测试MD5结束
      // #################################################################

      String no = "8618611112xx";

      System.out.println(no.matches("861(30|31|32|55|56|85|86)[0-9]{8}"));

      System.out.println(System.getProperty("file.encoding"));

      //        	SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
      //        	String dateStr = format.format(new Date());
      //        	System.out.println(dateStr);

      SGIPClientInitInfo info = new SGIPClientInitInfo();
      info.IP = "211.90.245.97";
      info.port = 8801;
      info.userName = "******";
      info.passWord = "******";
      info.maxLink = 2;

      // info.IP = "10.130.83.207";
      // info.port = 5577;
      // info.userName = "******";
      // info.passWord = "******";
      // info.maxLink =1;
      SGIPClient client = SGIPClient.getInstance();
      client.init(info);

      // SGIPBindBody body = new SGIPBindBody();
      // byte x = 1;
      // body.setLoginType(x);
      // body.setLoginName("zhjecclient");
      // body.setLoginPassword("zhjecclient");
      // SGIPMessageHead head = new SGIPMessageHead();
      // SGIPSequenceNo sno = new SGIPSequenceNo();
      // sno.setNode(1);
      // sno.setTime(999444);
      // sno.setNumber(999);
      //
      // head.setCommandID(1);
      // head.setSequenceNo(sno);
      // head.setMessageLength(body.getLength() + head.getLength());
      //
      // SGIPBind bind = new SGIPBind();
      // bind.setHead(head);
      // bind.setBody(body);

      SGIPSubmit submit = new SGIPSubmit();

      // submit.getBody().se

      submit.getBody().setSPNumber("1065592210");
      submit.getBody().setChargeNumber("8615606503343");
      submit.getBody().setUserCount(1);
      //            submit.getBody().setUserNumber("8613157191037");	// 用户手机(胡越婷)
      //          submit.getBody().setUserNumber("8613282115303");	// 用户手机(胡越婷的另外一张杭州联通卡)
      //            submit.getBody().setUserNumber("8615657179130");	// 用户手机(罗鹏武)
      //            submit.getBody().setUserNumber("8615657176869");	// 用户手机(郭延磊)
      submit.getBody().setUserNumber("8613045700413"); // 用户手机(衢州联通)
      submit.getBody().setUserNumber("8613018973871"); // 郭延磊测试SIM卡

      submit.getBody().setCorpId("61167");
      submit.getBody().setFeeType(1);
      submit.getBody().setFeeValue("4");
      submit.getBody().setGivenValue("000807");
      submit.getBody().setAgentFlag(0);
      submit.getBody().setMorelatetoMTFlag(0);
      submit.getBody().setPriority(0);
      submit.getBody().setExpireTime("");
      submit.getBody().setScheduleTime("");
      submit.getBody().setReportFlag(1);
      submit.getBody().setTP_pid(1);
      submit.getBody().setTP_udhi(1); // 启用发长短信
      submit.getBody().setMessageCoding(8);
      submit.getBody().setMessageType(0);
      //            submit.getBody().setMessageContent("Test".getBytes());

      submit.getBody().setReserve("dd");

      SGIPRsp rsphandler6 = null;

      //            String msgContent =
      // "小胡童鞋,了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信了信【长短信完】";
      String msgContent =
          "小胡童鞋,了信1234567890abc1234567890abc1234567890abc小胡童鞋,1234567890abc1234567890abc1234567890abc【长短信完】";
      //            String msgContent =
      // "拆分短信的时候是直接将短信的内容根据字符数来拆分,第一条、第二条后面的每一条都是公平的,不会存在第一条160,第二条146的情况,只会都是153,除了其最后一条可能小于153.这里笔者想表达的含义是拆分与统计是两码事,拆分是将短信内容根据规定拆分成具体的短短信,是在短信的发送流程中进行的。统计是在用户输入字符的时候提示给用户的,统计只是为了方便用户知道当前长短信拆分后的数量以及输入字符数的限制等。【长短信完】";
      //            String msgContent =
      // "拆分短信的时候是直接将短信的内容根据字符数来拆分,第一条、第二条后面的每一条都是公平的,不会存在第一条160,第二条146的情况,只会都是153,除了其最后一条可能小于153.这里笔者想表达的含义是拆分与统计是两码事,拆分是将短信内容根据规定拆分成具体的短短信,是在短信的发送流程中进行的。统计是在用户输入字符的时候提示给用户的,统计只是为了方便用户知道当前长短信拆分后的数量以及输入字符数的限制等。【长短信完】拆分短信的时候是直接将短信的内容根据字符数来拆分,第一条、第二条后面的每一条都是公平的,不会存在第一条160,第二条146的情况,只会都是153,除了其最后一条可能小于153.这里笔者想表达的含义是拆分与统计是两码事,拆分是将短信内容根据规定拆分成具体的短短信,是在短信的发送流程中进行的。统计是在用户输入字符的时候提示给用户的,统计只是为了方便用户知道当前长短信拆分后的数量以及输入字符数的限制等。【长短信完】";
      //            String msgContent =
      // "小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信小胡童鞋,这是一条长短信,ABCabc123!@#$%^&*()兰蔻电影大赏:催人泪下的人狗奇缘——《忠犬八公的故事》:ABCabc123!@#$%^&*()本片讲述了一只叫Hatchi“小八”的秋田犬,与主人之前相互信任与守候的故事ABCabc123!@#$%^&*()。【长短信完】";
      //            String msgContent = "小胡童鞋【长短信完】";
      System.out.println("短信长度=" + msgContent.getBytes("UnicodeBigUnmarked").length);

      // 测试发标准短信
      if (true) {

        rsphandler6 = new SGIPRsp();
        submit.getHead().setSequenceNo(new SGIPSequenceNo());

        submit.getBody().setMessageContent(msgContent.getBytes("UnicodeBigUnmarked"));
        //
        // submit.getBody().setMessageContent(("尊敬的七年级学生家长,你好!接上级通知精神,今年七年级夏令营暂停,请家长于8月29日登陆玉海实验中学网站或到玉海实验中学(本部)宣传栏查看七年级分班结果。8月31日上午8:30学生分别到本部或公园路校区报到注册、领取校服、始业教育、班容布置等。谢谢!【瑞安市玉海实验中学】").getBytes("UnicodeBigUnmarked"));
        //              submit.getBody().setMessageContent(("方经理,请回复汉字英文数字混合内容的短信," + dateStr +
        // "进入校门=" + (i+1)).getBytes("GBK"));
        client.sendSubmit(submit, rsphandler6);
        SGIPSubmitResp rsp6 = rsphandler6.waitForSGIPSubmitResp();
        System.out.println(rsp6.getBody().getResult());
        System.out.println(rsp6.getBody().getLength());
        System.out.println(rsp6.getBody().toString());
        System.out.println(
            "消息数==" + new String(submit.getBody().getMessageContent(), "UnicodeBigUnmarked"));
      }

      byte[] byMsgContent = msgContent.getBytes();
      System.out.println(byMsgContent.length);

      Date date1 = new Date();

      SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
      String dateStr = format.format(new Date());

      rsphandler6 = new SGIPRsp();
      submit.getHead().setSequenceNo(new SGIPSequenceNo());

      List msgList = new ArrayList();
      while (msgContent.length() > 68) {
        msgList.add(msgContent.substring(0, 68));
        msgContent = msgContent.substring(68);
      }
      msgList.add(msgContent);

      // 计算总条数
      byte totalMsg = (byte) msgList.size();

      // 本条长短信的序列号
      byte bySeq = (byte) (new Random().nextInt(254) + 1);

      for (int i = 0; i < msgList.size(); i++) {
        String msg = (String) msgList.get(i);
        byte[] byArr = {0x05, 0x00, 0x03, bySeq, totalMsg, (byte) (i + 1)};

        byte[] bb = msg.getBytes("UnicodeBigUnmarked");
        byte[] bb_arr = new byte[bb.length + 6];
        System.arraycopy(byArr, 0, bb_arr, 0, 6);
        System.arraycopy(bb, 0, bb_arr, 6, bb_arr.length - 6);

        submit.getBody().setMessageContent(bb_arr);
        //
        // submit.getBody().setMessageContent(("尊敬的七年级学生家长,你好!接上级通知精神,今年七年级夏令营暂停,请家长于8月29日登陆玉海实验中学网站或到玉海实验中学(本部)宣传栏查看七年级分班结果。8月31日上午8:30学生分别到本部或公园路校区报到注册、领取校服、始业教育、班容布置等。谢谢!【瑞安市玉海实验中学】").getBytes("UnicodeBigUnmarked"));
        //                      submit.getBody().setMessageContent(("方经理,请回复汉字英文数字混合内容的短信," +
        // dateStr + "进入校门=" + (i+1)).getBytes("GBK"));
        client.sendSubmit(submit, rsphandler6);
        SGIPSubmitResp rsp6 = rsphandler6.waitForSGIPSubmitResp();
        System.out.println(rsp6.getBody().getResult());
        System.out.println(rsp6.getBody().getLength());
        System.out.println(rsp6.getBody().toString());
        System.out.println(
            "消息数==" + new String(submit.getBody().getMessageContent(), "UnicodeBigUnmarked"));
      }

      //                    for (int i=0; i<byMsgContent.length; i+=67)
      //                    {
      //                    	bCnt++;
      //
      //                        byte [] byArr = {0x05,  0x00, 0x03, 0x02, totalMsg, bCnt};
      //
      //                        String s = new String (byMsgContent, i, (i+67<byMsgContent.length ?
      // 67 : byMsgContent.length-i));
      //                        byte [] bb = s.getBytes("UnicodeBigUnmarked");
      //                        byte [] bb_arr = new byte [bb.length + 6];
      //                        System.arraycopy(byArr, 0, bb_arr, 0, 6);
      //                        System.arraycopy(bb, 0, bb_arr, 6, bb_arr.length-6);
      //
      //                        submit.getBody().setMessageContent(bb_arr);
      ////
      // submit.getBody().setMessageContent(("尊敬的七年级学生家长,你好!接上级通知精神,今年七年级夏令营暂停,请家长于8月29日登陆玉海实验中学网站或到玉海实验中学(本部)宣传栏查看七年级分班结果。8月31日上午8:30学生分别到本部或公园路校区报到注册、领取校服、始业教育、班容布置等。谢谢!【瑞安市玉海实验中学】").getBytes("UnicodeBigUnmarked"));
      ////                      submit.getBody().setMessageContent(("方经理,请回复汉字英文数字混合内容的短信," +
      // dateStr + "进入校门=" + (i+1)).getBytes("GBK"));
      //                      client.sendSubmit(submit, rsphandler6);
      //                      SGIPSubmitResp rsp6 = rsphandler6.waitForSGIPSubmitResp();
      //                      System.out.println(rsp6.getBody().getResult());
      //                      System.out.println(rsp6.getBody().getLength());
      //                      System.out.println(rsp6.getBody().toString());
      //                      System.out.println("消息数==" + new
      // String(submit.getBody().getMessageContent(), "UnicodeBigUnmarked"));
      //
      //
      //                    }

      //					List <String>tmpList = new ArrayList();
      //					while (content.length()>200)
      //					{
      //						tmpList.add(content.substring(0, 200));
      //						content = content.substring(200);
      //					}
      //					tmpList.add(content);

      System.out.println("start time:" + date1.toString());
      System.out.println("end time:" + (new Date()).toString());

    } catch (Exception e) {
      e.printStackTrace();
    }
  }