范文网后台-模板-公共模板变量-头部模板-自定义右侧文字

?>?范文365bet体育在线网投_365bet怎么买球_365bet日博官网 / 正文

有一人利用手机发短信

coolhzh 2017-06-19 09:53:06 范文365bet体育在线网投_365bet怎么买球_365bet日博官网 0 评论
我不会发手机短信

  我不会发手机短信,千真万确!这主要是因为我小学没学好拼音,长大了又没有学好英语。到现在,见了拼音我认成英语,而见了英语我又当成了拼音,闹过不少笑话,加上我眼睛高度近视,性子又特别急,按来按去的在屁大的手机上找字让我很难受。于是就干脆拒绝发短信,让别人笑话去吧。

  我太太最不满意我不会发手机短信,据她讲我的手机话费高,但短信是免费的。每月都是白送几十条短信,而我却主动放弃。我对她说一切的节约归根到底是时间的节约,发短信太费时间了,这才让她闭上了那张唠叨嘴。我女儿也不满意我不会发短信,尤其是不满意我不看手机短信,因为在学校她不敢打电话,有事也只能发短信,特别是我总搞不清楚她们什么时候放学了还要加课,总是一放学就给她打电话,害得她只能把电话搞成“震动”。所以,我现在看短信,那是怕我家宝贝有什么事。
  我对门住得老杨是个“短信高手”。他可以和别人用短信聊天。据说他现在的老婆就是用短信聊来的。他常常笑话我,说我不懂浪漫,枉过此生,连手机短信也不会发,真是功能性文盲。文盲就文盲吧,只要不是流氓就行!他笑他的,我仍然不去鼓捣那浪费时间的短信。后来发生了一件事,让我这不会发短信的人扬眉吐气了一回。
  那天,老杨的老婆约我太太一起到银行取钱,说这两天统筹办的人要上门来收养老金,得把钱准备好。我知道她们上一次街要很长时间的。因为她们还要去美容院做美容,这是每个周末都要例行的公事。见她们出门,我马上招呼老杨来下棋,这是难得的下棋的黄金时间。谁知道双方正杀得难解难分时,我的手机提示有短信。一看是我太太来的,说自己忘记了银行卡的密码,让我给她发过去。我一看就来了气,发什么短信?打个电话要几毛钱?不理她!一会等不及了她自然会打电话来,这叫无声的抗议,嘿嘿!我刚下完一手棋,那老杨的手机也提示有短信,他一看就开始回。我说快下棋,别不务正业!他笑眯眯地说,别急,只要半分钟,我是短信专业人士,不会像你那样遇到短信就抓瞎。
  他很快就回了短信,真的只用了二十几秒。双方又开始了激战。下半盘棋我越下越差。因为我总想太太的电话怎么没来?我也试着打过去,但没人接,不知道她是不是想起来密码了?还是真生了气?我越想越走神,越走神下得越差,终于让老杨吃掉了我的大龙。正当我后悔莫及时,太太的电话来了。她是用美容院的电话打的。她说她们美容时,两个人上了面膜就躺在美容床上闭目养神,美容师进了内屋接电话,这时,小偷进来偷走了她们的包,现金、手机和银行卡全丢了。我说你们赶快报警啊,去银行挂失……我太太答应着,并让我告诉老杨一下。
  这会,我看到老杨已面如灰土,瘫在沙发上了。原来,他收到的短信和我的一样,是问银行卡密码的。这个短信专业人士不加思索就熟练地回复了,也就是说他把家的存款拱手送给了小偷。老杨半天没站起身来,临走嘟囔了一句,还是不会发短信好啊!

手机短信开发java

本文件是用记事本写的,目的为了能够下载后直接复制就能使用,不用朋友们再重新写了(但是样式有点不好看,就凑合着吧!)

目录解析:一共java类,APIClient.java(主要的类) 、MOItem.java(接受回执短信的实体类) 、RPTItem(接受回复短信实体类)

方法解析:

1:public int init(String dbIP, String dbUser, String dbPwd, String apiCode)//初始化、连接服务器(此方法无数据库名称,默认值采用的是:"im")

2:public int init(String dbIP, String dbUser, String dbPwd, String apiCode, String dbName)//初始化、连接服务器

属性解析:dbIP :移动代理服务器的IP地址

dbUser :接口创建时的接口登陆名称

dbPwd:接口创建时的接口登陆密码

apiCode:接口编码

dbName:数据库名称

3:public int sendSM(各个方法产生各不相同)//发送短信

部分属性解析:mobbile 短信发送的多个目的手机号码的数组

content 普通短信内容,最大支持2000个汉字的短信,超过2000时会被截断

smID 短信ID,0到99999999中的某一整数。确保唯一后可以用来找到对应的回执。

srcID 终端源地址,0到99999999中的某一整数。用来做源地址显示在终端上。确保唯一后可以用来找到对应的回复

url WAP Push短信的URL,为""或null时则发送常规短信,此时content为短信内容

sendTime 定时发送的时间格式为"yyyy-MM-dd HH-mm-ss",为null则为立即发送

msgFmt 短信编码格式

feeTerminalID 被计费的手机号码,默认为空

feeType 资费类别 默认为空

feeCode 资费代码 默认为空

feeUserType计费用户类别 默认为0

4:

/**

* 接受短信回复

* @param srcID 终端源地址,0到99999999中的某一整数。与发送MT短信的srcID对应,当srcID为-1时,表示此参数不起作用,只按amount取

* @param amount 要获取MO短信的条数,当其值为-1时,此参数不起作用,只按srcID取MO短信,当srcID和amount同时为-1时,表示获取所有的MO短信

* @return MOItem[] 所接受的短信的数组。null表示接受失败,数组长度为0表示无短信

*/

public MOItem[] receiveSM(long srcID,int amount) //方法不同参数不同

5:

/**

* 接受短信回执。如果短信不支持回执则发回值为null

* @param smID 短信ID,0到99999999中的某一整数。与发送MT短信的smID对应,当其值为-1时,表示此参数不起作用,只按amount取

* @param amount 要获取回执短信的条数,当其值为-1时,此参数不起作用,只按smID取回执短信,当smID和amount同时为-1时,表示获取所有的回执短信

* @return RPT

Item[] 所接受回执短信的数组。null表示接受失败,数组长度为0表示无短信

* @throws Exception

*/

public RPTItem[] receiveRPT(long smID,int amount) //方法不同参数不同

一下为java类

APIClient.java:

package com.jasson.im.api;

import java.io.UnsupportedEncodingException;

import java.sql.*;

import java.text.DateFormat;

import java.util.ArrayList;

import java.util.Date;

// Referenced classes of package com.jasson.im.api:

// MOItem, RPTItem

public class APIClient

{

public static final int IMAPI_SUCC = 0;

public static final int IMAPI_CONN_ERR = -1;

public static final int IMAPI_CONN_CLOSE_ERR = -2;

public static final int IMAPI_INS_ERR = -3;

public static final int IMAPI_DEL_ERR = -4;

public static final int IMAPI_QUERY_ERR = -5;

public static final int IMAPI_DATA_ERR = -6;

public static final int IMAPI_API_ERR = -7;

public static final int IMAPI_DATA_TOOLONG = -8;

public static final int IMAPI_INIT_ERR = -9;

public static final int IMAPI_IFSTATUS_INVALID = -10;

public static final int IMAPI_GATEWAY_CONN_ERR = -11;

public static final int SM_TYPE_NORMAL = 0;

public static final int SM_TYPE_PDU = 2;

private String dbUser;

private String dbPwd;

private String apiCode_;

private String dbUrl;

private Connection conn;

public APIClient()

{

dbUser = null;

dbPwd = null;

apiCode_ = null;

dbUrl = null;

conn = null;

}

public int init(String dbIP, String dbUser, String dbPwd, String apiCode)

{

release();

this.dbUser = dbUser;

this.dbPwd = dbPwd;

apiCode_ = apiCode;

dbUrl = "jdbc:mysql://" + dbIP + "/im";

return testConnect();

}

public int init(String dbIP, String dbUser, String dbPwd, String apiCode, String dbName)

{

release();

this.dbUser = dbUser;

this.dbPwd = dbPwd;

apiCode_ = apiCode;

dbUrl = "jdbc:mysql://" + dbIP + "/" + dbName;

return testConnect();

}

public int sendSM(String mobile, String content, long smID)

{

return sendSM(new String[] {

mobile

}, content, smID, smID);

}

public int sendSM(String mobiles[], String content, long smID)

{

return sendSM(mobiles, content, smID, smID);

}

public int sendSM(String mobiles[], String content, long smID, long srcID)

{

return sendSM(mobiles, content, smID, srcID, "");

}

public int sendSM(String mobiles[], String content, String sendTime, long smID, long srcID)

{

return sendSM(mobiles, content, smID, srcID, "", sendTime);

}

public int sendSM(String mobile, String content, long smID, String url)

{

return sendSM(new String[] {

mobile

}, content, smID, url);

}

public int sendSM(String mobiles[], String content, long smID, String url)

{

return sendSM(mobiles, content, smID, smID, url);

}

public int sendSM(String mobiles[], String content, long smID, long srcID, String url)

{

return sendSM(mobiles, content, sm

ID, srcID, url, null);

}

public int sendSM(String mobiles[], String content, long smID, long srcID, String url,

String sendTime)

{

return sendSmAndPdu(mobiles, content, smID, srcID, url, sendTime, 0, 0, 0, "", "", "", 0, 0);

}

public int sendPDU(String mobiles[], byte content[], long smID, int msgFmt, int tpPID, int tpUdhi,

String feeTerminalID, String feeType, String feeCode, int feeUserType)

{

return sendPDU(mobiles, content, smID, smID, msgFmt, tpPID, tpUdhi, feeTerminalID, feeType, feeCode, feeUserType);

}

public int sendPDU(String mobiles[], byte content[], long smID, long srcID, int msgFmt,

int tpPID, int tpUdhi, String feeTerminalID, String feeType, String feeCode, int feeUserType)

{

String contentStr = binary2Hex(content);

return sendSmAndPdu(mobiles, contentStr, smID, srcID, "", null, msgFmt, tpPID, tpUdhi, feeTerminalID, feeType, feeCode, feeUserType, 2);

}

private int sendSmAndPdu(String mobiles[], String content, long smID, long srcID, String url,

String sendTime, int msgFmt, int tpPID, int tpUdhi, String feeTerminalID, String feeType, String feeCode,

int feeUserType, int smType)

{

if (dbUrl == null)

return -9;

if (mobiles == null || mobiles.length == 0)

return -6;

StringBuffer mobileBuf = new StringBuffer();

for (int i = 0; i < mobiles.length; i++)

mobileBuf.append(",").append(mobiles[i]);

if (mobileBuf.length() > 1)

mobileBuf.delete(0, 1);

else

return -6;

String contenttmp = replaceSpecilAlhpa(content);

if (contenttmp.length() < 1)

return -6;

if (contenttmp.length() > 2000)

contenttmp = contenttmp.substring(0, 2000);

if (!checkSmID(smID) || !checkSmID(srcID))

return -6;

if (url != null && url.length() > 0)

{

if (url.length() > 85)

return -8;

if ((url + contenttmp).length() > 120)

return -8;

}

int ret = checkGatConn();

if (ret != 1)

return ret;

if (sendTime != null && !"".equals(sendTime) && isDateTime(sendTime) == null)

return -6;

if (2 == smType)

{

feeTerminalID = nullConvert(feeTerminalID);

feeType = nullConvert(feeType);

feeCode = nullConvert(feeCode);

}

return mTInsert(mobileBuf.toString(), contenttmp, smID, srcID, url, sendTime, msgFmt, tpPID, tpUdhi, feeTerminalID, feeType, feeCode, feeUserType, smType);

}

public MOItem[] receiveSM()

{

Statement st;

String getMoSql;

String delMoSql;

ArrayList moList;

StringBuffer snBuf;

if (dbUrl == null)

return null;

if (conn == null)

{

int state = initConnect();

if (state != 0)

return null;

}

st = null;

ResultSet rs = null;

getMoSql = "select * from api_mo_" + apiCode_ + " limit 5000";

delMoSql = "delete from api_mo_" + apiCode_ + " where AUTO_SN in (";

moList = new ArrayList();

snBuf = new StringBuffer("-1");

try

{

st = conn.createStatement();

ResultSet rs;

MOItem mItemtmp;

for (rs = st.executeQuery(get

MoSql); rs.next(); moList.add(mItemtmp))

{

mItemtmp = new MOItem();

mItemtmp.setSmID(rs.getLong("SM_ID"));

mItemtmp.setContent(iso2gbk(rs.getString("CONTENT")));

mItemtmp.setMobile(rs.getString("MOBILE"));

mItemtmp.setMoTime(rs.getString("MO_TIME"));

mItemtmp.setMsgFmt(rs.getInt("MSG_FMT"));

snBuf.append(",").append(rs.getString("AUTO_SN"));

}

rs.close();

st.executeUpdate(delMoSql + snBuf.toString() + ")");

break MISSING_BLOCK_LABEL_307;

}

catch (Exception e)

{

releaseConn();

}

closeStatment(st);

return null;

Exception exception;

exception;

closeStatment(st);

throw exception;

closeStatment(st);

MOItem moItem[] = new MOItem[0];

return (MOItem[])moList.toArray(moItem);

}

public MOItem[] receiveSM(long srcID, int amount)

{

Statement st;

String getMoSql;

String delMoSql;

ArrayList moList;

StringBuffer snBuf;

if (dbUrl == null)

return null;

if (conn == null)

{

int state = initConnect();

if (state != 0)

return null;

}

st = null;

ResultSet rs = null;

getMoSql = "select * from api_mo_" + apiCode_;

if (srcID != -1L)

getMoSql = getMoSql + " where SM_ID=" + srcID;

if (amount != -1)

getMoSql = getMoSql + " limit " + amount;

delMoSql = "delete from api_mo_" + apiCode_ + " where AUTO_SN in (";

moList = new ArrayList();

snBuf = new StringBuffer("-1");

try

{

st = conn.createStatement();

ResultSet rs;

MOItem mItemtmp;

for (rs = st.executeQuery(getMoSql); rs.next(); moList.add(mItemtmp))

{

mItemtmp = new MOItem();

mItemtmp.setSmID(rs.getLong("SM_ID"));

mItemtmp.setContent(iso2gbk(rs.getString("CONTENT")));

mItemtmp.setMobile(rs.getString("MOBILE"));

mItemtmp.setMoTime(rs.getString("MO_TIME"));

mItemtmp.setMsgFmt(rs.getInt("MSG_FMT"));

snBuf.append(",").append(rs.getString("AUTO_SN"));

}

rs.close();

st.executeUpdate(delMoSql + snBuf.toString() + ")");

break MISSING_BLOCK_LABEL_389;

}

catch (Exception e)

{

releaseConn();

}

closeStatment(st);

return null;

Exception exception;

exception;

closeStatment(st);

throw exception;

closeStatment(st);

MOItem moItem[] = new MOItem[0];

return (MOItem[])moList.toArray(moItem);

}

public RPTItem[] receiveRPT()

{

Statement st;

String getRPTSql;

String delRPTSql;

ArrayList rptList;

StringBuffer snBuf;

if (dbUrl == null)

return null;

ResultSet rs = null;

st = null;

if (conn == null)

{

int state = initConnect();

if (state != 0)

return null;

}

getRPTSql = "select * from api_rpt_" + apiCode_ + " limit 5000";

delRPTSql = "delete from api_rpt_" + apiCode_ + " where AUTO_SN in (";

RPTItem rptItem[] = (RPTItem[])null;

rptList = new ArrayList();

snBuf = new StringBuffer("-1");

try

{

st = conn.createStatement();

ResultSet rs;

RPTItem rptItemtmp;

for (

rs = st.executeQuery(getRPTSql); rs.next(); rptList.add(rptItemtmp))

{

rptItemtmp = new RPTItem();

rptItemtmp.setSmID(rs.getLong("SM_ID"));

rptItemtmp.setCode(rs.getInt("RPT_CODE"));

rptItemtmp.setMobile(rs.getString("MOBILE"));

rptItemtmp.setDesc(iso2gbk(rs.getString("RPT_DESC")));

rptItemtmp.setRptTime(rs.getString("RPT_TIME"));

snBuf.append(",").append(rs.getString("AUTO_SN"));

}

rs.close();

st.executeUpdate(delRPTSql + snBuf.toString() + ")");

break MISSING_BLOCK_LABEL_322;

}

catch (SQLException e)

{

releaseConn();

}

catch (Exception ex) { }

closeStatment(st);

return null;

Exception exception;

exception;

closeStatment(st);

throw exception;

closeStatment(st);

RPTItem rptItem[] = new RPTItem[0];

return (RPTItem[])rptList.toArray(rptItem);

}

public RPTItem[] receiveRPT(long smID, int amount)

{

Statement st;

String getRPTSql;

String delRPTSql;

ArrayList rptList;

StringBuffer snBuf;

if (dbUrl == null)

return null;

ResultSet rs = null;

st = null;

if (conn == null)

{

int state = initConnect();

if (state != 0)

return null;

}

getRPTSql = "select * from api_rpt_" + apiCode_;

if (smID != -1L)

getRPTSql = getRPTSql + " where SM_ID=" + smID;

if (amount != -1)

getRPTSql = getRPTSql + " limit " + amount;

delRPTSql = "delete from api_rpt_" + apiCode_ + " where AUTO_SN in (";

RPTItem rptItem[] = (RPTItem[])null;

rptList = new ArrayList();

snBuf = new StringBuffer("-1");

st = conn.createStatement();

ResultSet rs;

RPTItem rptItemtmp;

for (rs = st.executeQuery(getRPTSql); rs.next(); rptList.add(rptItemtmp))

{

rptItemtmp = new RPTItem();

rptItemtmp.setSmID(rs.getLong("SM_ID"));

rptItemtmp.setCode(rs.getInt("RPT_CODE"));

rptItemtmp.setMobile(rs.getString("MOBILE"));

rptItemtmp.setDesc(iso2gbk(rs.getString("RPT_DESC")));

rptItemtmp.setRptTime(rs.getString("RPT_TIME"));

snBuf.append(",").append(rs.getString("AUTO_SN"));

}

rs.close();

st.executeUpdate(delRPTSql + snBuf.toString() + ")");

break MISSING_BLOCK_LABEL_441;

SQLException e;

e;

RPTItem arptitem[];

releaseConn();

if (e.getErrorCode() != 1146 && e.getErrorCode() != 1142)

break MISSING_BLOCK_LABEL_417;

arptitem = new RPTItem[0];

closeStatment(st);

return arptitem;

_L2:

closeStatment(st);

return null;

Exception ex;

ex;

if (true) goto _L2; else goto _L1

_L1:

Exception exception;

exception;

closeStatment(st);

throw exception;

closeStatment(st);

RPTItem rptItem[] = new RPTItem[0];

return (RPTItem[])rptList.toArray(rptItem);

}

public void release()

{

dbUser = null;

dbPwd = null;

apiCode_ = null;

dbUrl = null;

releaseConn();

}

private int testConnect()

{

Statement st;

st = null;

ResultSet rs = null;

try

{

if (conn != null)

releaseConn();

getConn();

st = conn.createStatement();

}

catch (ClassNotFoundException e)

{

e.printStackTrace();

return -1;

}

catch (SQLException e)

{

e.printStackTrace();

return -1;

}

try

{

String tableName = "api_mo_" + apiCode_;

ResultSet rs = st.executeQuery("select * from " + tableName + " limit 1");

rs.close();

}

catch (SQLException sqlexception)

{

try

{

st.close();

}

catch (Exception exception1) { }

return -7;

}

break MISSING_BLOCK_LABEL_137;

Exception exception;

exception;

try

{

st.close();

}

catch (Exception exception2) { }

throw exception;

try

{

st.close();

}

catch (Exception exception3) { }

return 0;

}

private int initConnect()

{

try

{

getConn();

}

catch (Exception e)

{

e.printStackTrace();

return -1;

}

return 0;

}

private void getConn()

throws ClassNotFoundException, SQLException

{

Class.forName("org.gjt.mm.mysql.Driver");

conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);

}

