📄 sendpdu.java
字号:
//你好!
import java.io.*;
public class SendPdu {
protected int UDL;
protected String UD;
protected String Msg;
protected String Pdu;
public String toPdu()
{
return Pdu;
}
public int getPduLen()
{
return (Pdu.length()-2)/2;
}
public SendPdu(String da,String msg) throws Exception
{
String DAhead=PduUtil.Tel2DA(da);
Msg=msg;
boolean isEng=PduUtil.IsEnglish(msg);
UD=PduUtil.Msg2Hex(msg,isEng);
UDL=UD.length()/2;
String dcs;
if(isEng) dcs="04"; else dcs="08";
Pdu="0011FF"+DAhead+"00"+dcs+"FF"+PduUtil.Byte2Hex(UDL)+UD;
}
private static int reLoadBuffer(Connecter con) throws Exception
{
String rs=new String();
int mr=-1;
for(int i=0;i<5;i++)
{
Thread.sleep(500);
if( con.getReader().ready()==false) continue;
rs=con.RecDataAnsi();
if(rs.length()<1) continue;
if(rs.indexOf("+CMGS:")>-1)
{
int index=rs.indexOf("+CMGS:");
rs=rs.substring(index+6);
int k= rs.indexOf("\r\n");
rs=rs.substring(0,k);
mr=Integer.parseInt(rs.trim());
break;
}
if(rs.indexOf("ERROR")>-1)
{
mr=0;
break;
}
}
return mr;
}
protected static String SendAT(Connecter con ,String cmd,String mrcmd,long delay) throws Exception
{
BufferedReader br=con.getReader();
while( br.ready()) br.read();
OutputStream os=con.getOutputStream();
byte[] cmdbs=(cmd+"\r\n").getBytes("GBK");
os.write(cmdbs);
os.flush();
String rs="";
for(int i=0;i<5;i++)
{
Thread.sleep(delay/5);
if(br.ready())
{
rs= br.readLine();
if(rs.startsWith("OK")) return "OK";
if(rs.startsWith("ERROR")) return "ERROR";
if(rs.startsWith(mrcmd))return rs;
} else continue;
}//for
return rs;
}
protected static int MySend(Connecter con,String pdu,long delay) throws Exception
{
int pdulen=pdu.length()/2-1;
BufferedReader br=con.getReader();
while( br.ready()) br.read();
OutputStream os=con.getOutputStream();
String cmd="AT+CMGF=0;+CMGS="+pdulen+"\r\n";
byte[] cmdbs=cmd.getBytes("GBK");
os.write(cmdbs);
byte[] cmdpdu=pdu.getBytes("GBK");
os.write(cmdpdu);
os.write(0x1A);
os.flush();
String rs="";
int mr=-1;
for(int i=0;i<5;i++)
{
Thread.sleep(delay/5);
if(br.ready())
{
rs= br.readLine();
if(rs.startsWith("+CMGS:"))
{
rs= rs.substring(rs.indexOf(":")+1).trim();
mr=Integer.parseInt(rs);
rs=br.readLine();
//rs ok error
break;
}
} else continue;
}//for
return mr;
}
protected static int Send(Connecter Con,String PduMsg,long delay) throws Exception
{ //发送失败返回0 发送成功返回 MR值 连接器故障返回-1
CommConnecter con=(CommConnecter)Con;
int len=(PduMsg.length()-2)/2;
int m;
while(con.reader.ready()) m=con.reader.read();
//while( br.ready()) br.read();
con.SendDataAnsi("AT+CMGF=0;+CMGS="+len+"\r\n");
//Thread.sleep(500);
con.SendDataAnsi(PduMsg);
//Thread.sleep(500);
con.writer.write(0x1A);
//Thread.sleep(50);
con.writer.flush();
//Thread.sleep(500);
String rs=new String();
int mr=-1;
for(int i=0;i<6;i++)
{
rs=con.reader.readLine();
if(rs.length()<3) continue;
if(rs.startsWith("+CMGS:"))
{
rs=rs.substring(6);
mr=Integer.parseInt(rs.trim());
break;
}
if(rs.startsWith("OK")) return 0;
if(rs.startsWith("ERROR")) return -1;
}
return mr;
}
public static String[] SendPdus(String[] tels,String msg)throws Exception
{
boolean isEng=PduUtil.IsEnglish(msg);
String ud=PduUtil.Msg2Hex(msg,isEng);
String udl=PduUtil.Byte2Hex(ud.length()/2);
String[] pdus=new String[tels.length];
String dcs;
if(isEng) dcs="04"; else dcs="08";
for(int i=0;i<tels.length;i++)
pdus[i]="0011FF"+PduUtil.Tel2DA(tels[i])+"00"+dcs+"FF"+udl+ud;
return pdus;
}
public static int[] SendAllSms(Connecter con,long delayRead, long delaySend, String[] tels,String msg) throws Exception
{
int num=tels.length;
int[] returnArray=new int[num];
String[] PduMsg=SendPdus(tels,msg);
for(int i=0;i<num;i++)
{
//取系统当前时间
returnArray[i]=Send(con,PduMsg[i],delayRead);
System.out.println(tels[i]+" Send MR: "+returnArray[i]);
//取系统当前时间
//Thread.sleep(delaySend);//保证每条短信发生间隔是8-10s
}
return returnArray;
}
public int SendSms(Connecter con,long delay) throws Exception
{
return Send(con,Pdu,delay);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -