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

📄 pdusms.java

📁 首先在串口上连接一个或者多个MODEL(简单的说就是可以收发短信的手机)
💻 JAVA
字号:
import java.util.*;


public class PduSms {
	private  String Pdu; //整个PDU串
	protected int   Index; // 2 短信索引 +CMGL:2,1,,67
	protected int   State;//1
	protected int   PduLen; //67
	protected String SCA;  //短信中心地址
	protected int    Head;//头字节
	protected int   MTI;  //短信发送方向
	protected int   SRI;  //
	protected int   UDHI;  //User Data中是否有头字节
	protected int   RP;    //回复路径     
	protected int    FCS=0; //短信报告中,发生错误的原因
	protected String OA;    //发生者的地址
	protected int    PID;  //协议编号
	protected int    DCS;   //解码类型 08 04 00 unicode ascii gms
	protected String SCTS;   //短信中心时间戳
	protected int    UDL;   //用户数据长度
	protected String  UD;    //用户数据
	public  int  Sms_Type;   //短信类型
	public   PduData  pduData; //对应不同类型的短信,
	                          //使用不同的对象PduData进行处理
	
	public static final String[] SMS_TYPE={"SMS-DELIVER","SMS-SUBMIT",
		                  "SMS-STATUS-REPORT","SMS-MMS-NOTIFICATION"};
	
	public PduSms(String prefix, String pdu )throws Exception
	{
	 Pdu=pdu;
	 String s=prefix.substring(6); //12,1,,146
	 String[] ss=s.split(",");
	 if(ss.length>3)
	 {
	 Index=Integer.parseInt(ss[0].trim(),10);
	 State=Integer.parseInt(ss[1].trim(),10);
	 PduLen=Integer.parseInt(ss[3].trim(),10);
	 }
	 if (State>1) throw new Exception("SMS State=0 or 1 "); 
	 //只解释收到的短信
	 
	 //解释消息头
	 decodePduHead();//解释短信头
	 getPduData();  //解释短信中的User Data 字段
	}
	
	private void decodePduHead() throws Exception
	{
//		Pdu  * 08 91683108707305F0 04 0D91685198371792F0 
		//00 08 700191702504237E300A6C8156ED6625002D6CF360274EA4300BFF1A002098CE96E86E7F96346BDB002C98DE884051FA96349053002C5DF2662F4E244EBA8D6467616761002C552F67099E215DF47FD8002C75BC4E5F4E0D51FA58F0002C53EA628A6625676553EB002E5F8552307CBE6DB256DB5C0465F6002E597957285E8A4E0A7B11002E
		     int p=0; 
			int len=PduUtil.ReadByte(Pdu,p);
			p=p+2;
			String sc=Pdu.substring(p, p+len*2);
			p=p+len*2;
			SCA=PduUtil.ReadAddr(sc);
			Head=PduUtil.ReadByte(Pdu,p);
			p=p+2;
			MTI=Head&0x03;
			Sms_Type=MTI;
			SRI=(Head&0x80)/128;
			UDHI=(Head&0x40)/64;
			RP=(Head&20)/32;
		   if((MTI==0) && (UDHI==1)) Sms_Type=3; //MMS 
			if(Sms_Type==2) // throw new Exception("SC->>MS:SMS-STATUS-REPORT=10 SMS-SUBMIT-REPORT=01"); 
			{//短信Report下,有一字节用于说明FCS
			   FCS=PduUtil.ReadByte(Pdu,p);
		       p=p+2;
			};
			len=PduUtil.ReadByte(Pdu,p);
			if(len%2==1)len=len+1;
			p=p+2;
			String oa=Pdu.substring(p,p+len+2);
			OA=PduUtil.ReadAddr(oa);
			p=p+len+2;
			if(Sms_Type!=2)
			{
			PID=PduUtil.ReadByte(Pdu,p);
			p=p+2;
			DCS=(PduUtil.ReadByte(Pdu,p)& 12)/4;
			p=p+2;
			}
			String scts=Pdu.substring(p,p+14);
			SCTS=PduUtil.SwapByte(scts);
			p=p+14;
			if(MTI==0)
			{//MIT=10  01 Report方式下,无UDL
				UDL=PduUtil.ReadByte(Pdu,p);
				p=p+2;
			}
			UD=Pdu.substring(p);
	}
	
	protected void getPduData() throws Exception 
	{//处理UD 和短信类型,依据this,建立合适的对象
	    pduData=PduData.newPduData(this);
	}
	
	public String getSCTS()
	{
		
		return PduUtil.getTime(SCTS);
		
	}
	
	public String getSCA()	{		return SCA;	}
	public String getOA()	{		return OA;	}
	
}

⌨️ 快捷键说明

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