`
jxxms
  • 浏览: 106934 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Wap Push 源码java实现

    博客分类:
  • java
阅读更多

import java.io.UnsupportedEncodingException;

/**
* wap push消息体工具类                               
* @version 1.0                                               
* @author xmy                                            
*/
public class PushTool {
####*/
private static byte []WDP =
       new byte[] {
                              0x0B,          //User-Data-Header (UDHL) Length = 11
                  0x05,          //UDH IE identifier: Port numbers
                  0x04,          //UDH port number IE length
                  0x0B, (byte) 0x84, 0x23, (byte) 0xF0,     //the following message is a wap push
                  0x00,          //UDH IE identifier: SAR
                  0x03,          //UDH SAR IE length
                  0x03,          //reference number
                  0x01, 0x01     /*
                                                    * 这两个只有当OTA内容过长时,短信会被拆分为两条
                                  * 或多条,这时候第1个字节表明OTA短信共有几个数据
                                  * 包,也就是共被拆分为几条短信;第2个字节表明当前
                                  * 数据包是第几个数据包。
                                                    * 默认情况下,我们只有一个数据包,并且当前包是第一
                                  * 个数据包。所以就是0x01 0x01
                                  *
                                  */
                  };

private static byte []WSP =
                  new byte[] {
                             0x29,
                             0x06,
                             0x06,
                             0x03,
                             (byte) 0xAE,
                             (byte) 0x81,
                             (byte) 0xEA,
                             (byte) 0x8D,
                             (byte) 0xCA
                                };

private static byte []WBXMLHEAD =
                  new byte[] {
                              0x02,           //标记位
                              0x05,           //版本信息: -//WAPFORUM//DTD SI 1.0//EN
                              0x6A,           //编码方式UTF-8
                              0x00,           //XML标记开始
                              0x45,           // "<si>"
                              (byte) 0xC6,    // "<indication"
                              0x08,           // "<action=signal-high> "
                              0x0C,           // "href=http://"
                              0x03            // URL开始标记
                                };
/*
* URL标记为去掉http://后的UTF8编码
* */
// private byte []URL = null;

private static byte []URLTAIL = new byte []{
                                          0x00,          //URL字符串结束标记
                                          0x01           // ">"
                                          };

private static byte []CONTENTHEAD = new byte []{0x03};     //文本字符串开始
/*
* 说明文本
* */
// private static byte []CONTENT = null;   

private static byte []CONTENTTAIL = new byte []{0x00};     //文本字符串结束标记
private static byte []WBXMLTAIL =
                       new byte[] {
                                   0x01,              // "</si>"
                                   0x01               // "</indication>"
                                  };


/**
* 填充PUSH短信Msg_Content字段
* @param url
* @param content
* @return
*/
public static byte[] getMsgContent(String url,String content) {
   String url_ = UrlFilter(url);
  
// URL
   byte []URL = null;
   byte []msgContent = null;
   try {
      URL = url_.getBytes("utf-8");
//      msgContent = chString2UTF8_byte(content);
      msgContent = content.getBytes("utf-8");
//      msgContent = chString2UTF8_byte(content);
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
   }
  
   byte []res = new byte[PushTool.WDP.length
                        + PushTool.WSP.length
                        + PushTool.WBXMLHEAD.length
                        + URL.length
                        + PushTool.URLTAIL.length
                        + PushTool.CONTENTHEAD.length
                        + msgContent.length
                        + PushTool.CONTENTTAIL.length
                        + PushTool.WBXMLTAIL.length];
  
   System.arraycopy(PushTool.WDP, 0, res, 0, PushTool.WDP.length);
   System.arraycopy(PushTool.WSP, 0, res, PushTool.WDP.length, PushTool.WSP.length);
  
   System.arraycopy(PushTool.WBXMLHEAD, 0, res,
             PushTool.WSP.length
             + PushTool.WDP.length,
             PushTool.WBXMLHEAD.length);
  
   System.arraycopy(URL, 0, res,
             PushTool.WSP.length
             + PushTool.WDP.length
             + PushTool.WBXMLHEAD.length,
             URL.length);
   System.arraycopy(PushTool.URLTAIL, 0, res,
             PushTool.WDP.length
             + PushTool.WSP.length
                         + PushTool.WBXMLHEAD.length
                         + URL.length ,
             PushTool.URLTAIL.length);  
   System.arraycopy(PushTool.CONTENTHEAD, 0, res,
             PushTool.WDP.length
             + PushTool.WSP.length
                         + PushTool.WBXMLHEAD.length
                         + URL.length
                         + PushTool.URLTAIL.length ,
             PushTool.CONTENTHEAD.length);
   System.arraycopy(msgContent, 0, res,
             PushTool.WDP.length
             + PushTool.WSP.length
                         + PushTool.WBXMLHEAD.length
                         + URL.length
                         + PushTool.URLTAIL.length
                         + PushTool.CONTENTHEAD.length,
             msgContent.length);
   System.arraycopy(PushTool.CONTENTTAIL, 0, res,
             PushTool.WDP.length
             + PushTool.WSP.length
                         + PushTool.WBXMLHEAD.length
                         + URL.length
                         + PushTool.URLTAIL.length
                         + PushTool.CONTENTHEAD.length
                         + msgContent.length,
             PushTool.CONTENTTAIL.length);
   System.arraycopy(PushTool.WBXMLTAIL, 0, res,
       PushTool.WDP.length
       + PushTool.WSP.length
                   + PushTool.WBXMLHEAD.length
                   + URL.length
                   + PushTool.URLTAIL.length
                   + PushTool.CONTENTHEAD.length
                   + msgContent.length
                   + PushTool.CONTENTTAIL.length,
             PushTool.WBXMLTAIL.length);
  
   return res;
}





/**
* 去掉URL的"http://"开头
*/
private static String UrlFilter(String url) {
   if (url.contains("http://")) {
    return url.substring(7);
   }
  
   return url;
}

/**
* 把汉字转化成UNICODE编码的字符串
*
* @param s       中文字符串
* @return
*/
public static String Chinese2unicode(String s) {
   String s1 = new String();
   String s2 = new String();
   byte abyte0[] = null;

   try {
    abyte0 = s.getBytes("Unicode");
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
   }
  
   for(int j = 2; j < abyte0.length; j += 2)
   {
    String s3 = Integer.toHexString(abyte0[j + 1]);
    int i = s3.length();
   
    if(i < 2) {
     s1 = s1 + "0" + s3;
    } else {
     s1 = s1 + s3.substring(i - 2);
    }
   
    s3 = Integer.toHexString(abyte0[j]);
    i = s3.length();
   
    if(i < 2) {
     s1 = s1 + "0" + s3;
    } else {
     s1 = s1 + s3.substring(i - 2);
    }
   }

   return s1;
}

/**
* 将UTF-8编码字符串转化为byte数组
* @param str
* @return
*/
private static byte[] chString2UTF8_byte(String str) {
   byte[] result = null;
   try{
    str = new String(str.getBytes(),"GB2312");
    result = str.getBytes("UTF-8");
   }catch (Exception e){
    e.printStackTrace();
   }
  
   return result;
}

/**
* byte数组转化为16进制字符串
* @param buf
* @return
*/
public static String byteToHexStr(byte buf[]) {
   StringBuffer sb = new StringBuffer(2 * buf.length);
   for(int i = 0; i < buf.length; i++) {
    int h = (buf[ i ] & 0xf0) >> 4;
   int l = (buf[ i ] & 0x0f);
   sb.append(new Character((char)((h > 9) ? 'a' + h - 10 : '0' + h)));
   sb.append(new Character((char)((l > 9) ? 'a' + l - 10 : '0' + l)));
   }
   return sb.toString().toUpperCase();
}
}

 

注意udhi 1

fmt 为4

 

 

import java.io.UnsupportedEncodingException;

/**
* CMPP通过短信网关上发WAP PUSH短信的Msg_Content部分的内容。
* </br>
* 请设置submit短信中以下位:
* TP_pID = 0
* TP_udhi = 1
* Msg_Fmt = 0x04
*
* @version 1.0
* @author xmy
*
*/
public class SpWapPushMsg {
/*
* 0x0B      WAP PUSH头部的总长度
* 0x05, 0x04, 0x0B, (byte) 0x84, 0x23, (byte) 0xF0      接下来的内容是一个wap push
* 0x00               表示是Concatenated Short Messages
* 0x03              长度   
* 0x03     reference number 参考gsm 9.2.3.6
* */
private static byte []WAP_PUSH_HEADER1 =
new byte[]{0x0B, 0x05, 0x04, 0x0B, (byte) 0x84, 0x23, (byte) 0xF0, 0x00, 0x03, 0x03};

/*
* msgCount      拆分后的短消息条数,默认只有一条短信
* msgOrder      拆分后的短消息序号,默认短信编号为第一条
* */
private byte msgCount = 0x01;       
private byte msgOrder = 0x01;         

/* WSP */
private static byte []WAP_PUSH_HEADER2 =
new byte[]{0x29, 0x06, 0x06, 0x03, (byte) 0xAE, (byte) 0x81, (byte) 0xEA, (byte) 0x8D, (byte) 0xCA};

/*
* 0x02               标记位
* 0x05     -//WAPFORUM//DTD SI 1.0//EN
* 0x6A     URL和TEXT编码方式UTF-8
* 0x00              标记开始
* 0x45     <si>
* 0xC6     <indication
* 0x0C     href="http://
* 0x03             字符串开始
* */
private static byte []WAP_PUSH_INDICATOR =
new byte[]{0x02, 0x05, 0x6A, 0x00, 0x45, (byte) 0xC6, 0x0C, 0x03};

/*
* 0x00      URL 字符串结束
* 0x01      '>'
* 0x03                内容描述字符串开始
* */
private static byte []WAP_Push_TEXT_HEADER = new byte[]{0x00, 0x01, 0x03};

   /*
* 0x00                内容描述字符串结束
* 0x01      </si>
* 0x01      </indication>
* */
private static byte []END_Of_WAP_PUSH = new byte[]{0x00, 0x01, 0x01};

/* 当url和content空白时候的Msg_Content长度 */
private static int BASIC_LENGTH = WAP_PUSH_HEADER1.length
+ 2
+ WAP_PUSH_HEADER2.length
+ WAP_PUSH_INDICATOR.length
+ WAP_Push_TEXT_HEADER.length
+ END_Of_WAP_PUSH.length;

/*
* Msg_Fmt == 0    ==> MAX_MSG_LENGTH = 160
* Msg_Fmt != 0    ==> MAX_MSG_LENGTH = 140
* */
private static int MAX_MSG_LENGTH = 140;

/* 去掉 "http://" 的URL地址*/
private String url = null;
/* 文本消息内容 */
private String text = null;

public SpWapPushMsg(String url,String text) {
this.url = (true == url.contains("http://")? url.substring(7) : url);
this.text = text;
}

public SpWapPushMsg() {};

/**
* 获取Msg_Content内容
* @return      拆分后的字节数组
*/
public byte [][]getMsgContent() {
byte []url_ = UTF8Encoding(url);
byte []text_ = UTF8Encoding(text);

    /* 计算拆分后的短信条数 */
msgCount += (url_.length + text_.length) / (MAX_MSG_LENGTH - BASIC_LENGTH);

/*
* 结果数组
*
* 第一维为拆分后的第一条短信编号,第二维为拆分后的第二条短信内容,依次类推,即:
* msgCountent[0] = 第一条拆分的短信
* msgCountent[1] = 第二条拆分的短信
*               ...
* msgCountent[n] = 第n+1条拆分的短信
* */
byte []msgContent[] = new byte[msgCount][];


msgContent = combinMsgContent(msgContent,url_,text_);
realese();
return msgContent;
}

/**
* 组装WAP PUSH短信的msg_content字段
* @param msgContent           
* @return
*/
private byte[][] combinMsgContent(byte [][]msgContent,byte []url,byte []text) {
//          /* 以URL和TEXT填充消息体后的余数,两部分余数在整数填充完后将额外填充成一条短信 */
//          int url_remainder  = url.length % (MAX_MSG_LENGTH - BASIC_LENGTH);
//          int text_remainder = text.length % (MAX_MSG_LENGTH - BASIC_LENGTH);
//           
//          /* 单以URL部分和TEXT部分分别填充短信将会填充的数量 */
//          int url_msg_count  = url.length / (MAX_MSG_LENGTH - BASIC_LENGTH);
//          int text_msg_count = text.length / (MAX_MSG_LENGTH - BASIC_LENGTH);
//           
//          boolean flag = true;
//          for ( ; msgOrder <= msgCount ; msgOrder++) {
//              /* 填充url部分*/
//              for (int pos = 0 ; msgOrder <= url_msg_count ; msgOrder++,pos++) {
//                  msgContent[msgOrder - 1] = buildMsgContent(url  
//                                                            , pos * (MAX_MSG_LENGTH - BASIC_LENGTH)  
//                                                            , (pos + 1) * (MAX_MSG_LENGTH - BASIC_LENGTH)
//                                                            , text,0,0);
//              }
//               
//              /* 填充URL的余数部分和TEXT的开始一段 */
//              if (flag) {
//                  msgContent[msgOrder - 1] = buildMsgContent(url  
//                                                            , url.length -  url_remainder
//                                                            , url.length
//                                                            , text,0,text_remainder);
//                  flag = false;
//                  continue;       //填充完该条短信后面的代码暂时中止运行
//              }
//               
//               
//              /* 填充余下的TEXT部分 */
//              for (int pos = 0 ;msgOrder - url_msg_count - 1 <= text_msg_count; msgOrder++,pos++) {
//                  msgContent[msgOrder - 1] = buildMsgContent(url ,0 ,0
//                                                            , text  
//                                                            , text_remainder + pos * (MAX_MSG_LENGTH - BASIC_LENGTH)
//                                                            , text_remainder + (pos + 1) * (MAX_MSG_LENGTH - BASIC_LENGTH));
//              }
//               
//          }

// 首先对url和text合并成一个新数组,数组长度为两者之和,然后对合并后的数组填充到bytes数组中
int len = url.length + text.length;
byte [] bytes = new byte[len];

System.arraycopy(url, 0, bytes, 0, url.length);
System.arraycopy(text, 0, bytes, url.length, text.length);

// 计算完整填充的短信条数以及填充后的余数部分
int msgs = bytes.length / (MAX_MSG_LENGTH - BASIC_LENGTH);
int remainder = bytes.length % (MAX_MSG_LENGTH - BASIC_LENGTH);

// 对能填充成为整数部分的短信内容填充
for (int i = 0 ; msgOrder <= msgs ; msgOrder++,i++) {
msgContent[msgOrder - 1] = buildMsgContent(bytes  
, i * (MAX_MSG_LENGTH - BASIC_LENGTH)
, (i+1)* (MAX_MSG_LENGTH - BASIC_LENGTH)
, bytes,0,0);
}

// 对余数部分内容填充
msgContent[msgOrder - 1] = buildMsgContent(bytes  
, bytes.length - remainder
, bytes.length
, bytes,0,0);

return msgContent;    /* 以URL和TEXT填充消息体后的余数,两部分余数在整数填充完后将额外填充成一条短信 */
int url_remainder = url.length % (MAX_MSG_LENGTH - BASIC_LENGTH);
int text_remainder = text.length % (MAX_MSG_LENGTH - BASIC_LENGTH);

/* 单以URL部分和TEXT部分分别填充短信将会填充的数量 */
int url_msg_count = url.length / (MAX_MSG_LENGTH - BASIC_LENGTH);
int text_msg_count = text.length / (MAX_MSG_LENGTH - BASIC_LENGTH);

boolean flag = true;
for ( ; msgOrder <= msgCount ; msgOrder++) {
/* 填充url部分*/
for (int pos = 0 ; msgOrder <= url_msg_count ; msgOrder++,pos++) {
msgContent[msgOrder - 1] = buildMsgContent(url
, pos * (MAX_MSG_LENGTH - BASIC_LENGTH)
, (pos + 1) * (MAX_MSG_LENGTH - BASIC_LENGTH)
, text,0,0);
}

/* 填充URL的余数部分和TEXT的开始一段 */
if (flag) {
msgContent[msgOrder - 1] = buildMsgContent(url
, url.length - url_remainder
, url.length
, text,0,text_remainder);
flag = false;
continue;       //填充完该条短信后面的代码暂时中止运行
}


/* 填充余下的TEXT部分 */
for (int pos = 0 ;msgOrder - url_msg_count - 1 <= text_msg_count; msgOrder++,pos++) {
msgContent[msgOrder - 1] = buildMsgContent(url ,0 ,0
, text
, text_remainder + pos * (MAX_MSG_LENGTH - BASIC_LENGTH)
, text_remainder + (pos + 1) * (MAX_MSG_LENGTH - BASIC_LENGTH));
}

}

return msgContent;
}

/**
* 构建拆分后的Msg_Content骨架,URL和TEXT指定的字节开始和结束添加到到骨架中
* @param url                   URL
* @param urlBegin              URL开始字节下标
* @param urlEnd                URL结束字节下标
* @param text                  文本说明字符串
* @param textBegin             文本开始字节下标
* @param TextEnd               文本结束字节下标
* @return                      一条拆分好的短消息
*/
private byte[] buildMsgContent(byte []url
, int urlBegin
, int urlEnd
, byte []text
, int textBegin
, int textEnd) {
//System.out.println("\nBASIC_LENGTH : " + BASIC_LENGTH);
//System.out.println("URL_LENGTH : " + (urlEnd - urlBegin));
//System.out.println("TEXT_LENGTH : " + (textEnd - textBegin));

    int size   = BASIC_LENGTH + (urlEnd - urlBegin) + (textEnd - textBegin);
byte []res = new byte[size];


System.arraycopy(WAP_PUSH_HEADER1, 0, res, 0, WAP_PUSH_HEADER1.length);
System.arraycopy(new byte[]{msgCount,msgOrder}, 0, res, WAP_PUSH_HEADER1.length, 2);

System.arraycopy(WAP_PUSH_HEADER2, 0
, res
, WAP_PUSH_HEADER1.length + 2
, WAP_PUSH_HEADER2.length);

System.arraycopy(WAP_PUSH_INDICATOR
, 0
, res
, WAP_PUSH_HEADER1.length + 2 + WAP_PUSH_HEADER2.length
, WAP_PUSH_INDICATOR.length);

System.arraycopy(url
, urlBegin
, res
, WAP_PUSH_HEADER1.length + 2 + WAP_PUSH_HEADER2.length + WAP_PUSH_INDICATOR.length
, urlEnd - urlBegin);

System.arraycopy(WAP_Push_TEXT_HEADER
, 0
, res
, WAP_PUSH_HEADER1.length + 2 + WAP_PUSH_HEADER2.length + WAP_PUSH_INDICATOR.length + (urlEnd - urlBegin)  
, WAP_Push_TEXT_HEADER.length);

System.arraycopy(text
, textBegin
, res
, WAP_PUSH_HEADER1.length + 2 + WAP_PUSH_HEADER2.length + WAP_PUSH_INDICATOR.length + (urlEnd - urlBegin) + WAP_Push_TEXT_HEADER.length
, textEnd - textBegin);

System.arraycopy(END_Of_WAP_PUSH
, 0
, res
, WAP_PUSH_HEADER1.length + 2 + WAP_PUSH_HEADER2.length + WAP_PUSH_INDICATOR.length + (urlEnd - urlBegin) + WAP_Push_TEXT_HEADER.length + (textEnd - textBegin)
, END_Of_WAP_PUSH.length);


return res;
}

/**
* 将内容UTF8编码为字节数组
* @param s            待编码字符
* @return             字节数组
*/
private byte []UTF8Encoding(String s) {
if (null != s) {
try {
return s.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}

return null;
}

/**
* byte数组转化为hex字符串,终端打印调试用
* @return
*/
public static String ByteToHexStr(byte []byteArr) {
StringBuffer strBuf = new StringBuffer(byteArr.length * 3);

for (int i = 0 ; i < byteArr.length ; i++) {
int l = byteArr[i] & 0x0F;
int h = (byteArr[i] & 0xF0) >> 4;

char ll = (char) (l > 9 ? 'a' + l - 10 : '0' + l);
char hh = (char) (h > 9 ? 'a' + h - 10 : '0' + h);

strBuf.append(hh);
strBuf.append(ll);
strBuf.append(" ");    
//     strBuf.append(Integer.toHexString(byteArr[i] & 0xFF));
//     strBuf.append(" ");
}

return strBuf.toString().toUpperCase();
}

private void realese() {
msgCount = 0x01;       
msgOrder = 0x01;
}

public void setUrl(String url) {
this.url = (true == url.contains("http://")? url.substring(7) : url);
}

public void setText(String text) {
this.text = text;
}  

}

============================================================================

/**
* 将SpWapPushMsg封装成一个SINGLETON模式的工具类。
*
* @version 1.0
* @author xmy
*
*/
public class SpWapPushMsgTool {
private static SpWapPushMsg instance;

/**
* 获取submit短消息的Msg_Content部分内容
* @param url           URL地址
* @param text          文本字符串
* @return              分包后的WAP PUSH消息的Msg_Content.</br>
* 其返回为一个二维数组,如下:</br>
* 返回结果[0] = 第一条拆分的短信</br>
* 返回结果[1] = 第二条拆分的短信</br>
* ...</br>
* 返回结果[n] = 第n+1条拆分的短信</br>
*/
public static byte [][]getMsgContent(String url,String text) {
if (null == instance) {
instance = new SpWapPushMsg(url,text);
} else {
instance.setText(text);
instance.setUrl(url);
}
return instance.getMsgContent();
}
}
===========================================================================

public class testSpWapPushMsg {
public static void main(String[] args) {
String url = "http://tieba.baidu.com/f?ct=&tn=&rn=&pn=&lm=&cm=0&kw=linux&rs2=0&sc=&un=&rs1=&rs5=&sn=&rs6=&myselectvalue=0&word=linux&tb=on";
String text = "神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长,神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长,神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长神秘激情地带,江湖儿女情长";

//   String url = "http://baike.baidu.com/view/391454.htm";
//   String text = "神秘激情地带";
//
//  
//   SpWapPushMsg swpm = new SpWapPushMsg(url,text);
//  
//   byte [][]content = swpm.getMsgContent();
//  
//   for (int i = 0 ; i < content.length ; i++) {
//    System.out.println("第" + i + "包:");
//    System.out.println(SpWapPushMsg.ByteToHexStr(content[i]));
//   }
//  
byte [][]content = SpWapPushMsgTool.getMsgContent(url,text);
for (int i = 0 ; i < content.length ; i++) {
System.out.println("第" + (i+1) + "包:");
System.out.println(SpWapPushMsg.ByteToHexStr(content[i]));
}

System.out.println("------------------------------------------");
url = "wap.sina.com.cn";
text = "好好学习";
byte [][]content_ = SpWapPushMsgTool.getMsgContent(url, text);

for (int i = 0 ; i < content_.length ; i++) {
System.out.println("第" + (i+1) + "包:");
System.out.println(SpWapPushMsg.ByteToHexStr(content_[i]));
}

}

}

测试结果:

第1包:
0B 05 04 0B 84 23 F0 00 03 03 06 01 29 06 06 03 AE 81 EA 8D CA 02 05 6A 00 45 C6 0C 03 74 69 65 62 61 2E 62 61 69 64 75 2E 63 6F 6D 2F 66 3F 63 74 3D 26 74 6E 3D 26 72 6E 3D 26 70 6E 3D 26 6C 6D 3D 26 63 6D 3D 30 26 6B 77 3D 6C 69 6E 75 78 26 72 73 32 3D 30 26 73 63 3D 26 75 6E 3D 26 72 73 31 3D 26 72 73 35 3D 26 73 6E 3D 26 72 73 36 3D 26 6D 79 73 65 6C 65 63 74 76 61 6C 75 65 3D 30 26 77 6F 72 64 00 01 03 00 01 01
第2包:
0B 05 04 0B 84 23 F0 00 03 03 06 02 29 06 06 03 AE 81 EA 8D CA 02 05 6A 00 45 C6 0C 03 3D 6C 69 6E 75 78 26 74 62 3D 6F 6E 00 01 03 E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 00 01 01
第3包:
0B 05 04 0B 84 23 F0 00 03 03 06 03 29 06 06 03 AE 81 EA 8D CA 02 05 6A 00 45 C6 0C 03 00 01 03 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF 2C E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C 00 01 01
第4包:
0B 05 04 0B 84 23 F0 00 03 03 06 04 29 06 06 03 AE 81 EA 8D CA 02 05 6A 00 45 C6 0C 03 00 01 03 E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 00 01 01
第5包:
0B 05 04 0B 84 23 F0 00 03 03 06 05 29 06 06 03 AE 81 EA 8D CA 02 05 6A 00 45 C6 0C 03 00 01 03 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF 2C E7 A5 9E E7 A7 98 00 01 01
第6包:
0B 05 04 0B 84 23 F0 00 03 03 06 06 29 06 06 03 AE 81 EA 8D CA 02 05 6A 00 45 C6 0C 03 00 01 03 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF E7 A5 9E E7 A7 98 E6 BF 80 E6 83 85 E5 9C B0 E5 B8 A6 2C E6 B1 9F E6 B9 96 E5 84 BF E5 A5 B3 E6 83 85 E9 95 BF 00 01 01
------------------------------------------
第1包:
0B 05 04 0B 84 23 F0 00 03 03 01 01 29 06 06 03 AE 81 EA 8D CA 02 05 6A 00 45 C6 0C 03 77 61 70 2E 73 69 6E 61 2E 63 6F 6D 2E 63 6E 00 01 03 E5 A5 BD E5 A5 BD E5 AD A6 E4 B9 A0 00 01 01

 

收工睡觉 回家打战地2去了

分享到:
评论

相关推荐

    wap push 源码

    9. **com.esendex.articles.wappush.csproj**: 这是一个项目文件,包含了整个WAP Push源码项目的配置信息,如编译设置、引用的库和其他依赖项。 10. **App.ico**: 这是项目的图标文件,用于在应用程序或系统中显示...

    WAPpush.zip_WAPpush_java wap_java wap push_push_wap push

    在这个“WAPpush.zip”压缩包中,包含的是一个名为“e3.war”的Web应用程序文件和一个名为“www.pudn.com.txt”的文本文件,很可能与WAP Push服务的实现有关。 Java是实现WAP Push服务的常见编程语言,因为Java平台...

    wap_push.rar_WAP push java_push_wap pu_wap push_wap源码

    压缩包中的"wap_push"文件很可能是Java实现的WAP Push服务端或客户端的源代码。源码可能包含以下几个关键部分: 1. **消息构建模块**:这部分代码负责根据WAP Push规范创建消息结构,包括设置推送消息的类型、目标...

    WapPush2.rar_PDUdecoding ja_WAP_Push_Java_push_wap push_wappush

    4. **Wappush_java**:这可能是指具体的Java库或框架,用于处理WAP Push服务的实现,包括创建、发送和处理WAP Push消息。 压缩包内的文件结构通常包含: - `.classpath`:这是Eclipse IDE的一个配置文件,记录了...

    WapPushSDK-2.0.rar

    WapPushSDK-2.0是一款专为JAVA开发者设计的工具包,它包含完整的源码和示例,旨在帮助开发者轻松实现WAP PUSH服务。WAP PUSH是移动通信领域中一种重要的数据推送技术,尤其在构建智能移动应用时,它能有效提高信息...

    Java手机与计算机互发彩信源码

    Java手机与计算机互发彩信源码是一种技术实现,它允许使用Java编程语言在移动设备(手机)和桌面计算机之间发送和接收多媒体信息,通常称为彩信或MMS(Multimedia Messaging Service)。这个源码包可能包含了一系列...

    网页版wap浏览器源代码

    为了优化移动网络环境下的性能,WAP浏览器可能会实现缓存机制,存储已访问过的页面,减少重复加载。此外,还有可能包括数据压缩技术,如WAP Push服务,用来减少数据传输量,提高浏览速度。 在安全性方面,由于WAP...

    基于Java的实例源码-手机与计算机互发彩信源码.zip

    在本资源中,我们主要探讨的是一个基于Java技术实现的手机与计算机互发彩信的实例源码。这个项目的核心是利用Java编程语言构建一个能够跨设备发送多媒体信息(彩信)的应用。Java作为一种广泛应用于服务器端开发和...

    安卓短信彩信相关相关-一个短信应用源码.rar

    彩信(MMS)的处理则更为复杂,通常涉及创建MMS消息对象,设置多媒体内容,然后通过WAP Push技术发送。Android系统中的Pdu类和MMSThread类等可能会在处理彩信时用到。在源码中,开发者可能已经实现了处理MMS的逻辑,...

    彩信网关程序(JAVA)

    2. **协议处理层**:负责解析和生成各种彩信相关的协议报文,如WAP Push、HTTP、MM7等。这一层需要对这些协议有深入理解,并能正确处理消息传输过程中的加密、压缩等问题。 3. **消息处理层**:处理彩信的存储、...

    smppapi-0.3.7.tar.gz

    描述中提到,这个Java实现的SMPP开发包包含了丰富的源码示例,可以帮助开发者理解和应用如何通过SMPP协议与短信网关建立连接,进而实现短信发送和WAP推送功能。这意味着,除了基本的短信服务外,该库还支持WAP Push...

    cmpp短信网关协议实现

    综上所述,"cmpp短信网关协议实现"涵盖了从理论到实践的多个方面,包括协议规范、Java实现、华为源码以及测试案例。通过深入理解和应用这些知识,开发者可以构建自己的短信服务系统,与中国移动的短信网关进行有效...

    Android MMS

    在Android源码中,MMS服务涉及到多个组件和模块,包括PDU解析、WAP Push协议处理、MMS存储以及用户界面等多个方面。下面将详细介绍这些关键知识点: 1. **PDU解析**:PDU(Protocol Data Unit)是MMS消息的数据格式...

    android4.0.3系统短信应用的源码

    在源码中,`MMSService`类扮演了核心角色,处理MMS的发送和接收,可能涉及`WAP Push`协议来传递MMS消息。 6. **UI组件**:源码中的`Activity`和`Fragment`类提供了短信应用的用户界面。例如,`...

    应用源码之Mms.zip

    Mms应用需要理解和处理WAP Push协议,这是MMS消息传递的基础。通过查看PduParser和PduComposer类,可以了解如何解析和构造PDU对象。 **4. UI设计**: Mms应用的UI设计遵循Android的Material Design指南。通过分析...

    j2memidp无线设备编程指南+源码

    附带的源码可能包含了书中示例的完整实现,读者可以下载这些代码,跟随书中的步骤进行实践,加深理解。这些源码通常涵盖各种功能,例如简单的游戏、实用工具应用、网络通信示例等。 总之,《j2me midp2.0无线设备...

    midp20-src-windows-i686.rar

    Midp2.0源码包含了大量的Java类库和API实现,这些源代码为开发者提供了深入理解平台工作原理的机会,有助于优化应用性能,解决兼容性问题,以及进行定制化开发。其中的关键组件包括: 1. **CLDC(Connected Limited...

    J2ME实例教程(附有PPT,源码和例子)

    8. **推送服务**: 理解如何使用Java Push Registry (JPR)和PushRegistry类,实现在移动设备上接收服务器端推送的消息。 9. **性能优化**: 针对J2ME应用的内存限制和性能问题,学习如何优化代码和资源,提高用户体验...

    MMS.rar_MMS

    2. **MMS协议实现**:源码中可能包含了对MMS协议的具体实现,包括HTTP和WAP-XPUSH协议的封装,用于传输MMS数据。 3. **多媒体处理**:为了支持不同类型的媒体文件,代码可能包含对图片、音频和视频的编码和解码模块...

    Mms.rar_MMS_mms.rar_mms发的彩信

    5. **MMS消息结构**:学习MMS消息的组成部分,如MIME类型、WAP Push消息格式等。 6. **调试与测试**:学习如何测试MMS应用程序,确保其在不同环境下正常运行。 7. **Android MMS开发**:如果此源码是针对Android...

Global site tag (gtag.js) - Google Analytics