炮姐弹幕爆炸是哪集:用Java程序从西门子 Tc35i Modem发送短信时为何老是发不出去?

来源:百度文库 编辑:神马品牌网 时间:2024/05/10 15:29:25
以前用的Modem是Falcom A2D系列,程序运行不正很正常.前段时间买了个西门子 Tc35i型号的,却怎么都发不成功.

设置如下:

At+cmgf=0//PDU

At+cnmi=2,2,0,0,1//设置自动接收(换成1,1,0,0,1也试过,还是不行)

At+Csmp=17,167,0,240

发送格式按参考标准的At发送指令:

AT+CMGS=<LENGTH><CR>PDU DATA<CTRL-Z>

发送前先进行Pdu编码,然后生成上面格式的At指令,具体程序如下:

String coded=getPduData("13800571500","13634163431","你好,张新波");//得到PDU编码过的字符串,三个参数依次为短消息中心号,接收者的手机号,发送内容

String cmd1 = "AT+CMGS="+ (coded.length() - 18) / 2+ (char) Integer.parseInt( "A", 16);//得到命令
cmd1+=coded+ (char) Integer.parseInt("1A", 16) + "z";//加上PDU Data

sendmsg(cmd1,sport);

// 把短消息通过数据猫发送出去
private void sendMsg(String msg, SerialPort sPort) {

PrintWriter pw;
if (msg != null && sPort != null)
try {

pw = new PrintWriter(sPort.getOutputStream());
pw.println(msg);

pw.flush();
pw.close();

} catch (IOException e) {
logger.error(e.getMessage());
e.printStackTrace();
}
}

结果总是提示发送失败,收到Modem的响应信息如下:

>>>:AT+CMGS=27
>>>:0891683108501705F011000D91683136143636F10008000B4F60597D002C5F2065B06CE2z
>>>:
>>>:>
>>>:ERROR(Error过了好长一会才出来)

PDU编码应该没有问题,在超级终端中按此数据测试时可以正常发送出去,但在程序里就是不行.

我怀疑是不是<CR>或者<CTRL-z>这个地方出错,然后把<CR>的表示形式从(char)Integer.parseInt("a",16)换成"\r"也不行

从网上还看到一篇文章说发送完AT+cmgs=<length><cr>之后,必须等到接收到>符号之后,才能发送Pdu data,按照此方法试了一下,也不行,

真是郁闷透了,哪位能帮忙分析一下,到底是哪的原因?