private void releaseConn()

{

if (conn != null)

try

{

conn.close();

}

catch (SQLException sqlexception) { }

conn = null;

}

private int mTInsert(String mobile, String content, long smID, long srcID, String url,

String sendTime, int msgFmt, int tpPID, int tpUdhi, String feeTerminalID, String feeType, String feeCode,

int feeUserType, int smType)

{

String sendMTSql;

Statement st;

if (conn == null)

{

int state = initConnect();

if (state != 0)

return -1;

}

sendMTSql = "";

sendMTSql = "insert into api_mt_" + apiCode_ + " (SM_ID,SRC_ID,MOBILES,CONTENT";

if (url != null && url.trim().length() != 0)

sendMTSql = sendMTSql + ",IS_WAP,URL";

sendMTSql = sendMTSql + ",SEND_TIME,MSG_FMT,TP_PID,TP_UDHI,FEE_TERMINAL_ID,FEE_TYPE,FEE_CODE,FEE_USER_TYPE,SM_TYPE) values (" + smID + "," + srcID + "," + mobile + "," + content + ", ";

if (url != null && url.trim().length() != 0)

sendMTSql = sendMTSql + "1," + url + ",";

if (sendTime == null || "".equals(sendTime))

sendMTSql = sendMTSql + " null ,";

else

sendMTSql = sendMTSql + "" + sendTime + ",";

sendMTSql = sendMTSql + msgFmt + "," + tpPID + "," + tpUdhi + "," + feeTerminalID + "," + feeType + "," + feeCode + "," + feeUserType + "," + smType + ")";

st = null;

try

{

st = conn.createStatement();

st.executeUpdate(gb2Iso(sendMTSql));

break MISSING_BLOCK_LABEL_438;

}

catch (Exception e)

{

releaseConn();

}

closeStatment(st);

return -3;

Exception exception;

exception;

closeStatment(st);

throw exception;

closeStatment(st);

return 0;

}

private void closeStatment(Statement st)

{

try

{

st.close();

}

catch (Exception exception) { }

}

private String replaceSpecilAlhpa(String content)

{

if (content == null || content.trim().length() == 0)

return

"";

String spec_char = "";

String retStr = "";

for (int i = 0; i < content.length(); i++)

{

if (spec_char.indexOf(content.charAt(i)) >= 0)

retStr = retStr + "";

retStr = retStr + content.charAt(i);

}

return retStr;

}

private boolean checkSmID(long smID)

{

return smID >= 0L && smID <= 0x5f5e0ffL;

}

private String gb2Iso(String str)

{

if (str == null)

return "";

String temp = "";

try

{

byte buf[] = str.trim().getBytes("GBK");

temp = new String(buf, "iso8859-1");

}

catch (UnsupportedEncodingException e)

{

temp = str;

}

return temp;

}

private int checkGatConn()

{

int ret;

Statement st;

String sql;

ret = 1;

ResultSet rs = null;

st = null;

if (conn == null)

initConnect();

sql = "select if_status,conn_succ_status from tbl_api_info as api where api.if_code=" + apiCode_ + " limit 1";

try

{

st = conn.createStatement();

ResultSet rs;

for (rs = st.executeQuery(sql); rs.next();)

{

if ("2".equals(rs.getString("if_status")))

ret = -10;

if ("0".equals(rs.getString("conn_succ_status")))

ret = -11;

}

rs.close();

}

catch (SQLException sqlexception)

{

try

{

st.close();

}

catch (Exception exception1) { }

return -7;

}

break MISSING_BLOCK_LABEL_160;

Exception exception;

exception;

try

{

st.close();

}

catch (Exception exception2) { }

throw exception;

try

{

st.close();

}

catch (Exception exception3) { }

return ret;

}

public static String isDateTime(String str)

{

Date returnDate;

DateFormat df;

if (str == null)

return null;

if (str.length() != 19)

return null;

int temp = Integer.parseInt(str.substring(5, 7));

if (12 < temp || temp < 1)

return null;

temp = Integer.parseInt(str.substring(8, 10));

if (31 < temp || temp < 1)

return null;

temp = Integer.parseInt(str.substring(11, 13));

if (23 < temp || temp < 0)

return null;

temp = Integer.parseInt(str.substring(14, 16));

if (59 < temp || temp < 0)

return null;

temp = Integer.parseInt(str.substring(17, 19));

if (59 < temp || temp < 0)

return null;

returnDate = null;

df = DateFormat.getDateInstance();

returnDate = df.parse(str);

return returnDate.toString();

Exception e;

e;

return null;

}

private String binary2Hex(byte bys[])

{

if (bys == null || bys.length < 1)

return null;

StringBuffer sb = new StringBuffer(100);

for (int i = 0; i < bys.length; i++)

if (bys[i] >= 16)

sb.append(Integer.toHexString(bys[i]));

else

if (bys[i] >= 0)

sb.append("0" + Integer.toHexString(bys[i]));

else

sb.append(Integer.toHexString(bys[i]).substring(6, 8));

return sb.toString();

}

private String iso2gbk(String str)

{

if (str == null)

return "";

String temp = "";

try

{

byte buf[] = str.trim().getByt

es("iso8859-1");

temp = new String(buf, "GBK");

}

catch (UnsupportedEncodingException e)

{

temp = str;

}

return temp;

}

private String nullConvert(String str)

{

if (str == null)

str = "";

return str;

}

}

MOItem.java 类

package com.jasson.im.api;

public class MOItem

{

private String mobile_;

private long smID_;

private String content_;

private String moTime;

private int msgFmt;

public MOItem()

{

}

public String getContent()

{

return content_;

}

public void setContent(String content)

{

content_ = content;

}

public String getMobile()

{

return mobile_;

}

public void setMobile(String mobile)

{

mobile_ = mobile;

}

public long getSmID()

{

return smID_;

}

public void setSmID(long smID)

{

smID_ = smID;

}

public String getMoTime()

{

return moTime;

}

public void setMoTime(String moTime)

{

this.moTime = moTime;

}

public int getMsgFmt()

{

return msgFmt;

}

public void setMsgFmt(int msgFmt)

{

this.msgFmt = msgFmt;

}

}

RPTItem.java 类

package com.jasson.im.api;

public class RPTItem

{

private String mobile_;

private long smID_;

private int code_;

private String desc_;

private String rptTime;

public RPTItem()

{

}

public int getCode()

{

return code_;

}

public void setCode(int code)

{

code_ = code;

}

public String getDesc()

{

return desc_;

}

public void setDesc(String desc)

{

desc_ = desc;

}

public String getMobile()

{

return mobile_;

}

public void setMobile(String mobile)

{

mobile_ = mobile;

}

public long getSmID()

{

return smID_;

}

public void setSmID(long smID)

{

smID_ = smID;

}

public String getRptTime()

{

return rptTime;

}

public void setRptTime(String rptTime)

{

this.rptTime = rptTime;

}

}

以上有不懂得地方点击这个网址:下载具体的API文档:http://wenku.baidu.com/view/f955da1aa8114431b90dd85f.html

手机短信的收发

?

… …目 日姗

旅胜公 臼翻 目〔 盯 翻

本 文 介 绍 了通过 编 码 与 解码 实 现 手机 短 信 收 发 的 功 能

关键 词

串口

,

手机

,

!? #

,

编码

,

解码

前言

最近 在制 作 一 个美容管 理 软件 的时 候

,

客户手机

客户 提 出要 增 加 短

信发 送 的功 能

此 项功 能

在 查 阅了大 量 的 资 料后

,

终 于 在软件 中集 成了

手机

?

目前在 电 脑 上 实 现 手 机 短 信发送 的 方 法主要 有 三 种

通 过 电信 部 门提 供 的 移动 网关 发 送短 消息 法 不 需 要 附 加 的硬 件

,

,

使用 该 方

但是 需 要 到 电信部 门 申请 网关

使 用起 来 相对 较方便

,

这 种方

计算机 机

法 适 合大 型 通 信开 发

%

,

但 费用较 高

,

通 过 一 些 网 站 上 提 供 的 短 信 发送 功能来 实 现

比如新

,

圈 这样 来看

,

工 作 原理

?

浪网

,

网易都 提 供 这 方 面 的服 务

,

这种 方 法 实现起来 较 简单

,

问题 就集 中 在两 个方 面

, 。

一 是如 何 实 现 手 机 与

,

所 需 资源 较 少 的

但 是对 于 网站 的 依赖 性 太 强

? ()

) ?? + )

对 网络 的依赖

,

电脑 之 间 的通 信

二 是如何 对要 发 送的 信息 进 行 编码

以 及如

同样 无 法 避 免

&

何对 手 机 发 送 过 来 的 信息进 行 解码

向 手机 发送 中 文短 消息

在 电脑 上 通 过

利用 申 口 实 现 与手 机 之间的通 信

在安 装 了正确 的手 机 驱动之 后

?+ )

,

,

这是 目前 比 较适 合于 小项 目开 发 的 一种 方法

所 需 硬 件包 括 一

计 算 机会 识 别手 机 为 ) ?

1

款 手机 用 于 提 供 线适 配 器

? ()

)?? +)

,

,

以及 相 应 的数据 线 或是 红 外

如图

%

所示

该 方 法 编码 简 单

,

只 需对 , ? 指 令 和 串 口 编 程 比较

,

熟悉 就 可 以 实 现

而 且 对硬 件需 求 不 高

并能 自动收 发 短 消

,

另外

? ()

,

也 有 一 些 公 司提供 了短 信群 发 设 备

以 及配 套 的短

,

信群 发 软件

利用

其原 理 就 和手 机通 过 连接 线 电脑连 接 类 似

功能

都是

)? ? + )

,

用 它也 可 以 在 软 件 中集 成相 应 的 短

信 发送功 能 备

但其 缺点 是需要 另外 花 费 几百 块钱 来购 买 这些 设

,

对 于 小 型 的应 用 来说 发 送短 信

,

使用 手机 通 过 数 据线 与 电脑 连接来

是 最 为 实用

经 济的 选 择

实现 原 理

利 用这种 方式来 发送短 信 .如 图

所示 /

,

,

基 本原 理就 是

圈 .其中

)2

%

手 机 驱 动 安装成功

先将 要 发 送 的信 息

机的端口 机

0

,

手 机 号 等信 息进行 编码

)

,

然 后 发 向连 接 手

2 3

,

4

# (5 ) 2 4 7 6

是我的手 机

8

: 9

,

下 面的是

手 机 进 行 识 别后 通 过 ? (

,

网 络 发送 至 相 应 的 手

笔记 本内 置 的 )2 ?

由此 可 见

?() ) ?? + ) ,?

,

+)

/

,

接 收 短 信 和 其过程 刚 好相反

,

? ()

可 以 通 过 串 口 来 实 现与 手机 的 通 信

而 作为

网络 将客户 发来的 信息

它是能够 支持 标 准 的

,?

指 令的

,

所 以可 以 通

通 信 时所 常

发送 到连 接 电脑 的手 机 上

到计 算 机 的 串 口

手 机通 过数 据线 将 相应的 编码 传送

指 令来 实 现 与之 的通 信 指 令 如表

?()

)? ?+ )

计算 机 将 它进行 解 码

用的

,?

所示

超级终 端

,

可 以 测 试 这些

笋 … …

实用第一 智慧 密集

刃 指令 令

常用 的

!

指令

表,

?. /

编码 组 成

长度 度

功能 能 月除 ?

%

可?

?

# 峨刃 刃 & 以刁 ‘

卡内存 的短 消息 后 摇附 如

,

号 出 的消息 拍号

, “

,

, “

意义

短伯息 中心 地址 长度

, ,

Β

位? 六进 侧效 + 9 字节 Ν 位十六进 倒数

?

。 。

列出 日 % 卡中的短悄 息 后 附

(

?

)

了 为未读

?

为 已读

?

为待 发

灯 灯

?

, “

罗 为 已发

, “

犷 为全 部的

