📄 listenth.java
字号:
package GEOSMS;
import java.io.InputStream;
import java.io.OutputStream;
public class ListenTh extends Thread{
private InputStream input;
private OutputStream out;
private GeoSmsDM dm;
public boolean thread_contral;
private SMS sms;
public ListenTh(InputStream sinput,OutputStream soutput)
{
input=sinput; //串口读入流
out=soutput; //串口写出流
thread_contral=true; //线程循环控制参数
dm=new GeoSmsDM(); //创建数据操作对象
sms=new SMS(input,out); //创建短信操作对象
}
public void setThreadClose()
{
thread_contral=false; //关闭线程循环控制参数
}
/**在本线程中监控串口,若有SMSR命令,则表示dtss800模块接受到新短信;
* 使用AT+RSMS=0读取并删除该短信;
* 同时将短信内容发送到数据处理对象中处理;
* 将处理的结果发送回源号码。
*/
public void run()
{
char c;
byte[] buffer=new byte[200];
String str="";
int i=0,j=0,ptr=0,len;
String Msg="";
while(thread_contral){ //线程主循环开始
try{
len=input.read(buffer); //从串口读取字节流
str=new String(buffer);
for(i=0;i<buffer.length;i++)
System.out.print(Integer.toHexString(buffer[i])+" ");
System.out.println(" ");
System.out.println(str);
Thread.sleep(20);
if(ptr==1) //判断短信读取状态
{j=1;ptr=0;}
if(str.indexOf("SMSR")>0) //读取到SMSR,即转换为接收短信状态
{
System.out.println("SMSR");
String cmd="AT+RSMS\r"; //发送读取短信命令
// String cmd="AT+SMSR\r";
System.out.println(cmd);
out.write(cmd.getBytes());
ptr=1; //转换短信读取状态为:预备读取态
}
System.out.println(" ");
//j=1;
if(j==1){
sms.ReadSmsByte(buffer);
String result="";
if(sms.getCharSet()=="UNICODE") //判断短信字符集
result=new String(sms.getSmsData(buffer,len),"utf-16BE");
if(sms.getCharSet()=="ASCII")
result=new String(sms.getSmsData(buffer,len));
System.out.println("result="+result);
String StrNum=sms.getTelNumber(); //获取源电话号码
System.out.println("number="+StrNum);
String SMS=dm.lookingfor(result);//执行数据服务逻辑
sms.SendSms(StrNum,SMS); //发送结果
j=0; //重置控制标识
}
}catch(Exception e){e.printStackTrace();}
} //线程主循环结束
System.out.println("thread end");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -