- 浏览: 336784 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (249)
- 无废话ExtJs 系列教程 (26)
- jQuery (6)
- 钦波工作后的生活 (5)
- 工作/生活闲谈 (16)
- java基础知识 (44)
- java web (14)
- Struts (1)
- hibernate (8)
- Jpa (0)
- spring (1)
- ajax (3)
- java项目 (4)
- database (5)
- java 流行框架 (5)
- 异常处理 (4)
- 无废话Android系统教程 (6)
- 开发IDE (1)
- 亲自答过的java笔试题 (2)
- oa项目 (4)
- [ 民政局3.0系统 ]--知识点总结分析--与具体项目无关 (0)
- [ 黑龙江低保系统 ]--知识点总结分析--与具体项目无关 (2)
- 工作笔试 (1)
- xml (1)
- telecom项目分析 (13)
- swing (0)
- String运用 (2)
- css (1)
- 页面 (1)
- Html5 (2)
- oracle (4)
- 网站 (1)
- django (1)
- python (4)
- 民航数据中心遇到与解决的问题 (1)
- 平时关注的技术或特效 (1)
- Linux 命令 (2)
- 服务器监控工具 (1)
最新评论
-
wwytwen123:
[*]
java类中静态域、块,非静态域、块,构造函数的初始化顺序(回钦波) -
junying280efun:
yingtao.huang@gmail.com仁兄,麻烦你给我 ...
jBPM Web Designer(jBPM Web 设计器、jBPM 流程设计器、工作流程设计器) -
mobeicanglang:
我觉得楼主的例子全部都有错误,题目明明说的是try{}语句中有 ...
try return finally -
ashy1q:
楼主最后那段代码重复了,写了两遍。知识很详细,很基础,学习了。 ...
java类中静态域、块,非静态域、块,构造函数的初始化顺序(回钦波) -
185552143:
你好!
为什么我这样写p${m.id},会报错的?
能我帮我解 ...
Session问题
最近有不少网友来这里问电信串口书写实际开发中的应用是怎么写的,现在我把一段写出来,供大家参考。如果还有想了解更细的加我QQ吧,444084929 回钦波
package huiqinbo.telecom;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.comm.CommDriver;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
import java.util.logging.Logger;
//import org.apache.log4j.Logger;
/**
* Title: 串口管理程序 Description: 创建串口,初始化,监听,并处理HUM的上行 Copyright: Copyright (c)
* 2007 Company: EVERSINO gift 1.初始化和打开端口 --->定义串口流对象 --->向串中对象的数据流写数据
*
* gift 2.串口对象注册监听器--->监听吕征听事件发生--->如果事件发生,从串口对象的数据流读取数据 --->计算机处理接收的数据
*
* @author Xuze
* @version 1.0
*/
public class PortServer_New extends Thread implements SerialPortEventListener,
PortServerItf {
private static Logger oLogger = Logger
.getLogger(PortServer.class.getName());
// gift_new
public static final boolean UETCP_SMS = false;
// define error info
public static final int SUCCESS = 0;
public static final int ErrorDataFormat = 1;
public static final int InvalidPhoneNumber = 2;
public static final int InvalidRecvTime = 3;
public static final int InvalidContent = 4;
public static final int InvalidRetryTime = 5;
public static final int InvalidIsReplay = 6;
public static final int InvalidMOId = 7;
public static final int InvalidStatus = 8;
public static final int SwapFileNotExist = 30;
public static final int SwapFileCantOpen = 31;
public static final int MCCCantCon = 40;
public static final int SERIALPORT_NOTREADY = -1; // not ready
public static final int SERIALPORT_IDEL = 0; //idel 空闲
public static final int SERIALPORT_RECVMSG = 1; // recvmsg
public static final int SERIALPORT_SENDMSG = 2;
public static int SerStatus = SERIALPORT_NOTREADY;
// after add
public static boolean canSend = false;
public static boolean canSendNext = false;
public static boolean portSendOK = true;
private String sPortName = GSMModule.CONF.getElementValue("serialportname");
// SerialPort类可以产生串口对象
public static SerialPort serialPort = null;
public static InputStream serialPortIn = null;
public static OutputStream serialPortOut = null;
private final int nPortSpeed = 9600;
public static int nInitCompleted = 0;
private byte[] readBuffer = null;
private int readLen = 0;
private boolean bReadBufInit = false;
public void run() {
initDriver();
try {
// CommPortIdentifier 主要负责端口的初始化和开启端口的注册、查找、初始化以及为端口绑定应用程序并为此程序打开端口、监听端口占用状态等端口管理工作由CommPortIdentifier负责,
//而CommPort则是管理实际的数据传输等工作,比如使用CommPort获取输入输出流
CommPortIdentifier portId = CommPortIdentifier
.getPortIdentifier(sPortName);
try {
//gift上面这句代码作用是为一个应用程序实例绑定此端口,appName为java实例名称,outTime为端口打开时阻塞等待时间,单位是ms,在调用CommPort的close()方法之前此端口被名为appName的实例程序独占
// 打开端口
serialPort = (SerialPort) portId.open("GSMPort", 2000);
//通知 有数据到达
serialPort.notifyOnDataAvailable(true); //// 当有数据时通知
//gift 使用SerialPort类的addEventListener( SerialPortEventListener arg0)方法为串口添加事件监听.
serialPort.addEventListener(this); // gift this ?
serialPortIn = serialPort.getInputStream();
serialPortOut = serialPort.getOutputStream();
//gift 设置串口读写参数
serialPort.setSerialPortParams(nPortSpeed, // 端口波特率是9 600 bps
SerialPort.DATABITS_8, SerialPort.STOPBITS_1, // 数据位是8 位
SerialPort.PARITY_NONE);
System.out.println("Create SerialPort...");
System.out.println("ATE0");
serialPortOut.write("ATE0\r\n".getBytes());
serialPortOut.flush();
sleep(1000);
if (!PduUtil.CDMA) {
System.out.println("AT+CMGF=0"); // 0,PDU的方式;1,文本方式
serialPortOut.write("AT+CMGF=0\r".getBytes());
serialPortOut.flush();
sleep(1000);
System.out.println("AT+CNMI=2,2");
serialPortOut.write("AT+CNMI=2,2\r".getBytes());
serialPortOut.flush();
sleep(1000);
} else {
// WLZ: For CDMA
System.out.println("AT+CMGF=1"); // CDMA下仅仅支持文本方式发送
serialPortOut.write("AT+CMGF=1\r\n".getBytes());
serialPortOut.flush();
sleep(1000);
// +CNMI=[<mode>=1 [,<mt>=2 [,<bm>=0 [,<ds>=1[, <bfr>=0]]]]]
/*
* 来设置新短信上报给TE 的程序。其中:
* <mode>和<bfr>用来设置新短信通知(包括+CMTI、^HCMT、+CDSI、^HCDS 4 种)上报给TE
* 的方式。 <mt>用来设置接收新短信时,采用直接上报给TE 还是存储在MT 中并上报存储位置。 <bm>暂不使用。
* <ds>用来设置是否上报短信状态报告(+CDSI,^HCDS)。
* <mode>:设置短信通知方式(目前支持之mode=1)。 0:将短信通知缓存在ME 中,如果ME
* 的缓存已满,则用新通知覆盖最老的通知。 1:将短信通知直接发送给TE。当无法发送时(例如,处在online
* data 模式),则丢弃通知。 <ds>:用于设置短信回执。 0:不向TE 发送短信回执。
* <ds>1:不将短信回执存储在MT 中,将短信回执直接发送给TE。 ^HCDS:
* <callerID>,<year>,<month>, <day>, <hour>,
* <minute>,<second>, <lang>, <format>, <length>, <prt>,
* <prv>,<type>,<tag><CR><LF><msg> <CTRL+Z> 2:短信回执存储在MT
* 中,则通过+CDSI 向TE 发送一条存储位置通知。 +CDSI:<mem>,<index>
*/
/*
* System.out.println("AT+CNMI=1,2,0,1,0"); //CDMA设置方式
* serialPortOut.write("AT+CNMI=1,2,0,1,0\r\n".getBytes());
*/
System.out.println("AT+CNMI=1,2,0,0,0"); // CDMA设置方式
serialPortOut.write("AT+CNMI=1,2,0,0,0\r\n".getBytes());
serialPortOut.flush();
sleep(1000);
System.out.println("AT^HSMSSS=0,0,6,0"); // 6,文本以Unicode编码发送;
// 1,ASCII编码发送
serialPortOut.write("AT^HSMSSS=0,0,6,0\r\n".getBytes());
// serialPortOut.write("AT^HSMSSS=0,0,6,0\r\n".getBytes());
serialPortOut.flush();
sleep(1000);
}
// wlz +CMGD:删除短信命令
/*
* <index<index> :短信的存储位置 如果给出了第二个参数<delflag>且不为0,则MT
* 会忽略参数<index>,而按照<delflag>参数执行,<delflag>: 0:(或缺省)
* 删除有<index>指定的短信。 1:删除首选存储器上所有的已读短信,保留未读短信、已发送短信和未发送短信
* 2:删除首选存储器上所有的已读短信和已发送短信,保留未读短信和未发送短信。
* 3:删除首选存储器上所有的已读短信、已发送短信和未发送短信,保留未读短信。 4:删除首选存储器上所有短信,包括未读短信。
*/
System.out.println("AT+CMGD=0,4");
serialPortOut.write("AT+CMGD=0,4\r\n".getBytes());
serialPortOut.flush();
sleep(7000);
System.out.println("SerialPort init completed!");
nInitCompleted = 1;
readBuffer = new byte[2000];
bReadBufInit = true;
readLen = 0;
SerStatus = isbusy;
} catch (Exception e) {
System.err.println(e.toString());
oLogger.warning(e.toString());
}
} catch (Exception e) {
System.err.println(e.toString());
oLogger.warning(e.toString());
}
}
/**
* 1.MT只需要知道串口isbusy?,yes 不发送返回 no将数据发送到串口中
* 2.串口发送完成后需要把结果发送回MT中,包括:ok or fail
* @param oMT
* @return
*/
public boolean sendMessage(MTDataStruct oMT) {
String msisdn = "", sendContent = "";
msisdn = oMT.getMSISDN();
sendContent = oMT.getContent();
System.out.println("-->[info]mtgateway, is sending.");
String str[] = PduUtil.pduPack(msisdn, sendContent);
SerStatus = SERIALPORT_SENDMSG;
// ------------------------------start send -----------------------
// boolean nSendMsgResult = sendMessage(str[0],str[1]);
boolean nSendMsgResult = true;
try {
if (PduUtil.CDMA) {
PortServer.serialPortOut.write(str[0]
.getBytes(GSMModule.ENCODE)); // str[0] 为号码
PortServer.serialPortOut.flush();
System.out.println(" ----> 短信发送:AT命令已发出 "
+ str[0].replace("\r\n", ""));
canSend = false;
Long startTime = System.currentTimeMillis();
while (true) {
if (canSend) {
PortServer.serialPortOut.write(str[1]
.getBytes(GSMModule.ENCODE)); // str[1] 为内容
PortServer.serialPortOut
.write(new byte[] { 0x00, 0x1A });
PortServer.serialPortOut.flush();
System.out.println(" ----> 短信发送:内容已发出 " + str[1]);
try {
Thread.sleep(500); // 尝试让线程休眠200毫秒,这样做可以降低CPU的使用率
} catch (Exception e) {
System.out.println("-->[error]mtgateway,"
+ e.toString());
oLogger.warning(e.toString());
}
break;
} else if ((System.currentTimeMillis() - startTime) > 1000) {
System.out.println(" ----> 发送超时,取消此次发送\r\n ");
PortServer.serialPortOut
.write(new byte[] { 0x00, 0x1B });
PortServer.serialPortOut.flush();
System.out.println(" ----> 短信发送:取消此次发送" + str[1]);
nSendMsgResult = false;
break;
}
}
} else {
// 保留PDU发送方式
PortServer.serialPortOut.write(str[0].getBytes());
PortServer.serialPortOut.write(str[1].getBytes());
PortServer.serialPortOut.write("\u001A\n".getBytes());
PortServer.serialPortOut.flush();
}
} catch (Exception e) {
nSendMsgResult = false;
System.out.println(" ----> 短信发送:短信发送异常 " + str[1]);
}
return nSendMsgResult; // 其实这个可合掉
// ------------------------------send end -----------------------
}
public void againSendMessage(){
}
/**
* 读短消息
* @param readCommand
*/
public void ReadSMS(String readCommand) {
try {
SerStatus = SERIALPORT_RECVMSG; //from MOGateWay
PortServer.serialPortOut.write(readCommand.getBytes());
PortServer.serialPortOut.flush();
} catch (Exception e) {
System.err.println("-->[error]mogateway, PortServer.serialPortOut Error:" + e.toString());
oLogger.warning(e.toString());
}
}
/**
* 删除短消息
* @param deleteCommand
*/
public void DeleteSMS(String deleteCommand) {
try {
PortServer.serialPortOut.write(deleteCommand.getBytes());
PortServer.serialPortOut.flush();
} catch (Exception e) {
System.err.println("-->[error]mogateway, PortServer.serialPortOut Error:" + e.toString());
oLogger.warning(e.toString());
}
}
/**
* 串口向SMSC发送AT命令
* //PortServer.serialPortOut.write("AT+CNMI=1,2,0,0,0\r\n".getBytes());
*/
public static void sendAtCommandOfString(String at) {
try {
PortServer.serialPortOut.write(at.getBytes());
PortServer.serialPortOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 串口向SMSC发送AT命令
* //PortServer.serialPortOut.write("AT+CNMI=1,2,0,0,0\r\n".getBytes());
*/
public static void sendAtCommandOfByte(byte[] at) {
try {
PortServer.serialPortOut.write(at);
PortServer.serialPortOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private void initReadBuff() {
readBuffer = new byte[2000];
bReadBufInit = true;
readLen = 0;
}
/**
* gift:
* 使用上述方法注册了通知之后,还要实现串口的监听接口SerialPortEventListener,实现此接口的方法
public void serialEvent( SerialPortEvent arg0 ){}
通过SerialPortEvent的getEventType()方法可以得到当前事件的变量值,然后与上表中的事件值对比,即可知道当前串口上产生了哪种类型的事件.
使用SerialPort类的addEventListener( SerialPortEventListener arg0)方法为串口添加事件监听.
*/
// 当有可用数据时读取数据,并且给串口返回数据
public void serialEvent(SerialPortEvent serialPortEvent) {
switch (serialPortEvent.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE: //gift有数据到达 able 能够..的, avail 效用,利益,有利
SerStatus = SERIALPORT_RECVMSG;
try {
if (!PduUtil.CDMA) {
// WLZ: For GSM
String s = "";
while (!s.endsWith("\r\n")) {
if (!bReadBufInit)
initReadBuff();
if (s.trim().indexOf("+CMT") == 0) {
System.out.println(s);
initReadBuff();
}
int nLen = serialPortIn.available();
serialPortIn.read(readBuffer, readLen, nLen);
readLen += nLen;
s = new String(readBuffer);
s = s.replace("\u0000", "");
// 对于"AT+CNMI=2,2"命令PDU数据位于最后,并用"\r\n"分开。
if (s.endsWith("\r\n")) {
String sTemp[] = s.split("\r\n");
s = sTemp[sTemp.length - 1]; // 最后一段数据
initReadBuff();
System.out
.println("-->[info]Serialport, received sms.");
break;
} else {
// 如果数据不完整,等待下次数据到达事件继续读取。
return;
}
}
if (nInitCompleted == 1) {
if (s.indexOf("OK") == 0 || s.indexOf("ERROR") == 0) {
System.out
.println("-->[info]Serialport, discard OK/ERROR AT commands.["
+ s + "]");
// 抛弃响应命令,不处理..
} else if (s.indexOf("+") == 0
|| s.indexOf("RING") == 0) {
System.out
.println("-->[info]Serialport, discard +/Ring AT commands.["
+ s + "]");
// 抛弃+XX(+CMT...)响应命令,不处理..
} else {
// 处理接收的短信数据
System.out
.println("-->[info]Serialport, forward sms to mogateway.");
MOGateWay mogateway = new MOGateWay(s);
mogateway.start();
}
} else {
// 抛弃数据不处理..
System.err
.println("-->[warnning]Serialport, initialization not completed and discard sms data:["
+ s + "]");
}
} else {
// WLZ: For CDMA
String s = "";
while (true) {
if (!bReadBufInit)
initReadBuff();
if (!isEmptyOrSegment())
initReadBuff();
int nLen = serialPortIn.available();
serialPortIn.read(readBuffer, readLen, nLen);
readLen += nLen;
s = new String(readBuffer);
s = s.replace("\u0000", "");
// System.out.println("-->[info]Serialport, BufferData:["
// +s+"]");
/*
* 打印输出流十六进制 System.out.println(s); byte[] sb =
* s.getBytes(); for (int i = 0; i < sb.length; i++) {
* System.out.print( PduUtil.byteToHexString(sb[i])+
* " "); } System.out.println();
*/
if (s.endsWith("\r\n")) {
/*
* 参照规范,以<CTRL+Z><CR><LF>结束只有三种情况: 1、新短信直接上报
* ^HCMT的末尾 2、新短信状态直接上报^HCDS的末尾 3、接受到读短信命令
* ^HCMGR发回数据的的末尾
*
* 后两种情况在本程序中不会出现。
*
* 先处理完整数据
*/
String endSignal = new String(new byte[] { 0x1A,
0x0D, 0x0A });
int indexofHCMT = s.indexOf("^HCMT:");
int indexofEndSignal = s.indexOf(endSignal);
while (indexofHCMT >= 0
&& indexofEndSignal > indexofHCMT) {
// WLZ: AT+CNMA需要发给模块,确认我们接收到了新短信,但是现在处于接收状态。
// WLZ add:
System.out
.println("AT+CNMA:确认收到一条直接发送给TE 的新短信!\r\n");
serialPortOut.write("AT+CNMA\r\n".getBytes());
serialPortOut.flush();
try {
Thread.sleep(500); // 尝试让线程休眠500毫秒,这样做可以降低CPU的使用率
} catch (Exception e) {
System.out.println("-->[error]mtgateway,"
+ e.toString());
oLogger.warning(e.toString());
}
// WLZ add-end
String getRealData = s.substring(indexofHCMT,
indexofEndSignal);
dealWithRealData(getRealData);
s = s.replace(getRealData + endSignal, "");
indexofHCMT = s.indexOf("^HCMT:");
indexofEndSignal = s.indexOf(endSignal);
}
initReadBuff();
// 再处理剩下的不完整数据及其他信息
String sTemp[] = s.split("\r\n");
for (int i = 0; i < sTemp.length; i++) {
if (sTemp[i].trim().equals("")
|| sTemp[i].trim().equals("OK")) {
continue;
}
System.out.println(" ----> 收到内容: "
+ sTemp[i]);
// 发送数据标识设置
if (sTemp[i].equals("> ")) {
MTGateWay.canSend = true;
SerStatus = SERIALPORT_SENDMSG;
}
// 发送失败,清除
if (sTemp[i].indexOf("ERROR:") >= 0) {
// wlz begin
// PortServer.serialPortOut.write( new
// byte[]{0x00,0x1B});
// /PortServer.serialPortOut.write(
// "\r\n".getBytes());
// PortServer.serialPortOut.flush();
// /System.out.println("发送失败!!! " + sTemp[i]
// );
// System.out.println("从新设置AT+CNMI=1,2,0,0,0");
// //CDMA设置方式
// serialPortOut.write("AT+CNMI=1,2,0,0,0\r\n".getBytes());
// serialPortOut.flush();
oLogger
.warning("-->[info]send cmd-sms got CMS ERROR "
+ sTemp[i]);
try {
Thread.sleep(500); // 尝试让线程休眠500毫秒,这样做可以降低CPU的使用率
} catch (Exception e) {
System.out
.println("-->[error]mtgateway,"
+ e.toString());
oLogger.warning(e.toString());
}
// wlz end
MTGateWay.portSendOK = false;
MTGateWay.canSendNext = true;
}
// 报告SIM卡失效(可能),假定非卡失效因素,允许发送下一条
if (sTemp[i].indexOf("^HCMGSF") >= 0) {
System.out.println("发送失败,错误号是--> "
+ sTemp[i]);
// wlz begin
// System.out.println("从新设置AT+CNMI=1,2,0,0,0");
// //CDMA设置方式
// serialPortOut.write("AT+CNMI=1,2,0,0,0\r\n".getBytes());
// serialPortOut.flush();
oLogger
.warning("-->[info]send cmd-sms got HCMGSF ERROR "
+ sTemp[i]);
try {
Thread.sleep(500); // 尝试让线程休眠500毫秒,这样做可以降低CPU的使用率
} catch (Exception e) {
System.out
.println("-->[error]mtgateway,"
+ e.toString());
oLogger.warning(e.toString());
}
// wlz end
MTGateWay.portSendOK = false;
MTGateWay.canSendNext = true;
}
// 发送成功后,可以发送下一条
/*
* wlz if (sTemp[i].indexOf("^HCMGS")>=0){ int
* pos = sTemp[i].indexOf("^HCMGS")+6; if
* (pos<sTemp[i].length()){ if
* (sTemp[i].charAt(pos)!='S'){
* //System.out.println("发送成功");
* MTGateWay.canSendNext = true;
* System.out.println("发送成功,MR=" + sTemp[i] );
* }else{ ; } } else{
* //System.out.println("发送成功");
* MTGateWay.canSendNext = true;
* System.out.println("发送成功,MR=" + sTemp[i] ); }
* }
*/
// ////
if (sTemp[i].indexOf("^HCMGSS") >= 0) {
{
// System.out.println("发送成功");
MTGateWay.canSendNext = true;
System.out.println("发送成功,MR="
+ sTemp[i]);
}
}
// wlz begin
if (sTemp[i].indexOf("CMTI") >= 0) {
{
// System.out.println("发送成功");
MTGateWay.canSendNext = true;
System.out.println("收到Class 2 SMS="
+ sTemp[i]);
}
}
if (sTemp[i].indexOf("^HCDS") >= 0) {
{
// System.out.println("发送成功");
MTGateWay.canSendNext = true;
System.out.println("短信回执=" + sTemp[i]);
}
}
// wlz end
// 完整数据已经取出,如果存在^HCMT则为不完整数据,写回Buffer
if (sTemp[i].indexOf("^HCMT:") == 0) {
byte[] bTmp = (sTemp[i] + "\r\n")
.getBytes(GSMModule.ENCODE);
for (int j = 0; j < bTmp.length; j++) {
readBuffer[j] = bTmp[j];
}
readLen = (sTemp[i] + "\r\n").length();
}
}
break;
} else {
return;
}
}
}
} catch (IOException e) {
oLogger.warning(e.toString());
}
SerStatus = isbusy;
break;
default:
SerStatus = isbusy;
break;
}
}
/**gift
* 在java程序中,为了实现同本地系统的硬件端口(RS-232标准串口/IEEE1284标准并口)通讯,目前有两个方法,第一个就是以前说过的,
* 使用JNI技术自己写一个与java程序相关的dll/so文件,是一个花费巨大且不实际的想法.第二个方法就是使用sun公司提供的comm包,
* 这套API是用于开发平台独立的通讯应用程序的扩展API
* 初始化comm驱动(可能不是必须的)
使用如下方式初始化comm的驱动(windows系统):
javax.comm.CommDriver commDriver = (javax.comm.CommDriver) Class.forName( "com.sun.comm.Win32Driver" ).newInstance();
commDriver.initialize();
*/
private final void initDriver() {
GSMModule.SerStatus = GSMModule.SERIALPORT_NOTREADY;
try {
String driverName = "com.sun.comm.Win32Driver";
// CommDriver driver = null;
System.loadLibrary("win32com");
CommDriver driver = (CommDriver) Class.forName(driverName)
.newInstance();
driver.initialize(); // 执行initialize()会把当前设备上的所有端口注册给CommPortIdentifier
} catch (Exception e) {
oLogger.warning(e.toString());
}
}
private boolean isEmptyOrSegment() {
if (readLen == 0)
return true;
String s = new String(readBuffer);
if (s.indexOf("^HCMT:") >= 0)
return true;
return false;
}
private void dealWithRealData(String realData) {
String[] sTmp = realData.split("\r\n");
String[] sTe = sTmp[0].replace("^HCMT: ", "").split(",");
String s = sTe[0];
s += "::" + sTmp[1]; // 完整数据:电话+内容,以两个冒号分割
if (nInitCompleted == 1) {
// 处理接收的短信数据
System.out
.println("-->[info]Serialport, forward sms to mogateway.["
+ s + "]");
MOGateWay mogateway = new MOGateWay(s);
mogateway.start();
} else {
// 抛弃数据不处理..
System.err
.println("-->[warnning]Serialport, initialization not completed and discard sms data:["
+ s + "]");
}
System.out.println("-->[info]Serialport, received sms. --> " + s);
}
}
发表评论
-
WAP1.2与WAP2.0区别[回钦波赏析]
2010-10-12 23:22 1385WAP1.2与WAP2.0区别 2010-08-16 13: ... -
兆字节间的运算
2010-09-28 15:22 841悬赏分:10 - 解决时间:2010-9-28 15 ... -
字符串转化为十六进制方法[框架师:回钦波个人总结]
2010-09-28 14:44 8251.定义转变: public class PduUtil ... -
GSM[回钦波,转电信 信息网]
2010-09-15 11:39 907GSM全名为:Global System fo ... -
java.net.SocketException: Software caused connection abort: recv failed 异常分析[回钦波
2010-08-26 12:12 1550java.net.SocketException ... -
使用comm在java程序中管理本地端口[回钦波:高级软件工程师]
2010-08-23 17:13 1845使用comm在java程序中管理本地端口 最 ... -
电信项目常用到的PDU格式[回钦波祥谈]
2010-08-18 14:45 1115PDU格式 发表者 ... -
EVDO
2010-08-18 14:17 1247EVDO 百科名片 电信3G EVDO( ... -
串口和并口的区别
2010-08-18 11:39 1187串口和并口的区别 串口和并口 ... -
Java Socket 使用
2010-08-06 09:35 945Java Socket 最近一直在做电信的项目 ... -
串口 电信开发中常用到的术语
2010-08-04 14:36 1391串口 百科名片 串口叫做串行接口,也称串行通信接口,按电 ... -
mcc中心主程序
2010-08-02 17:22 8881.结构分析图: cdma -mcc ...
相关推荐
[040]第三章_第二节RS232串行通信接口.zip上位机开发VC串口学习资料源码下载[040]第三章_第二节RS232串行通信接口.zip上位机开发VC串口学习资料源码下载[040]第三章_第二节RS232串行通信接口.zip上位机开发VC串口...
android串口调用,使用c开发的,可以设置串口超时。比谷歌的串口demo好(谷歌的IO堵塞模式),也可以使用堵塞时读取不超时。
在设备的连接汇总,通过示波器判断设备的连接方式,检测设备的兼容性等都是非常重要的,这款ComDigitalScopeV100串口示波器软件功能丰富,是一款集硬件设备的检测与串口的连接,查看各种示波器的变化数据,...
实验三 使用8251A的串行接口应用实验 二、实验目的 1) 掌握串行通信原理及半双工和全双工的编程方法; 2) 掌握用8251A接口芯片实现微机间的同步和异步通信; 3) 掌握8251A芯片与微机的接口技术和编程方法。
[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口学习资料源码下载[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口学习资料源码下载[180]VC中使用mscomm控件进行串口通信.zip上位机开发VC串口...
使用多线程方式收发数据.zip上位机开发VC串口学习资料源码下载[103]VC++中使用串口的例子.使用多线程方式收发数据.zip上位机开发VC串口学习资料源码下载[103]VC++中使用串口的例子.使用多线程方式收发数据.zip上位机...
STM32F407 串口配置 基于CubeMx的STM32F407串口代码:6各串口均已启用DMA及空闲中断,支持不定长度数据接收;可通过CubeMx裁剪串口数量,裁剪后只需编译时删去极少量与删去硬件资源相关的代码即可移植使用;默认使用...
SSI208P,主要应用于同步串行接口(SSI)光电编码器高速数据采集系统的板级开发。SSI208P模块将同步串行接口数据转换成并行接口数据,内部集成了SSI同步时钟发生器、脉冲计数器、数据串并转换、接口控制逻辑、输出...
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用: 工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口...
这需要使用Keil开发环境中的仿真功能与虚拟串口软件进行整合,从而实现对串口屏产品的调试和测试。 一、Keil开发环境简介 Keil是一种微控制器开发环境,主要用于开发基于ARM、C166、C51、C251和XC800微控制器的...
串行接口SPI接口应用设计,串行接口SPI接口应用设计
OTIS-RSL远程串行接口协议标准大全.PDF
[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]...
串口服务器配置手册宣贯 串口服务器是计算机网络中的一个重要组件,它可以将串口设备连接到以太网中,实现远程监控和控制。...通过本文档,用户可以快速掌握串口服务器的配置和使用方法,从而更好地应用于实际项目中。
xilinx fpga 7系列的高速串行IP核的使用。项目名称: Xilinx 7 系列 FPGA 高速串行接口 GTP 的使用 FPGA: Xilinx XC7A200T fbg676 用户数据位宽: 4Byte 串行速率: 4.25Gbps
[145]VC开发的串口开发包,可以用来开发串口应用程序,即可以学习也可以用在上位机开发VC串口学习资料源码下载开发上.zip[145]VC开发的串口开发包,可以用来开发串口应用程序,即可以学习也可以用在上位机开发VC串口...
在实际工作中,我们可能遇到这样的问题:我们需要Windows同时控制多个串口和多个外设进行通讯。比如说,一个机关或一个实验室的门禁系统,希望一台微机控制多个划卡机和多个门禁设备,这时,普通微机能够提供的一个或两个...
本书以串口通信技术在各行业(情况)的实际应用为内容,以实例导航的方式向读者介绍了如何将串口技术、相应的行业算法合理地实施到项目开发中。\r\n 本书的8个串口通信案例都是精挑细选后才确定的,它们基本覆盖了串口...
stm32F103串口程序的配置及简单的使用(串口1,串口2,串口3)USART1,USART2,USART3 通过按键发送一串十六进制指令 串口二收到数据并将收到数据存入数组中 串口二收到的数据以0x3A开头,0x23结束。 串口1用作串口...