(

Β

姐信息 中心 号码类 型

短僧息中 心 号码 码 文件 头字节 节

# 峨讯 讯

器 # %+器

读 姐俏息 后孺 附如

, ,

号 仍 的消息 偏号

#

#

的长度 将 由

中 的敬 据决 决

?

发 送短 俏息 后偏附相应格 式的 信息编 码

且 示新 收到 的短消息 息

?

侧班

6 ?

,

位十六进 翻数 位十六 进制橄 位 十六 进制致

信息类型

被叫号码 长度 度 被叫号码 类型 被叫号码

, ,

,

! 指令

要 将这 些 指 令 送往 端 口

,

可 以 借助 串 口 通 信控件

,

通常采

Η Ι

2

位十六 进创橄 橄 中的橄拥决定

取位同 几

用 使用 控 件 是

% 0# 1% %

,

0 ?#1 % %

尽 管 通过

2 ? 函 数可 以

长度 由 ?

,

实 现更 多 的功能 法 无 疑 是最好 的

但在

简易够 用

的原则 下

,

采用 控 件 的方

的需 要 以

#

3

协议标识 效据 编妈 方案 有 期 效期

用户数据长度 度

位十六 进制 致

面 0?#1 % % 又 要 比

% 0 #1 % %

?

Κ Λ %

, , ,

位十六 进倒数 位十 六进制 敬

4 5 6 7 的方 式来得 更 为 简 单

它具 有 丰 富 的 与串 口 通 信 密切相

,

关 的 属 性及 事 件

,

,

提供 了对 串 口 的 各 种 操作

而 且 0? 1 %% #

位十六 进制 橄

支持 多线 程 更 为简 单实 用 控件

,

并且

,

? 0 #1 % % 是 开 放 源 代码的

用 户数据 据

在网站

(

: . 9 ;<

8

盒子

上有 下 载

其长 度由 Λ 中 的数据决 定 定采用 /& 女

偏妈

?

中设

,

编 码 与 解码

,

表?

手 机发 出

?. /

串 的 编码 信 息

说明 明 共Ρ 个八 位字节 + 包括 叭 Ν

为实 现 发 送 和 接 收 短 信 息

,

使 用 的是

?. /

%8 =

8

的编

分段

这 种 编 码 可 以 使 用 任何 字 符 集

,

?. /

串表 面 上 是 一 串

码 十进 制数

,

含义 义 短 值息服 务 中心 地址 信息

0# 9 码 9

Α

>

?

?

这 些 数字 和 字母 组

Β #.

的长度 度

贝 0被 弧

∴ 地址 格 式+ 双荆 尹 日 Ν

它 们是

位 字节 的十 六 进 制 数

,

,

或者

用 国际格式号 码+ 在份 面加

. ?

/

申不 仅 包含 可 显 示 的 消息本 身 还 包含 很 多其 他信息 如

目标 号码

/

,

?

Ν 决成 价

短 信息 服务 中心 号码

回 复号 码

编 码 方式 和 服务

已 ? 佣匀 仍仍 几

0帐 兑 地址 址

肠 日盯功口山 , 补 ‘ ?

教个

9

时间等 发 送 和 接 收 的 ? .

另外

Α

8 Γ

,

串 结 构是 不 完 全相 同的

?

基本参橄 恤

% ,到、即 Ν

发送 呀 一 Ξ 用相对 格式 式 ?

,

?. /

模式 收发短 信 可 以 使用

种编 码

?

Χ

< Δ

Ε

Α

,

3

消息羞准 值+ 开 一 袱Ν

目标地址 戮字个数 数

阅 Ν 目标班 格式+双荆 了 刁 山Λ

>

Δ

编码

Χ

Δ

编码 用 于发 送 普 通 的

,

0# 99

字符

3

共 日 个 十进 侧盆+ 不 包 括

? 和 ?Ν ’

< Δ

Ε

编 码 通 常用 于 发 送 数据消 息

/ #0 Φ

编 码用 于 发 送

/4 <

=8

字符

,

用 日际格式号码+ 在前 面加

?

一 般的

. ?

/

编码 由

Β # .

6 ? Η Ι

Ν

,

? Κ Λ % 十三

已 ? 班 拓 犯必 四

目标地址 +冲

以Ν

日刃 Ν

肠 日峨刃臼旧

’ 补 ? 姿 成倪 倪

项组 成

基 意 义 如表 , 所 示

欲个

下 面 先用 两 个实 际 的 例 子 说 明

. ?

/

串 的结 构 和 编 排 方

?

?

协议 标识 +仆

芝 是普 通 峨 助 类盛 点 州 点

,

方式

用户 信息编 妈 方式+ ,

刃0 7

3

妞一

恤 偏码

,

信息的 编 码

,

?

短 信 息 服 务 中心 号 码是

? ΑΜ Π ,ΑΟ Π?

,

Ν

Α Μ 9?Α > , Ο >Ο> Ν + Ν +

对方 号码 是

ΜΑ ? Α

, ,

消息 内 容 是

>Α ? ΜΑ ?

有效期+ 冲 钾Ν

用户 信意 长度+ ,

刀已 幻僻

,

分钟

天 打球 吗 Θ

> Ο > Ο ?1

从手 机 发 出的 ?. / 串 是

> Α ,>

/以 ‘Ν

实 际长度 业 个字节 节

(

> > 1. ?

Π Μ Α , Π Ο ? Ρ 《Ν > Α > > 1 # Π 6 # 7

,

棍# ,

田醉

Χ

用户 值息 +钾

. ? ΛΝ

今天 打球 吗广

Ο ? , ? Μ, Ο? ΧΠ > ? Ο Π

Χ ?? 2 ?

其 含 义 如 表 ? 所示

Σ

?

,

2?

在本 程 序 中

核 心 代 码如 下

Ε 4 ΥΤ 4 #

,

实 现编 码 的 函数 是 ! 8

Ε! Γ

= ?

Τ

,

三 个 参数 的

,

含 义 分别 为 短消 息 中 心 号码

目标 号码

要发 送 的信 息 内容

Ω ?;

Δ 闪<4

Ω

# Λ

8 4

8 Ε

Λ% Ω Ρ

,

ΛΒ 1 Ζ ? 0 Ε ?<4 Ρ [ =

0 Ε ?<4 Ρ Ν ? 0 ?< 4 Ρ 二 Ε

? ? ! ?

Γ

Ω?

Ω

(

8 !

Ε Σ

[

1 !

?= Τ + Ω # 8

4 Ε8 ? ,

4 Γ

8

,

Ω

%Ω Ρ

?

?? Ε 众? +

8 #4Ε

?;Γ

8 ?? )

?

?

( Λ# 8 4 Ε 8 ?

? 叭= =

Ω 48

? 二

8 Λ# 8 4 Ε

? ? Ω

4 4 ? Γ 8 Ε # Ξ ? ΛΦ ] + Ω # Ε Ν [ 8 8 ⊥ , , 8 8 Λ 4 Ρ Ε; + Ω # 8 4 Ε 7

(

,

?

Ν = Ξ Φ 】[ < _

# 8 4 Ε8 ?[

? 二

Ε #Γ 4 Ξ 8 ? ΛΦ ] + 0 ?; Γ 4

8

Ν[

Ψ Ξ

= = 几 Ω Β Γ Ζ ? 0 Ε ? <4 Ρ =

Ω

% ΩΡ

? 二 ΩΕ

Η 3 ?

Ω Δ Φ / 4 ? Γ =8 《 % Ω Ρ Ν [ #

娜 浦器

污、‘

月晦

? 、 ;

日 暇 翻 盯 一 翻 姗 份 蕊 <2朋朋心 〔

=7 36 3 > . ?) 6 ?

6

Ν

,

?

?

Α % ΒΧ

,

6 ?< Δ ? 3 Ε 《 ) 6 ? /4 Φ Β Η/0 Γ

《十 / 7 2 α Φ 4 0

52

3>

3

? ?

Η: : : ? Κ Λ Μ

Ι

Ν 6

!Ε 2 Δ <

Ν

:::Μ::

Ν

七) 6 ?

4二

%

?

6) 6? 0

40

=7 3 6 Ο < 6Π

.

?5 2 4

,

Α % Β?

Ν

,

? 【

Ν

? 3 Ε .6

Ν Ν

52

Ι 4 /4

?

Γ Φ

Β 】0 /

Ν

Ν

Ν

信息 的解 码

,

短 信息 服 务 中心 号 码 是

& Μ9 Μα %Σ ΛΜ

,

Ν

? ?

,?

?

Θ

&Θ :

Ν

,?

Ρ) ? =

:

Θ &Θ :

Ν

? ,

&

Ν Ν

Ρ) ? (

Θ :0

Ν

? 52 4 Ι

Θ

&

6

4 ,

4>

Ν

6

52 4 Ι

Θ %Λ

Μ Λ & 6: % 9 : 9 : : / .

对 方号 码 是

!? #

消 息 内 容是

好;

手 机 接 收到 的

ΛΜ & 9Μ Μ

” ,

串是

:Μ Κ

ΛΜ &

: Μ % : : 9 : 9 =? Μ Σ

40

?? Κ

,

% α Λ Σ =( 《 : Μ Λ : & : % : Μ : Λ & 9 Σ Μ : : Λ Σ = Χ/

其 中 利 用 了两 个 函 数

=

一 是 Ρ2 Γ > ? Δ <3 Β

Ο

,

其 功 能是将 一 个

,

Λ: 9 Κ αΔ :: %

其 含 义 如表 Σ 所 示

Σ

字 符串在位 置 上 进 行 奇 数与偶数位 进行 交换 如

Δ

若 为 奇数 位 自动

分段

Κ

手机接收

含义

!? #

串的解 码 信 息

说明

% &Σ 9

转换 后 是

6

% Σ & =9

,

核 心 代码 如 下

?

2 ΤΠ Δ < 3Φ

Γ Υ > Φ?

? =2 >7 6 7

Ρ2

Δ Γ<

3 > ?Β Ο

.6 ) 6 ?

Δ Δ ( 3> Φ ? /? ( 3>Φ ? ?

地 址 信息 的长度 度

叫 ( 被蛇 地 址格式.叨创尹 月 /

个八 位字 节 . 括 Κ / 包

用 国际格 式 号码.在前 面加

Δ Η 3< ? < > 0

!? Ρ Ε Υ > 0

困 & 份沁 仍7 功

Ν

/

,

Δ Ο < ? ( 3>Φ ? 二

(班 鱿

地址 址

肠曰虹必幼田

=

,

碑 成佣 佣

?<

6

?

Δ Φ

?

?

效个

Ο<

7 ? >

Φ . 6 ) 6 ? / 0

6 ? 3Ε 《 Ο <

基本奋 教 .开

) 到) )别

接收 无 更 多 消息 有 回 复

地址 址

,

,

Φ? ?

?< Δ

/0

2

Κ

Δ Φ Φ 二 : 3Ε < Δ ? < ? Φ Τ

回龙地 址数字个数 数

共 日 个十 进 制 数 .不 包 括

Κ

Ο < 6 Π ;3 ?

?

“0

Η 回友 地址格 式.Η ? β β χ

和 = / ’

Φ 7 Τ Φ?

Ζ

6 6

?

3 Φ0

/

用 国际格式号 码.在前面 加

< Δ4 0 2

Ν

/

,

4 Β

Ψ

3Ε< Δ 6 Ο <

?

二 6

Ο<

Ν

= 0

已&

男租 % 醉 碍 α

回复地址 .甲

肚/

肠 日 岛因 加阴

=

,

凑成偶

, 0

6 Δ ? < Δ ? 3Ε 《 Ο < /4 2 ? < ? Φ

?

教个

7

Ξ Ε Φ< Φ

协议 标识.甲 一 !Δ / / 用户 信息 偏 码 方 式 .,

】& 叉

1

是普 通

.万)

类型 点 到点

,

?7 ! ? Ο< 【 [ Ο < 【Ν Φ

6Ο <

6

?

0 0

方式

# δ女

? ?

Ο< 【 Ν Φ

?

编码 码

!0

田 刃幻劝 曰醉 劝

/

Φ? Ο

Φ

Ν

%0

时间城. 开

义屁/

刀万

&

% 皿 ? 肠 ?芍

Ν

Μ

< Δ40 <6 Π ∴ ? 二 6 3

Ο< 0

用 户信息长 度.,

用 户信息.,

# ?? /

实际 长度 Λ 个 字节 节

你好 ;

40

= Σ 田 匆α 田公 ?

(

? Π/

二是

<2

3

? 1 >

Φ 4 ?Β Π Δ Ζ 2

<

,

Φ 其 功 能是 将 中 文 字 符 串 变 化 为 # Δ

1

4<

字符 串

Δ

相应编 码 的详细 情况 请参 阅相 关专 业 书籍

实 现解 码 的 函

2 ΤΠ Δ < 3Φ

? =2 >7 67

3< ?

< >0

6

63

山 ? Β#

Δ

Φ 2 4 < . 3< Ω 3? Ρ

Δ 6 3 >Φ

Δ ? /? ( 3 >Φ ? 0

数是

86Τ

? < < 2 4< ε Π Δ

?

Υ Γ

,

>

!> < 司Π >< ? = 2 ?

67 6 < < Δ

,

7 >

67 二 ? < Ζ

,

2

6 4 < !# ? 《 ?

Δ 6 3>Φ

? /0

Φ

,

< Π >?

Δ Η 3< ? < >?

Δ !Ε 2 Δ < Η ?< > Η Τ2 ?< Δ ? Φ 3< ? < >0 ? Φ Δ

Δ 3 二( 3> Φ ? 0

Δ 37 !? 6 3 >Φ ? 0

Δ 3> Φ

Ξ

6?

]

Φ 6 4

<

?0

<

!2

6?

Δ Η 3< ? < > 0

,

?< ?

]( Φ?

Δ Φ

7 ( ) ( Ρ 7 !Ε 2

7 ?? 7 Φ

<

,

Δ<

Η 7 ?

,

Δ

Τ2 ?

6 3>Φ ? 0 Δ

Ο < 6Π

3? 二 “ 0 3< Ω 3奋

7

Ι ?

!< ? 6 >Φ ? 0 3 Δ

? ?

? < ? ΦΔ

6

?

?< Δ ? 3Ε 《 Ξ

/0

7 ( ) (Ρ ? 7 !Ε 2

7 ΗΔ Τ2 _ _ :Μ

2

“0

‘ 矛

0

Δ<

?

?0

“0

? 」 二 。0

Ξ Ε Φ? Φ

Δ ?< ? Φ

Ψ

: Δ

42

地址 信惠的长度

0

Ζ Π> ? ?

2 >4

,

Ξ . 6

⊥ /0

_ _

,

消息 中心 长度

Ζ 6

?

3 =7 36 3> 《

ΑΣ ΣΧ

< 6Π 3 Ν 3

< 【 Π > /0 _ _ 5Ρ ?

Ω Υ

??

_

67

( 3汀 : 爪 《 φ

Ν

6 ) Φ 6 3> . 4

,

Ο< 6 Π 3 ?

Δ Φ <

?

Ο

30

_ _ Κ

Φ 《0 /

. _ 在 前面加

Ν

/

实用第

_ _ ΛΜ & Φ (7 Τ

< 6< Ζ

二… … 一 智慧 密集

_ _ Μ Λ & Μ : : %9 :9 : :

( Ρ ;2 Δ 二

: Μ % : : 9 : 9 =: 短信 息服 务 中 心地 址 ’ ‘ 补 = 凑成 偶数 个 : 3Ε < Δ %

0

,

Τ2 ? < Δ Φ7 Τ Φ7 Τ

γ

% /0

二 二

Ι ? !< Ι ? 四

2

34 6 卫 Φ 3Ε< Δ 0 3

34 # Ρ ( Β

3 Ε< Δ 7

Δ

2 Τ

? ?

# Δ Φ 2 4 < ? 2 ? 5 ( . 7 ! /0 3 Ρ

?

Ζ ! 6 ? ? < !2 6 Ν ? Δ ?

< Δ4 0

)<7

Ο < < < Φ 67 < Γ Ο

Ο

Γ Ο < < < Φ < 67

6

Δ ?Φ < 6 Δ ?Φ < 6 Δ ?Φ < 6

< ε

? 6

二 Ζε

6 2

Ο

十Σ

_ _

<

略去 Κ

6

,

) 7

<

γ

2 2 2

Γ << < Φ < 6 7 6

37 !?

?

6 ) Φ 63> 《 4

?

!2

<

6

7

6< < Δ

%

一%

/?

)<7 )<7

6

7 ( ) ( Ρ?

<

<6 Π

7

4 2>

< >. 7 3

0 !》 0

Γ < < < Φ <6 7 6

Δ ?Φ < 6 2

2 ε

6?

二<

!2

6 Ν 6

7

6<

%

一%

)<7

Γ Ο < Ρ Μ Φ < 67

4 , 4 《短 信 中心 ? 4 , 4 《短 信号 码 ? 4 , 4 . 短 信 内容 4 , 4 . 发送时间?

Ν

Ν Ν

7

6 7 6<

0 》

7 ε Ε2 Δ < Φ /? 4

Δ 2 0 7 Φ Τ 》

Ν

7 ? 3Φ 7

<

/0

(

Δ ?Φ < 6 , 4 4 《

40

一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一

/0

_ _ Μ Σ 基 本参数 . Η 下户一 ) ? _ ) ) ( _ Ο ! /

_ _

接收 无 更 多消息

,

,

< Δ40

有 回 复 地址

%?

&

< !2 6 ? ? < !2 6 Ν

6 4 其 中用 到 了 三 个 函 数 一 是 Ο < 7 2 > 3 Ρ 2 Γ > ? Β Ο 处理 过的字 符 串反过 来 过 函数 Δ <

,

Π

<

> <

,

其功 能是 将 经

_ _ : : 回 复 地址数 字个数 共

个十进 制数 .不 包括 Κ 和

, , 6 ) Φ 6 3 > . < !2 6 % 】 0 4 /

= /

ΤΠ Δ Ρ Φ 3 2

丫Υ > ?

Δ 3=2 >7

67

6

Ο < 6Π 7

<

4 2 >

<>

>? Δ ? Δ 旧 >Φ6 3 ( 3>Φ ? / ( 3>Φ ? 0

!Ε 2 Δ < Φ 《 2 Τ !Ε

<

Η ?

?< Δ ?

?

? ( 3『 2 Δ 3 .

φ

Ν

Δ<

Η? ? < Δ 7

4 2

Β /刃 3 Ε< Δ ; Δ < . 2 !Ε

Δ<

;? ? < Δ /0

ΗΔ 3 ? < > 0 <

Δ ( 3>Φ ? 0

2 ε

6 ? ? < !2 6 Ν

%0

6 6 3>?

Δ ?

_ _ Κ

_ _

Ν

下 Η 回 复 地 址 格 式 . ? β _ β ! ∴ 用 国 际格 式 号码 《 前面 加 在

/

9Μ Μ

63>?

6

“0 32

_ _ ΛΜ &

% α Λ Σ =Μ 回 复 地址 . ! ?

Ο, 》 Λ & Μ9 Μα % Σ Λ Μ Μ

,

2 Τ

> Φ? ?

? 4 《 < Δ ? 3Ε .2 >Φ 3> / ? ΦΓ Β 》 2 6

Ν

_ _

Ρ <

=

Τ Φ !Ε2 Δ <

凑成 偶数个 ? ? Δ 二 2 3Ε< Δ Λ

!2

6 Ν

6

3>?

? 6

?

6 3> Ν 2 >Φ 3> 【 γ % 6

Δ ( 3>Φ ?

? >Φ 3> 6

γ

%

0 】

3 Ο <6 Π [?

< Δ4 二

Ο < !Υ< <

6 . 63 >

=

,

,

【 Ο < ! Υ << , 】 0 Τ > /

< ε < 6 < < ε

6?

? <

% %0

,

Δ ?< ? Φ

6?

?

二<

!2 6

? ?

Ν

6 Ζ 4 α Φ 第二 是 ? 7 ?< 2 < ? 3 功能是将字符转换为可 识别 的 , ( Ρ 码 0 第 三是 # Δ ΦΡ 2 4 < ? 2 ? 5 ( 功 能是 将 字 符转 换 为汉 字

, ,

37 !?

6

4 ) Φ 63 > 《

<

< ε

Δ<

6 <

,

!Ε 2

Δ

Δ<

Η? ?< Δ / 0 ! ∴0

2 ΤΠ Δ Ζ 3Φ Δ 3=2 >7 6 7 Δ

6

?

6

3 ! Ζ 7 ? < < 2 4 < α ? Φ 《( >

Δ 6 3>Φ

? 6 3>Φ Δ

??

7 !Ε2

<

Δ<

?

Ο< 6 Π 7 !Ε 2

2 > 4

< > 《7 3

Δ 6 >< ?< Δ ? 3Ε ? Η 3< ? < > /?

?0

2 ε

6?

二<

!2

6 Ν

?? Λ

0

8Υ>

Λ Δ

40 下 Η 协 议标 识 《 户一 ! ? /是 普通 ? ( )

? <

6 Δ

类型 点 到点 方式

Δ

Ρ Η 3 > ? Δ

? > <<

?

< >0

_ _

源 字 符 串 的计数值

,

_ _ ::

<

5Ι 3

< 二Η 3 Δ<

!2 6 ?

6<

!2 6

Δ3

?

Ν

%0

_ _

_ _ : Μ 用 户信息 编 码方 式 《 ! 一 ? Ρ ( # Ρ( Β 下 /

编码

Υ Ζ

6 3> ?

2

9 4 .) Φ 63 > .

6 2 % // 2 Τ

,

当前正 在处理 的组 内字节的序号 范 围 是 ? 一 Λ _ _ 上 一 字 节残 余的数 据 3 ? Τ Δ < ? 5Ι < 0 >? 5 Ι < 0 37 !Ρ 俪 3

Δ !? 6 3 ? 6 3>Φ ? 0

:? 7

?

Ι ?

!< ? !< ? !< ?

34 α 多 Φ 0 3

Μ 7 3 Ι 9? 7

?

34 # Ρ ( Β 0

‘ ’

?Λ Φ ? Δ

η ?

34 6

多 Φ3

0

40

?

6 Δ

Δ

Ζ >

?

二 。 ‘

0 0 。

_ _ _ _

5Ι < 3 ? ?< Τ3 ?

3 Υ

? ?

!2 6 ?

6 2

Ν

%0 %: 时 间戮 .? ! ( Ρ? ( 》 : Λ

,

Δ

0 。

_ _

计数值 初 始化 组 内字节序 号 初 始 化 残 余数据初始 化

,

_ _ Λ : & : % : Μ : Λ & 9 Σ Μ:

_ _ &Λ ?Σ 9

37

十Μ

&

% :Μ

?

4 !

_ _

0

时区

,

!?

? ?

) Φ 6 3> .6 4

Ο < 6Π 7

< ? 二

Ν

< !2 6

Σ /?

,

,

37 ε ?

Ν

<

3 2 >4 < > . 7 ε /0

7 ? ?Φ 7

. Φ 6 .37 ! ) 4

3>

,

%/

Ν

Ν

> 3 ) Φ4 6 3 . 7 ! &

,

, ,

,

%/

3 4 ) Φ 6 3> 《7 ε 9 % 》 0 /

二7

将源 数据每 α 个字节 分为 一组 解压 缩成 Μ 个字节 _ _ 循 环 该 处理过 程 直 至源 数据 被处 理 完 _ _ 如 果分 组 不 到 α 字 节 也能 正确 处 理 2 < Δ Ξ Ε Φ< .Δ 6 > Ψ Δ 6> ? Δ Ζ Ζ Λ Ε 3 4 ? 】 ? ?Φ

,

,

37 ε ΡΕ Υ > ?

?

?

7 ??Φ 7 ?? 7 Φ 3 ( 3> . 7 ! Κ % / Ν ?

,

< Ν

Ν

.“

Ν

4 3 ) Φ 63> . 7 ! α % /

,

Ν

?

Ν

沙 )Φ

,

3 ) Φ 3> . 7 ! 46

一 Ν

% //0

Ζ

_ _ : Λ 用 户信息长 度 . ! ?

Δ2 Η Τ ?< Δ ? Ζ

?

? !

(? ,

< !2 6 Ν

Σ0

# ?? /

实际 长 度 Λ 个字节

,

(3

< ε

? 6

? Ρ ε ?( 十 % 二

? ? >

Δ Τ3. φ

4 ) 6 6 3>.6

,

%

》0 》

α / φ =

_ _

Δ

将源字节 右边 部 分 与残 余数据相加 去 掉最 高位 得到 一 _ _ 个 目标解码 字节 !? Υ ? ? !? 6 3 Ν Ρ ΕΥ > ... ! ΕΥ > 6 Ε Σ Δ 5Ι < 2 > Δ ? Τ / Υ Δ 4 3 3 Λ 3 加Ρ

0

_ _

川0

< 3 Ι

. 3 (> ?

2 Δ3

. φ

Ν

!( > Ζ

Δ 6 ><

Ν

!( > Ζ

,

Δ 【6 弋

Ν

将该 字节 剩 下 的左边 部 分 作 为 残 余数据保存 起来

,

_ _ Σ =Λ : 9 Κ α ? : : %

? 用 户信息 . ! 一 # ? 》

你好 ;

Φ Τ ΤΗΔ Φ 7 Τ

2

?< Δ ι 3 Ε< Δ : )Φ 6 43

?

< ?

Δ ? Φ

<

? < Τ ? , 37 !Ρ Ε 3 6 ΗΔ . 5Ι < 0 Δ 3 / Ρ

> 6Ε>

α .

一 Δ

二 5Ι < 》 3

_ _

37 !? ?

>. 9

< ε

6

ΗΔ Τ2 ? < Δ

γ

% /0

ΤΔ Φ . 5

η ? !<

34 α 多 Φ 3 Ε< Δ 7 Δ Τ2 3

? 二

? 67

< 4 ? Ζ2

<

Δ α ? 3 .7 ε Η Φ 3

?

.? 转 第 Λ α 页 /

< 3 Ι

/ Ε α 3

< Φ ? ?Δ

修改字节计数值 _ _ 到 了一 组 的 最 后一 个 字节

娜 瑞温

辘 声峰

?

… … ? 肋护 〔 蕊叭 价 护 朋 ( 【

… 皿朋

Ω

7

Δ . 2 Υ 3 /Ε Ι!2 3 《 Σ Τ ?

Δ

Σ Ι/ 0

Υ Γ

Ξ

<

?

_ 《 ∴十 少% 0 Υ Γ

Φ Ε3 ?

γ

Λ

3

γ

Φ《 2Τ 二 Τ :

Δ

Δ

7 / : 2 Τ0

,

:

Γ !2 Ξ . Υ & /0 3

,

!2 Ξ 《 Υ 3 Γ

,

9/一

γ

9

γ

!2

3 Ξ

Γ 《Υ

,

Σ /

Ν

Τ 2 3 3& Υ

Σ

Ω

二 ?

?

γ

Ξ

<

Φ Ε3 ?

Ν

_ _ 加 权形成最 终 结果

3&

?

< Ξ

Φ Ε 3 /0 ?

Σ Ι

: 2 Τ0

3 .&

<

Ν

Ν

/_ % 0

7

? Φ Ε 3) Υ ! Ι ; Ω 】 7 ?

一 < Φ? Ε 3) Υ ! ; Ι

Ω

γ

: 6Τ

Δ

3&

γ

:

ΒΤ0

?

Σ

Ω

_

二 ?

7 0 7 0

< 4 < ∴ 3<

Δ

Σ Ι_

!? >[ ) Υ !? 4

_ _

4

< < 3<

Ηλ? >Φ4 ) Υ ! 0

,

点乘 作为 四 角 点 的高度噪声

?

2 Τ3 Υ 3 Ε

4 ? >Φ ) Υ ! ; >2 Ξ 】< 2 【

Ω

γ

Δ

Ω

Ν

?

?

>Φ 4

)

Υ ! >2 Ξ

<2

Ι

Ν

γ

Δ

Ι0

Ν

一 般为 了获得 比较 真 实效 果

Ω Ν

上 面 的过 程 要做 多次 Λ

,

,

选择

2 ΤΗ Υ 3 Ε Β

>Φ 4

4 ? >Φ ) Υ ! 【 Ξ ; < 2 2 >

】Ω

Ι二

Ω

γ

Δ

Β &

不 同粒度 的 网 格 大 小

,

比如 Λ

Ω

&%

Ω

&%

然 后 把梅 次

)

)

Υε

?

2 ;> Ξ

; <2

Ν

η

Ν

γ

Δ

Β

的 值 累 加起 来作 为最 终结果

γ

Τ2 Υ3 Ε&

4 2 > ? >Φ ) Υ ! 【 Ξ

>2 4 ? >Φ ) Υ ! 【 Ξ

Ν

】< 2 ; ;

Ι

γ

Δ

Ω

Ν

最 后 为 了方 便 光 照

Ω Ν

, ? Ψ 2

,

还 得 给 每个顶 点 设 置 一 个法 向徽

?

,

,

?

>Φ 4

Υ! >

2 ΤΗ Υ 3 ΕΣ

Ξ 2

<2

Ν Ν

Δ

& Ι?

Ν

Ω γ

< Η 2

Δ

Σ

以通 过 如 下 的简单 方 法进行 计算

设 顶 点 在 垂 直方 向 卜的投 影

>2 4 ? >Φ ) Υ ! 【 Ξ

; <2

Η Ι

Ψ Ψ

γ

Δ

Σ Ι?

γ Ω

,

[ 4

Π 63 γ

.χ Ι ⊥

Ψ

,

μ

Ω

Ν

χ ;Ι⊥

γ

μ

Ω

⊥ /ι

,

’ λ 在水 平 ∴

_ _

ΓΥ

计 算当 前 点 的权 值

?

向上 的 投 影 为 (

&/

ΓΥ

,

:

[ 4 Υ

Π 63

χ . ;Ι Ν

,

川Ι

Τ 2 Υ 3 Γ Υ 3 ? !2

.

Τ Ξ

.

: Τ γ .Ω

γ

γ

/?

Ν

Ω μ

,

αΜ Κ % %

ΓΥ 二

/

ΓΥ

Ν

Τ 9α & 《 卜 & α Λ & % 9 Μ Κ /κ 2 Ω α =======/_

Δ ..Φ 3 》 Γ Υ .

ΓΥ

其 中 的 Υ Π 3 是用 来 调 整 向量 幅度 的 [ 4 6

维数 组 川

【 是 每个顶 点 的 高 度 值 [⊥

然后 做

_ 7

ι

γ

,

?

Ω

(

,

即 可 得 到此 顶 点 近 似

: α & α Σ Μ % Σ : Τ/奋

的法 向 量

Ψ

ν ?

_ 7

3 ο>

,

9% _ 7 ? .

ν γ

,

:

Ν

_ 》 %0

?

其中

!2

,

7

二 6

ν ?

Ν

9%

9%

Ν

/

代码 很 简单

,

丁 参考

Τ2 Υ3Ξ <

Σ/

Φ Ε3 ?

γ

Λ

γ

3 Ξ .

& 》 0

Ν Ν

Ψ

ΓΥ

9/

γ γ

9

γ

!2

3 Ξ .

ΓΥ

,

附带 的 工 程

,

就 不再 叙述 了

,

所 附例 程 是 在

(? π

Γ6 β + % : % Η

Τ2 Υ3 3 Τ;2 Υ 3 3 Β

二 二

Ε

?Τ Γ !Ξ ‘ Υ

γ γ

Ξ Ξ

<

? Φ Ε3

ΕΒ

ΕΣ

Ψ

γ

《 《

,

一 一

0 ? Ξ

Δ ] Φ Χ ! 下 调试 通 过

需要 安装 ? Χ ?

Ε&

γ

Ε3

Ι 〔

Ξ

<

γ

γ

Φ Ε3 /0 ?

Ι /0

Υ Γ

ΓΥ

二 !2 二

《 2 Τ 一 《 ΦΔ 3 》Γ 《 . Υ

/

Ν

3 Ξ

《 2Τ

&/

Γ 《Υ

γ

参考 文 献

Ν

6 !< > ΦΔ β 2 Φ <

Υ Γ

9α&

αΜΚ%%

& α Λ&

% 9 ΜΚ /κ 2 Ω α ======= /_

: α & α Σ Μ % Σ : Τ/ 二

.收 稿 日 期 ? % : : Λ 年

%

月 9 日/

.上 接 第 9 页 / Μ

Τ2 >

Ν

? ?

2 32 Ο < Υ

比Δ

. φ

Δ 4 2 ?< ? Φ

4 3 !Υ

Δ5

?

ε: ( 3 :0

Ρ

Υ . Ε >

Δ

?< Τ 0 _ _ / 3

3 Ι

< ? ?

_ _

Ν

?Τ? Δ <3

Ρ >

额外 得 到 一个 目 标 解码 字 节 _ 组 内字 节序 号 初 始化 _ 残余数 据初 始化

!

二 二

( 3>? ?

,

Δ3

Ν

. 2 !Ι .9 Σ Ρ

γ

ΗΝ

Σ // 0

)

2 Γ<

.! θ

?

6

6

3>

% /0

Ν 6 3>0 6

Ο< 6 Π 3? 4?

6<

Ο <6 Π 3

40

Ζ >

0

?

?

6 Δ

< >

6 Δ

0 %

_ _ 修 改 源 串的指 针和 计数值

_ _

匕 ? Φ !2

! 0 《》

< Δ4

40

Δ 该 程 序在 ] Φ Ω !

#? 6 3

Δ

ε 4 30 6

返 回 目标 串长 度

专 业版

手机

,

Ν

? < εΕ Φ

α

,

的环 境 下 使 用 数据

,

< Δ4 二

2 ΤΠ Δ < 3 Φ

8 日 =

3=2 >7 6 7 6

#Δ Φ ? Ρ4

<

? ?

Δ ? 5 ( .6 ? ( 3>Φ ? /?

Φ ]

Δ 4 < 63 >Φ ? 0

线 连接 为

Ρ2

)2

32 > 2 3

Υ

89:

运 行通 过

当然

,

( !Ρ ./ ))

要作

2 Δ < Δ

安装

!?

户 ]

2 > 0 4

? Η Δ

Ο < Υ Η

( ( 3>?

Δ ?< ? Φ

3< ? < > 0

参考 文 献

赵兰涛

%

4 ] Φ < Ρ ΕΥ >0

苏 彦华

?

? < ε ΕΦ

Ψ

串 口 通 信技 术 与 工 程 实践

4 < ε Ε Φ? ? 6

< 2

β < Ξ .! /0 Ο < Υ ?< Δ ?

,

大 富翁论坛

2

Ε 33 ε ? _ _

ι

ΞΞΞ

7 _ ρ < Ι ΦΤ <

1

6 4 Γ ?< Δ ? 3Ε . 矛 Φ Σ 0 _ _

计算 # β Ζ δ ? + 真 实长度

?

2

脚Ε

Ξ

Υ 6

ε?

Ω

Φ4

?

Μ9 %Μ

. 收稿 日 期

%: :Λ

Μ 日/

%: :α

挂巧 与

利用At指令集操作手机发送短信的实验和分析

利用At指令集操作手机发送短信的实验和分析

一、实验及分析

以我的手机为例,手机型号是索爱k750c。首先我们对一些现成的例子进行分析。手机通过红外端口和电脑相连。我们可以通过 控制面板---管理工具----计算机管理----调制解调器-----sonyerisson 750。。。。。来查看红外连接的详细信息,包括串口和波特率。如图1 在我的红外连接中,使用的是com4和115200的波特率。

为了确保所做皆为有用功,我先使用一个现成的可用来通过电脑向手机发送at指令来操纵手机的软件。(手机短信发送器,是用计算机通过串口或红外、蓝牙等端口与手机连接,代

理手机发送短信的软件。本软件不保证适用于所有手机,仅支持标准手机AT

指令的手机。本软件是在SONY ERICSSON T628上开发的,理论上支持SONY ERICSSION其他型号的手机,)

这个软件的主界面如图2

我先进行了连接,并发送一条短信给同学的手机。发送成功。由于该软件本身对at命令进行了封装。我们无法直接看到它所用到的at指令。因此我使用另一款串口监视软件来查看短信发送器通过COM4送出的数据包。这款软件是HHD SOFTWARE的serial monitor,version:4.0.7。我通过新建一个session监视我手机的连接。界面如图3所示。

在开启监视后,我们首先点击短信发送器的连接按钮。可以看到短信发送器的界面和serials monitor的界面都有数据产生。

Serials monitor检测到的数据:

AT+CMGS=?

OK

AT+CNMI=2,1

OK

AT+CSCS="UTF-8"

OK

现在我们使用短信发送器向13800000000发送一条内容为“Hello”的短信。

Serials monitor检测到的数据为:

AT+CMGF=0

OK

AT+CMGS=19

> 0011000B813108000000F00000FF05C8329BFD06

+CMGS: 0

OK

至此,我们就获得了通过at指令向13800000000发“Hello”的AT指令。在逐条分析之前,我们可以通过windows xp自带的超级终端来验证一下所获得AT指令的正确性。因此先将短信发送器关掉,否则会端口冲突。开始---所有程序---附件-----通讯-----超级终端。建立一个新连接,断口com4。

在超级终端中逐条输入:

AT+CMGS=?

AT+CNMI=2,1

AT+CSCS="UTF-8"

AT+CMGF=0

AT+CMGS=19

0011000B813108000000F00000FF05C8329BFD06

注意在超级终端中输入以上代码时。要注意"UTF-8"的“-”是区分大小写的。“0011000B813108000000F00000FF05C8329BFD06“后要按”ctrl+z“。

通过了验证,我们就可以分析一下以上的AT指令。

AT+CMGS=? ‘测试命令,验证对象是否支持AT指令

OK ‘返回OK,表明测试对象(MY PHONE)支持AT

AT+CNMI=2,1 ‘设置对象的收信息参数。会有新信息提示,不会打开回报功能 OK ‘设置成功

AT+CSCS="UTF-8" ‘设置对象所使用的字符集(如果我们使用AT+CSCS=?命令 得到回应+CSCS: ("GSM","IRA","8859-1","UTF-8","UCS2")可以看到我的手机支持的字符集)

OK ‘设置成功

AT+CMGF=0 ‘ 用于选择短消息格式。它的参数指示发送、列取、读取和写入的消息所使用的格式。设置其格式为pdu模式。我们可以使用AT+CMGF=?来查看我的手机都支持什么短消息格式。

OK ‘设置成功

AT+CMGS=19 设置后面要输入的PDU字串的长度(实际长度-1?)

> 0011000B813108000000F00000FF05C8329BFD06 ‘输入的PDU字串,包含了接收手机号码,信息内容,校验等等有效内容。稍后详细分析如何得到这个字串。

+CMGS: 0 ‘表征发送成功。

OK

现在我们来详细分析一下如何得到那个PDU字符串。

重申一下我们的参数:

接收手机号码:13800000000,信息内容:Hello

首先分析原PDU串中的前面0011000B81

按顺序依次表示:00短消息中心信息的长度,这里的0意味着,采用modem中已存的短消息中心的信息。

11一个说明信息体格式的字段,普通短信和wap push在这个字段上会有区别的。(普通短信就用11)

00一般取00,采用默认的发送号码。

0B接受手机号码长度的十六进制表示。 中国大陆应该都是0B(11=0BH)

81 本部分表明了接受手机号码的类型。我们一般采用81

下来我们再考虑3108000000F0,先提示一下这和我们希望接收短信的手机号码有关系呢。 我们希望接收的手机号码是13800000000,看出点什么没。

首先,数一下手机号是多少位。奇数位的话就在号码后加F。号码是11位奇数,所以将原号码变为:13800000000F。然后我们把第一位和第二位交换,第三位和第四位交换,以此类推。这样就可以得到3108000000F0。

再接着分析0000FF。00协议标识(TP-PID) 是普通GSM类型,点到点方式

00用户信息编码方式(TP-DCS) 7-bit编码。在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一

个数据字节都视为一个字符。

FF信息有效期

但是到目前为止有一个问题我们必须要注意:即是不是所有支持电脑与手机交互at指令的手机,都可以照上面的步骤发出达到我们愿望的手机呢。网上的资料显示,不同场家手机的PDU编码模式总体上差不多,但是他们还是在一些细节上有区别。比如说nokia和索爱可能就会省略掉不同的一些字段。所以只能保证,这些指令的对任何手机的at分析没有错误。但是分析正确,不代表可以正确运行在其他手机上。At指令实在是太多了。

下面接着分析05C8329BFD06。有人可能会问,到目前为止,信息主体“Hello“还没有体现在PDU字串中。没错,它表现在了最后这串字里了。嗯,那么它是使用的什么编码方式呢。记得之前说过的用户信息编码7-bit么?

Hello字符串 转化为UNICODE代码为C8329BFD06。它的总体思想是,将每八个字节分为一组,按照下面的图标中的规律进行压缩。它的转化方式,你可以查相关资料或者见下面的一个表。而05则等于unicode字符串的长度除以2。即10/2。

至此我们对一个现成例子的分析已经结束。为了验证我们的分析正确。我们自己计算一个pdu字串。再通过计算机发出去。

接收手机号:13725517514,信息:u gooduu。

先对手机号进行处理变为:3127557115F4

再对信息进行7-bit编码,变为0775D0F9FD26D7EB

综合起来即为:0011000B813127557115F40000FF0775D0F9FD26D7EB

同时设置:AT+CMGS=21.

实验是成功的。但是有一个问题,手算比较麻烦。但是网上有现成的c做好的算法程序。

二、问题

之前说过,我们可以用pdu模式也可以用txt模式或者block模式发短信。而照一些资料看,block模式基本已经被pdu模式取代,而text模式在处理中文上有一些问题并且有很多设备根本就实现不了。例如我的手机通过AT+CMGF=?

得出的结果就只有+CMGF: (0),表明只支持pdu模式。没有实践,就暂时不作考虑。况且可以想象也会有很多这样不知吃txt模式的设备。

我们在上文提到过发送短信,但是在上面的实验中,我们只发送了英文信息。并没有进行中文信息的发送。其实在我们理解了使用pdu模式发送英文信息后,再理解中文信息的发送就很简单了。只是在具体的压缩方式上有些差别。发送中文时,必须用 UCS2 ( utf-16 )进行编码,最多可以发 140/2 = 70 个汉字。

UniCode 编码转换也比较简单,以中文为例,一个中文字符是两个字节,直接对高位字节和低位字节进行十六进制转换就可以了。如“欢迎”, UniCode 编码是 6B22 8FCE ,这同时也就是转换的结果,如果发送的串中有英文字符,那么在前面补全 00 ,以保证一个字符对应两个字节。同时需要把用户信息编码方式设置为08

。我们仍然向13725517514发送短信。短信内容为:欢迎来到哈工大。通过utlra edit我们可以知道这串字符的unicode代码为:6B228FCE6765523054C85DE55927

因此PDU字符串的值为

0011000B813127557115F40008FF0E6B228FCE6765523054C85DE55927

同时AT+CMGS=28。

可以看到手机很快地受到了短信。

在操作at指令的过程中。还会有很多问题。如中文和英文的混合输入、超长短信、不存储sim卡等等。这就需要在实际应用中找相应资料来解决问题。

http://www.dz3w.com/articlescn/com/0075738.html

AT 指令

AT 即Attention,AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter, TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。90年代初,AT指令仅被用于Modem操作。没有控制移动电话文本消息的先例,只开发了一种叫SMS BlockMode的协议,通过终端设备(TE)或电脑来完全控制

SMS。几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM 研制了一整套AT指令,其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM 07.05标准以及现在的GSM07.07标准,完全标准化和比较健全的标准。如:对SMS的控制共有3种实现途径:最初的Block Mode;基于AT指令的Text Mode;基于AT指令的PDU Mode。到现在PDU Mode已经取代BlockMode,后者逐渐淡出。GSM 模块与计算机之间的通信协议是一些AT指令

集,AT指令是以AT作首, 字符结束的字符串,AT指令的响应数据包在 中。每个指令执行成功与否都有相应的返回。其他的一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。

示例:CDMA modem DTE

AT< CR>

< LF> OK < LF>

ATTEST< CR>

< CR> ERROR < LF>

如果AT指令执行成功,“OK”字符串返回;

如果AT 指令语法错误或AT 指令执行失败,

“ERROR”字符串返回。

1.相关的GSM AT指令

与SMS有关的GSM AT指令(from GSM07.05)如表1所示:

表1 相关的GSM AT指令

AT 指令

功 能

AT+CMGC

Send an SMS command(发出一条短消息命令)

AT+CMGD

Delete SMS message(删除SIM卡内存的短消息)

AT+CMGF

Select SMS message formate(选择短消息信息格式:0-PDU;1-文本)

AT+CMGL

List SMS message from preferred store(列出SIM卡中的短消息PDU/text: 0/“REC UNREAD”-未读,1/“REC READ”-已读,2/“STO UNSENT”-待发,3/“STO SENT”-已发,4/“ALL”-全部的)

AT+CMGR

Read SMS message(读短消息)

AT+CMGS

Send SMS message(发送短消息)

AT+CMGW

Write SMS message to memory(向SIM内存中写入待发的短消息)

AT+CMSS

Send SMS message from storage(从SIN|M内存中发送短消息)

AT+CNMI

New SMS message indications(显示新收到的短消息)

AT+CPMS

Preferred SMS message storage(选择短消息内存)

AT+CSCA

SMS service center address(短消息中心地址)

AT+CSCB

Select cell broadcast messages(选择蜂窝广播消息)

AT+CSMP

Set SMS text mode parameters(设置短消息文本模式参数)

AT+CSMS

Select Message Service(选择短消息服务)

对短消息的控制共有三种模式:

Block Mode

基于AT命令的PDU Mode

基于AT命令的Text Mode

使用Block模式需要手机生产厂家提供驱动支持,目前,PDU Mode 已取代 Block Mode, Text Mode比较简单,本文重点介绍模式PDU Mode,以西门子公司的产品TC35T为例。

2.计算机与TC35T的通信

(1)RS232串口连接

由于TC35T自带RS232串口线,故只需将其连接到计算机串口即可。打开超级终端,选择相应的串口,将端口参数设置为:速率—4800、奇偶校验位—无、数据位—8、停止位—1、流量控制—硬件。

(2)连接测试

输入“AT”然后回车,屏幕上返回“OK”表明计算机与TC35T已连接成功,TC35T能够正常工作。这时就可以测试各类AT命令。

当测试命令“AT+CMGS=?”时,如果返回“OK”标明TC35T支持该指令。该指令的完整语法如下:

如果此时TC35T处于PDU Mode(即“AT+CMGF?”返回“0”)

AT+CMGS=PDU is given

如果短消息发送成功,则返回“OK”,并显示信息号:

+CMGS: [,]

如果短消息发送失败,则返回如下信息号:

+CMS ERROR:

如果此时TC35T处于Text Mode(即“AT+CMGF?”返回“1”)

AT+CMGS=[,toda]text is entered

如果短消息发送成功,则返回“OK”,并显示信息号:

+CMGS: [,]

如果短消息发送失败,则返回如下信息号:

+CMS ERROR:

另外,由于使用的是TC35T,当有新的短消息到来时,需要TC35T产生提示,使用指令“AT+CNMI”。该指令的完整语法如下:

AT+CNMI=[][,][,][,][,]

如果有新的短消息来到,则TC35T将自动返回下列提示:

+CMTI: “SM”,

此时读出,然后用“AT+CMGR”指令即可读出短消息内容。

3.PDU数据格式分析:

例如,我们要将字符“Hi”字符发送到目的地“13677328099”

PDU字符串为:

08 91 683108701305F0 11 00 0D 91 3176378290F9 00 00 00 02 C834

⑴08—短信息中心地址长度。指(91)+(683108701305F0)的长度。

⑵91—短信息中心号码类型。91是TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还有其它数值,但91最常用。

91—10010001

BIT No.

7

6

5

4

3

2

1

Name

1

数值类型

号码鉴别

数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展; 号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;

⑶683108701305F0—短信息中心号码。由于位置上略有处理,实际号码应为:8613800731500(字母F是指长度减1)。这需要根据不同的地域作相应的修改。

⑴、⑵、⑶通称短消息中心地址(Address of the SMSC)。

⑷11—文件头字节。

11&h=00010001&b

BIT No.

7

6

5

4

3

2

1

Name

TP-RP

TP-UDHI

TP-SPR

TP-VFP

TP-RD

TP-MTI

value

1

1

应答路径—TP-RP(TP-Reply-Path):0—不设置; 1—设置

用户数据头标识—TP-UDHL(TP-User-Data-Header-Indicator):0—不含任何头信息; 1—含头信息

状态报告要求—TP-SPR(TP-Status-Report-Request):0—需要报告; 1—不需要报告 有效期格式—TP-VPF(TP-Validity-Period-Format):00—不提供(Not present); 10—整型(标准);01—预留; 11—提供8位字节的一半(Semi-Octet Represented)

拒绝复制—TP-RD(TP-Reject-Duplicates):0—接受复制; 1—拒绝复制

信息类型提示—TP-MTI(TP-Message-Type-Indicator):00—读出(Deliver); 01—提交(Submit)

⑸00—信息类型(TP-Message-Reference)

⑹0B—被叫号码长度。

⑺91—被叫号码类型(同⑵)。

⑻3176378290F9—被叫号码,经过了位移处理,实际号码为“13677328099”。

⑹、⑺、⑻通称目的地址(TP-Destination-Address)。

⑼00—协议标识TP-PID(TP-Protocol-Identifier)

BIT No.

7

6

5

4

3

2

1

Bit No.7与Bit No.6: 00—如下面定义的分配Bit No.0—Bit No.5;01—参见GSM03.40协议标识完全定义;10—预留;11—为服务中心(SC)特殊用途分配Bit No.0—Bit No.5。

一般将这两位置为00。

Bit No.5:0—不使用远程网络,只是短消息设备之间的协议;1—使用远程网络。 Bit No.0—Bits No.4:00000—隐含;00001—电传;00010—group 3 telefax;00100—语音;00101—欧洲无线信息系统(ERMES);00110—国内系统;10001—任何基于X.400的公用信息处理系统;10010—Email。

⑽00—数据编码方案TP-DCS(TP-Data-Coding-Scheme)

BIT No.

7

6

5

4

3

2

1

Bit No.7与Bit No.6 :一般设置为00;Bit No.5:0—文本未压缩,1—文本用GSM标准压缩算法压缩;Bit No.4:0—表示Bit No.1、Bit No.0为保留位,不含信息类型信息,1—表示Bit No.1、Bit No.0含有信息类型信息;Bit No.3与Bit No.2:00—默认的字母表,01—8bit,10—USC2(16bit),11—预留;Bit No.1与Bit No.0:00—Class 0,01—Class 1,10—Class 2(SIM卡特定信息),11—Class 3。

⑾00—有效期TP-VP(TP-Valid-Period)

VP value(&h)

相应的有效期

00 to 8F

(VP+1)*5 分钟

90 to A7

12小时+(VP-143)*30分钟

A8 to C4

(VP-166)*1天

C5 to FF

(VP-192)*1 周

⑿02—用户数据长度TP-UDL(TP-User-Data-Length)

⒀C834—用户数据TP-UD(TP-User-Data)“Hi”

4.短消息编码

设需要发送的短消息内容为“Hi”,使用的GSM字符集为7位编码。首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:H翻译成1001000,i翻译成1101001,显然H的二进制编码不足八位,那么就将i的最后一位补足到H的前面。那么就成了11001000(C8),i剩下六位110100,前面再补两个0,变成00110100

(34),于是“Hi”就变成了两个八进制数 C8 34。

5.短消息的发送与接收案例

鉴于TC35(T)支持TEXT格式,我们在试验中主要测试该格式。

(1)设置短消息中心

AT+CSCA="+8613800731500"(短消息中心);

(2)设置短消息发送格式

AT+CMGF=1 (1-TEXT; 0-PDU);

(3)发送短消息(短消息内容为“test”)

AT+CMGS="13508485560"(目的地址)

> test ^z ;

(4)设置短消息到达自动提示: 设置短消息到达提示当短消息被接收,将获取指令: +CMTI:"SM",INDEX(信息存储位置)

AT+CNMI=1,1,0,0,1();

(5)获取短消息内容(Once more),假设INDEX=8。

AT+CMGR=8

返回信息如下:

+CMGR: "REC UNREAD","+8613508485560",,"01/07/16,15:37:28+32",Once more

6.注意事项

(1)短消息中心一般不会改动,如果短消息中心号码改动,在使用“AT+CSCA”语句时,记住TC35要重新启动,否则TC35不能正常工作(TC35T不存在此问题)。

(2)某些SIM卡带有密码,启动时需要输入密码。

愚人节手机短信

感谢今生与你相识相知,我对你魂牵梦绕相思成灾。我确定你是我今生追求的至爱。没有你我的生活暗淡无光。我是多么的需要你,回到我身边吧:人民币!饥渴的我无法抗拒你的诱惑。跟你亲密接触时你令我产生了阵阵无法言表的快感,感觉地球在旋转,很想和你大干一场又怕将肚子搞大……亲爱的啤酒茶,要喝得浓的;路,要走的直的;猪蹄,要吃得香的;啊,拿鼠标的这只就不赖。哈哈。和你在一起我会很快乐,你就是我的开心果。每次走近你,我都有一种心动的感觉,今晚也不例外。在经过一番等待终于见到你时,我想大声说:我爱你电脑!天生我才必有用,唯独是情弄不懂!某日王帝托梦来,明早八点起床后,吃完蛋糕就会懂(读每句第三字有惊喜)有两句话一直很想对你说,今天终于提起勇气:第一句,我爱你我好喜欢你;第二句,千万不要把第一句当真要是饿了咋办?来份火锅涮涮!要是渴了咋办?去海边转转!要是没钱咋办?找个傻子骗骗!要是想你咋办?到猪圈看看!鸡是用做下蛋的,牛是有活就干的,猫是挨家混饭的,羊是将来烤串的,狗是让人来惯的,你是等着出圈的。医院(对患者说):严肃点,严肃点,不许笑,我们这儿打劫呢!音像公司(对盗版商贩说):有组织,无纪律!黑客:ip、ic、iq卡,通通告诉我密码!windows用户(对微软说):我们要的是安全,责任感!甲骨文(对仁科):我本将心照明月,奈何明月照沟渠!microsoft(对盗版):辛苦了,小鬼联想(收购ibm后):知我者谓我心忧,不知我者谓我何求?it业:二十一世纪什么最贵?人才!intel:你过得了我吗?amd:我想试试惠普:实话告诉你们,惠普很生气,后果很严重!戴尔:我最讨厌你们这样胡乱降价的了,一点技术含量都没有!ibm:"人心散了,队伍不好带了!"茶要喝浓的,直到淡而无味。酒要喝醉的,永远不想醒来。猪蹄要皮厚肉多的,噫,拿着手机的这只就不错!街边美女一挥手,路灯也要瞅一瞅;街边美女二挥手,高楼都想亲一口;街边美女三挥手,地球刹车往回走。

最感人的手机短信

维普资讯 http://www.cqvip.com

l  

璺 

贴 出了一 张 本市地 图 ,上面 标 有附 

近地区公用电话。  

他 的 出 版 商 朋 友 尼 奥 ?欧 唐 德 会 

家安 德 鲁 ?卡耐 基的 影 响 。在大 西  洋 慈善 会理 事 的记录 上 ,谈 到关 于  基 金会 的未 来时 ,费尼说 道 : “ 我 

认 为 , 除 非 富 人 们 在 一 生 中 用 财 富  来 帮 助 做 有 意 义 的 事 , 要 不 然 他 们  无 形 中 给 未 来 的 一 代 制 造 了 不 少 麻  烦 。”  

面 ,尼 奥 要求 他参 加支 持 主张 和谈  的非 官方 使节 组织 。最 终 费尼 同意 

向 共 和 党 党 派 及 其 支 持 者 提 供 基  金。  

“ 着 ,他 将 账单 送 到那 女 孩  接 的 父 亲那 里 ,” 费 尼  贝 利 小 姐 

说。 “ 时很令人尴尬。” 当  

在 美国互 助 生命 保 险 公司 周一  为该 书 出版而 举 办的庆 功 宴上 ,众  多来 自伊 丽 莎 白市的 费尼 的 儿时好 

友 前 来 为 他 喝 彩 。 同 时 到 场 的 还 有 

日落行动 

1 9 年 ,大 西洋 慈 善会 理事 决  99

定 将 基金 全 部 捐 出 而 不 是 继 续 保 

留 。 这 一 活 动 , 被 称 为 “日落 行 

出生 在新 泽 西州 一 个爱 尔兰  美国 工薪 家庭 的费 尼将 盖 尔人 的一 

句 谚语 铭记 在 心 : “ 衣是 没有 口   寿  

袋 的”。  

费尼 的 四个孩 子 。对于 费 尼疏 散 家 

财对 他 们造 成 了损失 的说 法 ,他们 

动 ” ,与大 多数 永 久持 有基 金的 慈 

善会是不同的 。  

嗤之以鼻。   “ 这有 些 奇怪 ,但 他 这样 做 ,   接 受 捐 赠 的 人 不 必 特 殊 对 待 我  们 , ” 莱 斯 利 ?费 尼 ?贝利 说 ,  

“ 让我们与正常人无异 。” 这  

其 他 捐 赠 机 构 也 拥 护 “日 落 行  动 ” ,其 中最 为 瞩 目的是 比尔 及梅 

大 西洋 慈 善 会表 示 主动 制定 终  止 基 金 的 时 间表 体 现 了创 立 者 查  克 ?费尼 的处 事精 神 与哲学 。这位  出身 企业 家 的慈善 家 的故 事 出现在  康诺 ? 克雷 的新 书  亿 万富 翁 不  欧

再》中。   作 为DF 环 球 免 税 集 团的 共 同 创  S

琳达

盖 茨基金 会 。它在 2 0 年表  06

示 ,将于 5 年 内在 最后 一位理 事 去  0

世 时 捐 尽 所 有 的 财 产 。 这 一 政 策 的 

费 尼 ?贝利 小姐 十 几 岁时 ,与  女友 一起给 欧 洲的 男生 打 了不 少长  途 电话 。当她 的父 亲发 现 了厚 厚的 

话 费 单 后 , 就 切 断 了 自家 的 电 话 ,  

建 议者 表示 ,如 此 可以 督促 基金 的 

形 成及 促 使基 金会 更快 、 更有效 地 

实 现 目标 。   ( 王 新摘 自 《 林》) 译

 

始人 之一 ,费尼 受到 了伟 大 的慈 善 

身体 庇护着 ,孩子 毫发 无损 ,安静 

地睡着。   随 行 的 医 生 解 开 被 子 ,准 备 给 

人 的 

孩子 做身体 检查 ,发现 有一部 手机 

塞 在 被 子 里 。 医 生 发 现 手 机 屏 幕 上 

手机短信 

● 时 光 倒 流 

有 一条 已经写好 的短信 。 “   亲爱的 

宝 贝 ,如 果 你 能 活 着 , 一 定 要 记 住 

我爱 你 ” 。在 场 所 有 的 人 都 震 撼 

了 ,落 泪 了 ,无 不 为 之 动 容 。  

母亲走 了,带着怎 样的 依依不 

舍 !孩 子 留 下 了 ,他 还 不 知 道 生 离  走 进 我 们 无 限 思 念 、 无 限  视 着 这 张 照 片 。 这 是 一 个 三 四 个 月  死 别 。此 时 此 刻 ,我 要 给 这 位 飞 升  

敬仰 的情怀之 中的母 亲 ,给 孩子 、  

给我 们、给 我们的后 人 留下 了 “ 史 

天堂 的母亲 发出这样 的短信 : “   亲 

爱 的 母 亲 , 你 安 息 吧 ! 我 们 一 定 会 

大 的婴儿 。他是汶 川大地震 成千 上  万 的幸存者 之一 。我们惊 叹他 生命 

的 顽强 。他犹如一 枝幼嫩 的花 朵 ,  

上最 感人 的手机短 信” 。让我们 一  遍一 遍 回顾 “ 生死 经典时 刻 ”,让  我们学会感恩 ,学会坚强 。   在一 堆废 墟的 间隙 ,这位母 亲  保 持着死 亡的姿 势一一双 膝跪 着 ,  

整 个 上 身 向 前 匍 匐 着 ,双 手 扶 着 地  

好好 照料你 的孩子 ,让 他快 乐健 康  地成 长。你 活着 ,你活 在每一 个人  的 心 中 !” 我 深 信 ,她 一 定 会 收 

到 。生 死 相 连 ,天 地 相 连 。   伟 大 的 母 亲 以 死 亡 的 姿 势 扞 卫  了生存的 飞翔 。让死难 者安 息吧 。  

奇迹 般地 突破 了种 种苦难 ,向 我们 

重 现 了生 命 的 生 机 !   你 知 道 吗 ? 你 们 知 道 吗 ? 这 是 

位伟大 的母 亲创造 的奇迹 !是这  位伟大 的母 亲用 自己的生命 延续 了  孩子的 生命 。是 爱 ,是母爱 ,是绵 

支撑着 身体 ,像古人 行跪拜 礼。在  她 的身体 下面躺 着她 的孩子 。这个  只有三 四个 月大 的孩 子 ,包 在一 个 

切幸存 者好好 地活 着 ,重 新 回归 

快 乐与幸 福 ,就 是对死 难者 最好的  悼念 。  

( 天 女 摘 自1o博 客 ) 小  k 7  

绵 不 绝 的 大 爱 ,感 动 了 天 地 ,感 动  了 历 史 、现 实 与 未 来 。 这 位 已 经 走 

红 色带 黄花的 小被子里 。 因为母亲 

12l现代计算机 ? 1 【 阅读】I20 6     08? 月

经典情人手机短信

?  ·摘尽世间的玫瑰,用遍天下的语言也无法表达我的爱,只好两手空空,两眼痴痴,献上两滴人类有史以来最痴情的泪。

·经典搞笑情人短信-让我的爱穿越一千四百公里的时空,只是想告诉你,我仍默默的爱着你。

·你好似那清澈的泉水,滋润着我枯竭的生命。懂得珍惜爱情的人,才会了解爱情的可贵,我的生命因你而精彩。

·爱情不仅是鲜花、微笑、亲吻和春风,它同时又是严寒时的青松,黑夜中的火花,长途跋涉中手和手的相互搀扶。

·只要有爱情,鱼在水中游,鸟在天上飞,黑夜也透明;失去了爱情,断了弦的琴,没有油的灯,夏天也寒冷。

·恋爱是开启人生秘密的钥匙。如果抽掉爱情,那么人生就会变得无色无味。

·爱情是心与心的默契,一对恋人间的一个眼神,胜过一部荟萃了爱情的巨着。

·你蘸着热恋的情感,为我写下滚烫的诗行,用心酿成了爱的琼浆。

·亲爱的,请你笑一笑。要知道,如果你流泪,湿的总是我的脸;如果你悲戚,苦的总是我的心。

·忘不了你弯弯的笑眉,陪伴我度过漫漫长夜。流走的是悠悠岁月,留下的是片片真情。

·我们曾经是天上飘下来的雪花,本来互不相识,但落地之后,便结为一体,结成冰,化成水,永远也就不分开。

·认识你我很好运,想念你我很快乐,爱上你我很幸福。我别无所求。

·我是一棵开花的树,长在你必经的路旁,阳光下慎重地开满了花,朵朵都是我前世的企盼。

·依昔往梦似曾见,心内波澜现。抛开世事断愁怨,相伴到天边。

·是你编织一张温柔结实的情网,让我深陷其中,此生难以自拔!

·爱只会逗留在清纯的灵魂里。恋爱是艰苦的,不能期待它象美梦一样出来。因为艰苦所以我会珍惜你的爱。

·送你一朵玫瑰,那是我心中惟一的一朵。只有配戴在你的胸前,它才不会枯萎。

·钻石闪耀,玫瑰吐艳,情话绵绵。原来,我就是这样被你征服。

·夜空繁星点点,不知了解我心的到底有几颗;只知道茫茫人海中,值得我永远珍惜的只有你一个!

·我想和你相伴相随过一生,爱你疼你到永远!

·经典搞笑情人短信-你是天上一仙女,我是地上好牛郎。爱你的情比天高,比海深。

·若不是世间有风,浮云又怎会流动;没有生,哪有死;没有聚,哪有散,爱你的心不知所踪。

·当岁月燃烧我的一切时,不能忘记的是你那一眼的风情;当我合上双眼时,我渴望的仍是你那一眼的风情!

·抱着你是一种快乐,吻着你是一种陶醉,爱着你是一种刻骨铭心,所以我会用我的一生来换取这份感觉!

·正是因为爱才悄悄地躲开,躲开的是身影,躲不开的是默默的情怀;今天我终于鼓起勇气,向你表达我的爱。

·爱你爱到海枯石烂!你的容颜朝夕相盼!一生只想有你相伴!生生世世决不遗憾!

手机短信2

  1、平安夜里送心愿,所有愿望会实现,愿你的家庭美团圆,愿你的事业辉煌展,愿你的爱情比蜜甜,愿你的生活幸福伴,愿你的钞票数不完,愿你的好运一串串,祈愿大家平平安安,快乐永远。

  2、循着雪花翩翩飞舞的身姿,踩着月亮朦胧温柔的身影,嗅着空气中弥漫的快乐幸福的味道,我在无垠的夜空里写下一串真纯的文字,愿你这个平安夜,平平安安,愿这文字化作片片纯净的花朵时刻荡在你的心扉,伴你左右,保你平安。

  3、烟花点亮夜空,祥瑞缕缕飞向你;雪花漫舞大地,幸福片片飘向你;钟声回荡星河,喜悦阵阵传向你;炉火温馨满屋,团圆暖暖围向你。平安夜,送你一个短信化作的苹果,愿平安天天守着你。

  4、祈祷的钟声响起,心中的思念涌动。一年一年时光逝去,平安夜里再次想起你。愿平安夜的钟声传到你的耳边,将我的祝福带到你的心里。祝平安夜吉祥快乐!

  5、唱一支平安歌给你,每一个音符听来平淡无奇,但令人安神。写一封平安信给你,每一个字符看来平平常常,但使人安心。文章平安夜祝福语 祝愿你平安托起幸福!平安夜,愿你一生平安。

  6、“平安”:你的心愿,我的心愿,连成一个“同心圆”;你的平安,我的期盼,写成一个“和谐梦”;平安夜,一串祝福,一份心意,愿你平平安安快快乐乐!

  7、平安夜的钟声又响起,雪花飘舞在美丽的天空里,思念绽放在灿烂的烟火里,快乐荡漾在温暖的祝福里,愿平安陪伴在你的日子里,幸福紧握在你的手心里!幸福窃取平安夜的柔美,为你奉上甜美的温馨;平安摘取圣诞树的果实,为你积累欢愉的灵气儿;欢愉穿越寒冷的时空,为你洒落幸运的因子;祝你从此踏上成功的征途,祝平安夜快乐!

  8、平安夜每一朵雪花的洒落,每一簇烟花的燃放,每一秒时间的挪动,每一刻思念的传送,都饱含我为你精心调制的无悔快乐祝福,洒落时倾诉,燃放时迸发,挪动时残留,思念时传播,祝你平安夜快乐!

  9、平安夜祝平安,短信悄悄表祝愿,雪花窗前静静飘,圣诞钟声轻轻敲,今夜心情多美妙,忧愁烦恼脑后抛,福气运气来报道,幸福快乐来环绕,合家欢乐吉星照,健康平安步步高!

  10、无助时,总会想到你的眼,温柔坚定,好似春日的湖畔。疲惫时,总会想到你的肩,宽厚温暖,好似泊船的港湾。你是我此生的眷恋,你的平安是我最大的心愿。

用单片机发手机短信

用单片机控制手机收发短信息

文章作者:李 鸿

摘要:介绍用MCS-51系列单片机控制手机收发短信息的原理、硬件电路、PDU数据格式和符合GSM07.05协议要求的短信息发送/接收程序,同时给出了一个应用实例。

关键词:单片机 短信息 PDU GSM 接口

GSM(Global System for Mobile communication)系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的一种系统。目前已建成的覆盖全国的GSM数字蜂窝移动通信网,是我国公众移动通信网的主要方式。主要提供话音、短信息、数据等多种业务。基于GSM短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,能广泛用于远程监控、定位导航、个人通信终端等。由于公众GSM网络在全球范围内实现了联网和漫游,建立上述系统不须再组建专用通信网络,所以具有实时传输数据功能的短消息应用将得到迅速普及。

目前,人们设计的各类DTE设备基础上以微处理器为核心,带有RS232/RS485等通信接口,在物理层上很容易实现与GSM设置(如手机等)的连接。但对SMS协议的研究文献却较少,特别是用单片机控制手机的SMS(Short Message Service)收发的研究更少。笔者在用单片机设计基于GSM的SMS数据采集器时,对怎样用单片机控制手机收发短信息进行了探讨。

1 串口控制SMS的工作原理

单片机与手机一般采用串行异步通信接口,具有红外和通信电缆两种连接方式,通信速度可设定,通常为19200bps。采用红外接口的优点是单片机系统与手机电气隔离,相互不干扰,接口各自独立,使用方便;缺点是通信距离较短,红外传播的方向性对接口相对位置有要求。采用电缆连接时,数据传输的可靠性较好;其主要缺点是接口的电气参数不兼容,设计不当时会对手机的通信质量产生影响。笔者经过实践设计的接口电平转换电路如图1。

GSM的短信息业务SMS利用信令信道传输,这是GSM通信网所特有的。它不用拨号建立连接,把要发的信息加上目的地址发送到短信息服务中心,经短消息服务中心完成存储后再发送给最终的信宿。所以当目的GSM终端没开机时信息不会丢失。每个短消息的信息量限制为160字节。

现在市场上大多数手机均支持GSM07.05规定的AT指令集。该指令集是ETSI(欧洲通信技术委员会)发布的,其中包含了对SMS的控制。利用GSM手机的串行接口,单片机向手机收发一系列的AT命令,就能达到控制手机收发SMS的目的。ETSI的GSM07.05中用于SMS收发控制的主要AT命令见表1。

表1 常用AT指令

欢迎光临中国最大的电子工程师应用网站

网址:www.bbww.net

GSM07.05 Function(功能)

ATE0 RESET

AT+CSMS 选择短信息服务

AT+CPMS 选择短信息内存

AT+CMGF 选择短信息格式

AT+CSCA 短信息中心地址

AT+CNMI 显示新收到的短信息

AT+CMGR 读短信息

AT+CMGS 发送短信息

AT+CMGL 列出SIM卡中短信息

AT+CMSS 从SIM内存中发短信息

AT+CMGW 向SIM内存中写入待发短信息

AT+CMGD 删除SIM内存中的短信息

AT+CSCB 选择蜂窝广播信息

GSM手机通过异步通信接口实现对SMS的控制共有三种接入协议:Block Mode;基于AT命令的TextMode;基于AT命令的PDU Mode。PDU模式是发送或接收手机SMS信息的一种方法,短信息正文经过十六进制编码后被传送。目前,PDU Mode应用最为广泛,基本上全国所有的电信局都提供支持PDU Mode的短消息业务。有些地址则不支持Text Mode和Block Mode,这就限制了这两种接入协议的应用,而且PDU Mode已有取代Block Mode的趋势。为了保证系统具有广泛的适用性,本文采用PDU模式收发SMS。

PDU相当于一个数据包,它由构成消息(SMS)的信息组成。作为一种数据单元,它必须包含源/目的地址、保护(有效)时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以十六进制表示。PDU结构根据短消息由移动终端发起或以移动终端为目的而不同。

当由移动终端发起时,PDU的格式为:

SMSC PDU类型 MR DA PID DCS VP UDL UD(0~140octed)

当以移动终端为目的时,PDU的格式为:

SMSC PDU类型 OA PID DCS SCTS UDL UD(0~140octed)

其中,SMSC为短消息业务中心地址,DA/OA为源/目的地址,PID为协议识别,DCS为数据编码,UDL为用户数据长度,UD为用户数据,VP为有效时间,MR指明是发出信息,SCTS指明短消息到达业务中心的时间。

2 PDU格式下短信息的接收

根据设置不同,手机将收到的短消息保存在缓存单元或存入SIM卡,单片机从手机中接收短消息实质上就是从SIM或缓存中读出信息。这主要利用AT+CMGR和AT+CMGL两条指令来完成,其工作过程见图2。

欢迎光临中国最大的电子工程师应用网站

网址:www.bbww.net 2

由于不同的厂商对AT指令集的解释代码和响应信息不一样,所以单片机首先要确认能否与手机建立起通信,一般用ATE指令完成此确认;然后用AT+CMGF指令选定短消息的数据格式;在收到手机的正确回答反以AT指令完成读出功能。一般用AT+CMGL读取以前的信息,在收到手机的RING(振铃)数据时,用AT+CMGR读取实时信息。

以下是笔者设计的物流数据采集系统中用到的接收SMS的一个实例,它说明了PDU模式的应用。单片机发送和接收(手机回答)均为ASCII码。所用手机为SIEMENS S3508i。

操作过程如下({}内为注释):

发送:ATE

手机回答:OK {已建立联接}

发送:AT+CMGF=0 {选用PDU格式}

手机回答:OK {允许选择PDU格式}

发送:AT+CMGL=2 {列出已有的短信息}

手机回答:+CMGL:1,2,,24{1表示信息个数,2表示未发信息,24表示信息总容量}

0D71683108370105F004000D81683179133208F10000026080410033802632184CF682D

95E0DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608

OK

以上这组PDU格式的十六进制字符串,不但包含了短消息的内容,同时包含了发送者的手机号码、短信息中心号码、短消息发送时间等。

下面对信息内容进行分析:

0D:短信息中心地址(号码)长度。

91:短信息中心号码类型,91是TON/NPI。TON/NPI遵守International/E.164标准,指在号码前需加号;此外还可直有其他数值,但91最常用。

683108370105F0:SMSC 短信息所使用的服务中心号码13807310500。它经过十六进制以字节为单位的高低半字节换位处理,号码是奇数的添F,构成一个HEX字节。

04:PDU类型,文件头字节。

欢迎光临中国最大的电子工程师应用网站

网址:www.bbww.net 3

0B:主叫号码长度。

81:主叫号码类型。

3179133208F1:0A主叫号码,也经过了处理,实际号码为13973123801。

00:PID,为协议标识。

00:DCS短信息编码类型是GSM Default Alphabet,即由7位ASCII码移位组成8位十六进制码(octet),其方法见表2。

1sthex B0 A6 A5 A4 A3 A2 A1 A0

2ndhex C1 C0 B6 B5 B4 B3 B2 B1

3rdhex D2 D1 D0 C6 C5 C4 C3 C2

4thhex E3 E2 E1 E0 D6 D5 D4 D3

5thhex F4 F3 F2 F1 F0 E6 E5 E4

6thhex G5 G4 G3 G2 G1 G0 F6 F5

6thhex H6 H5 H4 H3 H2 H1 H0 G6

02608041003380:SCTS短信息发送时间,02/06/08/14:00:33.08。

26:UDL经处理后的8位码(octet)短信息字节长度,它小于消息ASCII码的长度。

32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608:UD 编码后的PDU数据,短信息内容“2002/06/08/13:48ID102OKID103OK ID201FAIL”。

3 短信息的发送

与接收短信息一样,发送时也要先建立联接,传送一些初始化指令,然后发送短消息内容。下面是用SIEMENS S3508i发送一个短信息的例子,内容为:“2002/06/08/13:48 ID102OK ID103OK ID201FAIL”。其ASCII码为:“32030322F30362F30382F31333A34382049443130324F4B

2049443130334F4B2049443230314641494C20”。

发送:ATE {请求建立联接}

手机回答:OK {已建立联接}

发送:AT+CMGF=0 {选择PDU模式}

手机回答:OK

欢迎光临中国最大的电子工程师应用网站

网址:www.bbww.net 4

发送:AT+CSMS=0{检测手机是否支持SMS命令}

手机回答:OK

发送:AT+CMGS=52{发送短信息,52 octets(不包括最初9个短信息元字节)}

手机回答:>{允许上传数据,ASCII码是($20H,$2EH)}

发送:0891683108701305F011000B813179133208F10000AA2632184CF682D95

E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B19834926081A

不计最初9个短消息信元字节,本短信息有52字节(104个字符)。AT+CMGS仅说明了SMSC信息内容的长度,在收到手机回答的>符号手才发送PDU数据串,并以(CTRL^Z)结束。

PDU数据串的内容说明如下:

08:短信息信元SMSC(短信息中心号码)的字节长度

91:短信息中心号码类型,91表明中心号码是国际通用电话号码。

683108701305F0:短信息中心号码:8613807310500。

11:PDU SMS发送的文件头字节。这里11指正常发送短信息。

00:信息类型。这里00指让手机自动加上主叫号码。

0B:被叫号码长度。

81:被叫号码类型。

3179133208F1:被叫号码13973123801。

00:协议标识。

欢迎光临中国最大的电子工程师应用网站

网址:www.bbww.net 5

电脑短信群发与手机短信群发平台有什么区别

电脑短信群发系统平台与手机短信群发平台区别 手机是人们生活中不可缺少的一部分了,如果有一天,你不吃早餐觉得无所谓,不带手机的话,估计你一天都会过得很忐忑的。

或许就是多数企业除了纸媒体、网络媒体、楼宇户外广告做宣传推广外,同时也会选择“短信群发”方式来做推广的原因吧!短信广告,又是低成本,高回报的推广方式,收到短信,都想看一眼内容吧?像:房地产广告、化妆品广告、促销活动、教育培训等等。网络越来越年轻化了,不少网店也选择以短信方式与买家联络感情。 说了这么多,那么短信群发如何使用呢?

短信群发分为:电脑短信群发平台和手机短信群发系统平台 先介绍下电脑短信群发平台吧:

1.先注册(是免费注册的哦)

注册个账号,也是群发系统软件的管理后台(免费使用的哦),这个后台作用很大呢

我先一步步介绍下吧

2.注册成功了,那我们购买短信吧

3.购买成功后,那我们现在去群发了

先登录群英CC客户端或者通过www.qycn.com/sms登录哦

支持

excel、txt格式批量导入接收人手机号码,操作快捷方便。

发送成功了

发送后即时反馈发送状态报告,成功后计费。

多种发送方式选择哦!

下面了解下手机群发短信平台是怎么样操作的吧?

群英短信群发系统支持手机群发短信,模拟手机短信发送界面,类似手机发送方式,操作更简单。手机版短信群发让你摆脱电脑束缚, 真正实现随心所欲随时随地发送信息,轻而易举,让商机一触即发!

手机登录,群发短信不受地域限制。

平台详细记录短信充值、发送、接收、短信余额的所有数据,账户及

发送详情一目了然。

企业可通过短信接口实现对短信群发系统的二次开发,完善您的企业应用。

给客户发的手机短信

1.友情的祝福 拥有一份美好的友谊 如拥有一份鲜美的祝福 愿您健康快乐 但愿我千万个祝福 永远陪伴您左右 最是难忘的好友?? 象朵鲜花 散发芬芳友谊 说声珍重 那声珍重 有甜蜜的回忆和祝福

2.感谢您一直以来的支持,值此周末之际,祝您和您的家人周末愉快!

3.搜集每一次的真诚,让我们感受合作的愉快;寻找每一份的真情,让我们携手共创未来;送上每一天的问候,愿您事业一帆风顺,生活快乐开怀。

4.友谊是那永不褪色的画,千山万水,在心中珍藏;友谊是那永不凋零的花,千秋万载,在心中开放;愿我们友谊之花常开,锦绣前程常在,合作永远愉快!

5.真诚的关怀,美好的祝福,无尽的心意,祝您好运 愿世界最美好的事物,永远陪伴在您左右,祝您美梦成真! 将心底最衷诚的祝福送给您,祝您心想事成,春风得意。

6.请别用尺量 别用斗量 我诚挚的友情 请用您的心灵去感应 今后——无论您到哪里 请将我的祝福带着?? 默祷 我心三愿 一愿友情温暖心田 二愿欢乐长驻人间 三愿和您常常相见 花开如梦,风过无痕 只为心中的思念?? 遥寄一份浓浓的祝福给您

7.纯蓝的天空,足以沉淀一周忙碌的心情。透明的阳光,足以温暖一周疲惫的心灵。常常觉得世界不够安静,但此刻您会感受到别样风景。轻声问候:周末快乐!

8.风起云涌,不甘落寞,人生航线,竞争激烈,奋发图强,立志坚定,大胆创新,不拘一格,思变求稳,锐意进取,大事可成,祝君事业顺

利!

9.日子和和美美,生活幸福安康,工作省心省力,事业蒸蒸日上,万事大吉大利,一切顺风顺水,祝君好运,安享幸福。

10.生活工作与上班,出入快乐与平安,样样开心都顺利,事业扶摇乘风起,烦恼郁闷离得远,快乐幸福常相伴,祝您工作愉快,上班开心,下班欢心。

11.放下一周的疲惫,开心的享受周末,轻轻的一句问候,给您带去的祝福,祝您周末愉快!

12. 一句平安、句句心语 数不尽怀念思绪,应是殷殷祝福您?? 幸福欢乐!平安如意! 银波为笺 风帆为词 祝福您无忧无虑 乘风破浪,开拓远大前程 人生是一连串的努力和奋斗 只要您意志坚定努力不懈 一定会成功 祝福您一帆风顺

13.阳光给您温暖,月亮给您温馨,大地给您幸运,微风给您清爽,玫瑰给您浪漫,而我给您祝福。祝福您所有的一切都称心如愿,祝福您所有的梦想都实现。

14.第一次握手,信任是您我的共有;第一次对笑,支持是您我的需要;第一次短信,问候是您我的真心;第一次合作,双赢是您我的承诺。祝您万事大吉。

15.感谢您一直以来对我们工作的支持,在这个周末里,希望忙碌了一个星期的您能够好好地休息,祝周末愉快,事业顺利!

16.问候一声:周末好,愿凉爽的夏风吹走的是您的烦恼,带来的是一整个星期的好运。

17.用琵琶弹奏一曲东风破,祝您好事多多,用吉他弹奏一曲七里香,祝您心情阳光,用钢琴弹奏一曲魔杰座,祝您周末快乐。

18.最近天气多变,请注意您的身体健康,愿您度过一个轻松愉快的周末。

19. 拥有一份美好的心情,如拥有一份诚挚的祝福。愿您健康,愿您快乐,但愿我千万个祝福永远陪伴您左右。

20.又到周末,忙碌了一周的您可以稍稍休息一下了,愿冬日的暖阳伴您渡过一个轻松愉快的周末!

21.这是个惬意的宁静世界,阳光灿烂如昔,柔风轻轻如昔,但愿美好的时光就这样驻足,带给您欢欣与鼓舞,周末愉快!

22.愿阳光洒满您前进的道路,愿花儿开满您生活的旅途,愿我最真诚的祝福,带给您无尽的喜悦,愿您每一个今天都过得幸福,愿您每一个周末都快乐!

23.周六周六,万事顺遛,顺风顺水乐悠悠。风吹忧愁走,水送财运留,家圆业兴争上游,,更上一层楼。闲暇会好友,意浓情更厚。祝身康心怡,周六快乐!

24.时光流逝人情在,团结合作共谋财;光阴难留心永恒,合作万岁好心情;岁月飞奔友谊留,开创未来一起走。

25.共同劈波斩浪,面对惊险;一起高歌向前,收获喜悦。这一路走来既有艰辛也有欢乐,但更多是种下了许多希望的种子。愿明天合作更美好!

26.别因太多的忙碌冷淡了温柔,别因太多的追求湮没了享受,工作不是人生的全部,停停匆匆的脚步,请享受生活的赐福!周末愉快!

27.时间因祝福而流光溢彩,空气因祝福而芬芳袭人,心情因祝福而花开灿烂,当您打开信息时,愿祝福让您轻松此时此刻!周末愉快!

28.把心情放轻松,用一颗平常的心去对待一切,不必太强求,开心最重要! 工作是做不完的,身体可是累得垮的,健康是生命的本钱。多多善待自己吧!新的一天又开始了,愿您有个好心情,周末愉快!

29.时间因祝福而流光溢彩,空气因祝福而芬芳袭人,心情因祝福而花开灿烂,当您打开信息时,愿祝福让您轻松此时此刻!周末愉快!

30.福气满满;快乐连连;万事圆圆;微笑甜甜;一帆风顺、二龙腾飞、三羊开泰、四季平安、五福临门、六六大顺、七星高照、八方好运、九九同心、十全十美。。祝您过一个幸福的周末!

31.祝您:周末大吉大利、百无禁忌、五福临门、富贵吉祥、横财就手、财运亨通、步步高升、生意兴隆、东成西就、恭喜发财。

32.周末又到,向您问个好:办事处处顺生活步步高;彩票期期中好运天天交;打牌场场胜口味顿顿好;家里出黄金墙上长钞票!

33.送您一个惬意的宁静周末,愿您的生活阳光灿烂,爱情柔风细雨,快乐永久长驻,事业欣欣向荣,投资欢欣与鼓舞,家人健康长寿,周末愉快!

34.生活不能被工作疲惫,情趣不能被压力整没,希望不能被环境摧毁,梦想不能被现实PK,但是到了周末,大家绝对可以好好睡!周末快乐,祝您欢笑纷飞!

35.别因太多的忙碌,冷淡了温柔;别因太多的追求,湮没了享受;工作不是人生的全部,停停匆匆的脚步,请享受生活的赐福!周末愉快!

36.也许祝福只是一种形式,但却能给心灵带来温馨,我们都把关心发给彼此,一样的日子一样的心声:周末愉快!

37.时间因祝福而流光溢彩,空气因祝福而芬芳袭人,心情因祝福而花开灿烂,当您打开信息时,愿祝福让您开心此时此刻!周末愉快!

38.炎炎夏日,奉上真诚的问候,愿它化做晨溪与朝露,清凉惬意滋润心头!吹响祝福的风笛,为您把锦瑟弹奏.祝周末愉快

39.送一份美丽让周末好心情,送一份关怀让您骄傲,送一份青春让您不老,送一份梦想让您实现,送一份友情不需回报,再送您平安才算可靠!祝您周末快乐!

40.晚上笑一笑,睡个美满觉;工作之余笑一笑,心会跟着音乐跳,收到短信笑一笑,一切烦恼都忘掉,祝您周末愉快!

41.工作辛苦,多休息。听听音乐,玩玩游戏。多吃蔬菜,少发脾气。要是无聊,跟我联系。周末到了,祝您事事顺利!

42.家常美味养养胃,新鲜空气润润肺,暖暖阳光晒晒背,融融被窝睡一睡。周末有滋又有味,生活一定格外美!

43.一首音乐,轻松和谐;一个问候,关怀体贴;一阵微风,清凉舒适;一条短信,温馨弥漫...手指一按,送去我春天的祝福:周末快乐!

44.夏日高温不退,伴着一缕清风为您送来这一季的祝福,原您清凉一“夏”,愿轻松和愉快萦绕在您身边。

45.周末又到,向您问个好:办事处处顺生活步步高;彩票期期中好运天天交;打牌场场胜口味顿顿好;家里出黄金墙上长钞票!

46.周末到,祝您周末喜气洋洋,满面阳光灿烂,爱情扬眉吐气,事业洋洋得意,晦气扬长而去,万事阳关大道!

47.也许祝福只是一种形式,但却能给心灵带来温馨,我们都把关心发给彼此,一样的日子一样的心声:周末愉快!

48.福气满满;快乐连连;万事圆圆;微笑甜甜;一帆风顺、二龙腾飞、三羊开泰、四季平安、五福临门、六六大顺、七星高照、八方好运、九九同心、十全十美。.祝您过一个幸福的周末

49.祝您:周末大吉大利、百无禁忌、五福临门、富贵吉祥、横财就手、财运亨通、步步高升、生意兴隆、东成西就、恭喜发财!

50.春风洋溢您、家人关心您、爱情滋润您、朋友忠于您、我在这儿祝福您、幸运之星永远照着您!

51.一个灿烂的微笑、一缕淡淡的春风、一声亲切的问候、一个衷心

的祝福、都在这个温馨的日子里、来到您的身边!

52.思念是永恒的主题,祝福是不变的牵挂,想起朋友的感觉,就像享用一杯清茶,又是周末来到,愿您放松身心笑一笑,窗外的春光很美妙。

53.阳光,送给您温暖;流星,许给您愿望;花香,捎给您甜蜜;朋友,带给您快乐;短信,传给您祝福。又是周末,愿您幸福满满,笑容甜甜!

54.周一祝福送新意,周二联络表心情,周三繁忙谈生意,周四疲倦悄然至,周五期盼下班时,周六周日逢休息,好好缓气补元气,祝您一周都如意。

55.数过的一天一天,丢失的分分秒秒,挽着时间的胳膊,流失了青春年少。又一个周末来到,有放松才有活力。有停驻才能跳的更高。好好的放松自己,明天才会更好!

56.又是一个周末到,祝福短信跟着来!祝您下周一一帆风顺,周二二满三平,周三三羊开泰,周四四季发财,周五五福临门,周六六六大顺,周日日子美满!

57.收拾起忙碌的心情,整理好久违的记忆,牢锁住工作的搅扰,忘记掉所有的压力。对花儿微笑,对小鸟问好。又一个周末来到,短信一条,祝周末愉快!

58.如果说一杯香茶,能让疲惫的身体得到缓解和放松。一本好书,能让烦躁的心灵得到过滤与休憩。那么一个周末则是心灵休憩的驿站。周末愉快!

59.周末七定律:一收敛兴奋,二把握机遇,三全身投入,四稳住性子,五周末冲刺,六褪去疲劳,七温馨内外。转眼又到周末,朋友,周末快乐。

60.牵挂是灵魂絮语,是心灵对话;周末了,发一条短信,送一份祝愿,愿您周末舒心,生活顺心,一切开心!

61.您真的不想看这条短信吗?您真的真的不想看这条短信吗?您真的真的真的不想看这条短信吗?可是这跟我有什么关系呢?看到这里笑一笑,周末愉快

62.送走5天的繁忙,忘掉5天的苦恼,脱去5天的疲惫,丢弃5天的压力。周末来到,睡个懒觉,动动筋骨,让微笑始终围绕,让轻松成为主流,周末快乐!

63.打开的是吉祥,看到的是鸿运,愿所有期望和祝福涌向您,祈望您心情舒畅万事顺意,愿这美好心愿化作真挚的祝福送给您:周末开心百分百,生活更精彩!

64.好的美景我会记住,好的季节我会留恋,好的信息我会珍藏,好的朋友我会珍惜,好的微笑我会留住,好的祝福我会给您,祝周末快乐!

65.友谊是那永不褪色的画,千山万水,在心中珍藏;友谊是那永不凋零的花,千秋万载,在心中开放;愿我们友谊之花常开,锦绣前程常在,合作永远愉快!

66.日子和和美美,生活幸福安康,工作省心省力,事业蒸蒸日上,万事大吉大利,一切顺风顺水,祝君好运,安享幸福。

67.生活工作与上班,出入快乐与平安,样样开心都顺利,事业扶摇

乘风起,烦恼郁闷离得远,快乐幸福常相伴,祝您工作愉快,上班开心,下班欢心。

68.忙碌的生活带走的只是时间,对朋友的牵挂常留心底,一声问候一个祝福,在这美丽神怡的日子里祝您周末愉快!

69.一句轻轻的问候是蜜,把您甜透,一份深深的祝福是光,照您永久。一弯遥遥的牵挂是虹,把您守侯,一缕轻柔的关怀是水,伴您年龄不管您拥抱多少快乐,此时此刻,我依然为您祈祷祝福:每天开心快乐!永远健康幸福!周末痛快

70.快乐5+2新口号:工作5天快快乐,充实自我不打折;周末2天笑呵呵,放松娱乐享糊口;每天欢声笑语过,烦恼无聊都没辄。周末短信齐来往,共欢乐!

71.周末休息一两天,朋友一起聚聚餐;网上聊聊侃大山,快乐糊口总无穷;一日三时幸福餐,身体健康心里甜。祝周末快乐,开心到永远!

72.人逢周末精神爽,朋友祝福排成行。时来运转眼前亮,生活行情直看涨。但遇好事皆成双,出入平安人吉祥。心情愉悦能收放,福泽深厚更绵长!

73.有朋友同行是种安全,有朋友鼓励是种力量,有朋友想念是种幸福!朋友,祝您开心每一秒,快乐每一天,周末快乐。

74.送您一个惬意的宁静周末,愿您的生活阳光灿烂,爱情柔风细雨,快乐永久长驻,事业欣欣向荣,投资欢欣与鼓舞,家人健康长寿,周

末愉快!

75.周末转瞬到眼前,我用真心许个愿;愿您天天赚大钱,时时刻刻喜开颜;事事顺心都喜欢,下周工资翻几番。祝周末愉快!

76.周末七主意:一娱乐减压,二欢乐强心,三快乐健身,四开心会友,五静心养性,六舒心生活,七温馨内外。转眼又到周末,朋友,试着做吧。

77.快乐陪周一,幸运伴周二,轻松有周三,温馨携周四,愉悦同周五,休闲找周六,潇洒属周日;祝愿您一周舒心,周末愉快!

78.这个短信有五个目的:一继续巴结关系,二看您手机丢没丢,三提醒您我的存在,四说明我很在乎您,五听说周末您请客,我一定到场!

79.月光很美,比不上朋友的安慰;星星很美,比不上友情的点缀;夜空很美,比不上友谊的珍贵。愿您夜夜都有好梦,天天快乐相随,时时把我想起!

80.也许祝福只是一种形式,但却能给心灵带来温馨,我们都把关心发给彼此,一样的日子一样的心声:周末愉快

81.周末来到发发信息,动动手指加强联系,前途坦荡事业顺利,夫妻和睦温馨甜蜜,勤来锻炼疾病不袭,幸福幸运全是福气,奋发有为扬眉吐气,周末开心!

82.岁月带走了时间,却了加深了友谊;距离阻挡接触,却增添了牵挂;在这美丽的周末我真诚地祝愿您永远健康快乐!

83.炎炎夏日多吃瓜,补水防暑降血压。生津止渴吃西瓜,除烦解暑吃冬瓜,清热泻火吃丝瓜,排毒养颜吃苦瓜。一日三餐不离瓜,健康生活笑哈哈!

84.夏季晚睡早起,午睡不可错过。居室通风凉爽,防止暴晒湿热。饮食清淡即可,补水莫待口渴。常备消暑药物,防患未然最妥。祝您度夏快乐!

85.春风洋溢您、家人关心您、爱情滋润您、朋友忠于您、我在这儿祝福您、幸运之星永远照着您!

86.福气满满;快乐连连;万事圆圆;微笑甜甜;一帆风顺、二龙腾飞、三羊开泰、四季平安、五福临门、六六大顺、七星高照、八方好运、九九同心、十全十美。.祝您过一个幸福的周末!

87.周末又到,向您问个好:办事处处顺生活步步高;彩票期期中好运天天交;打牌场场胜口味顿顿好;家里出黄金墙上长钞票!

88.感谢您一直以来对我们工作的支持,在这个周末里,希望忙碌了一个星期的您能够好好地休息,祝周末愉快,事业顺利!

89.一斤花生二斤枣,好运经常跟您跑;三斤苹果四斤梨,吉祥和您不分离;五斤桔子六斤蕉,财源滚进您腰包;七斤葡萄八斤橙,愿您心想事就成;九斤芒果十斤瓜,愿您天天乐开花。

90.风吹忧愁走,水送财运留,家圆业兴争上游,,更上一层楼。闲暇会好友,意浓情更厚。祝身康心怡,周末快乐

91.送您杯茶,以芬芳的祝福为叶,温柔的叮嘱做花,用沸腾的热情为水,宽容的包容当杯,喝出您一天好心情和周末的祝福!

92.一条短信 ,一种心情;一声问候,一片温馨;一点距离,一份牵挂;一颗真心,一个愿望;一起祈祷,一切如意!周末快乐!

分页:12?3

Tags:手机短信群发怎么发? 电脑免费发手机短信? 苹果手机短信群发? 如何开发客户? 怎么开发客户? 如何开发新客户? 开发新客户? 发给客户的短信? 怎么开发新客户? 怎样开发客户?

搜索
网站分类
标签列表
后台-系统设置-扩展变量-手机广告-栏目/内容页底部