使用西门子TC35I OEM MODEM发中文短信老是丢数据,无法发送成功,有人遇到过这种情况吗? ( 积分: 200 )

  • 主题发起人 主题发起人 sinboy
  • 开始时间 开始时间
S

sinboy

Unregistered / Unconfirmed
GUEST, unregistred user!
发送内容为“你好,测试”,经过PDU编码之后为“0891683108501705F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5”
初始化at+cmgf=0,at+cnmi=2,2,0,0,1,at+csmp=17,167,0,8
在超级终端上的输入结果为:
at+cmgs=25
> 0891683108501705F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5
+CMGS: 60
OK
手机成功接收

在JAVA程序里实现在主要代码是:
if (isPduMode) {
Config conf = new Config();
PduSendPack pack = new PduSendPack();
pack.setDestAddr(dest);
pack.setUserData(content);
pack.setSmsc(conf.smsc());
pack.setDataCodedCharset(8);
String coded = pack.getCodedStr();
if (coded != null)
cmd1 = "AT+CMGS="+ (coded.length() - 18)/ 2
+ "/r"
+ coded
+ (char) Integer.parseInt("1a", 16) + "z";
} else
{
Config conf = new Config();
codeType = conf.codeType();
if (codeType != null&&
codeType.equals("1"))
content = Common.gb2unicode(content);
cmd1 = "AT+CMGS=/"+86"+ dest+ "/""+(char)13+ content+ (char)26;
}
if (cmd1 != null) {
System.err.println(cmd1);
sendMsg(cmd1, sPort);
isSendOK = false;
}
//把短消息通过数据猫发送出去
private void sendMsg(String msg, SerialPort sPort) {

DataOutputStream pw;//开始用的是PrintWriter,直接把数据按行输出
if (msg != null &&
sPort != null)
try {

pw = new DataOutputStream(sPort.getOutputStream());
pw.write(msg.getBytes() );
pw.write(13);
pw.flush();
pw.close();
System.out.println("/nmsg has been send from Modemn:/n"
+ msg+ "/n");
} catch (IOException e) {
e.printStackTrace();
}
}

输出的结果如下:
msg has been send from Modemn:
AT+CMGS=25
0891683108501705F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5z
>>>AT+CMGS=25
>>>//(MODEM收到的输入数据少了前面几位)
>>>> F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5z>>>
>>>ERROR

这是为何?大家救救我吧,搞了一天还是这人问题,一直搞不定
 
发送内容为“你好,测试”,经过PDU编码之后为“0891683108501705F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5”
初始化at+cmgf=0,at+cnmi=2,2,0,0,1,at+csmp=17,167,0,8
在超级终端上的输入结果为:
at+cmgs=25
> 0891683108501705F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5
+CMGS: 60
OK
手机成功接收

在JAVA程序里实现在主要代码是:
if (isPduMode) {
Config conf = new Config();
PduSendPack pack = new PduSendPack();
pack.setDestAddr(dest);
pack.setUserData(content);
pack.setSmsc(conf.smsc());
pack.setDataCodedCharset(8);
String coded = pack.getCodedStr();
if (coded != null)
cmd1 = "AT+CMGS="+ (coded.length() - 18)/ 2
+ "/r"
+ coded
+ (char) Integer.parseInt("1a", 16) + "z";
} else
{
Config conf = new Config();
codeType = conf.codeType();
if (codeType != null&&
codeType.equals("1"))
content = Common.gb2unicode(content);
cmd1 = "AT+CMGS=/"+86"+ dest+ "/""+(char)13+ content+ (char)26;
}
if (cmd1 != null) {
System.err.println(cmd1);
sendMsg(cmd1, sPort);
isSendOK = false;
}
//把短消息通过数据猫发送出去
private void sendMsg(String msg, SerialPort sPort) {

DataOutputStream pw;//开始用的是PrintWriter,直接把数据按行输出
if (msg != null &&
sPort != null)
try {

pw = new DataOutputStream(sPort.getOutputStream());
pw.write(msg.getBytes() );
pw.write(13);
pw.flush();
pw.close();
System.out.println("/nmsg has been send from Modemn:/n"
+ msg+ "/n");
} catch (IOException e) {
e.printStackTrace();
}
}

输出的结果如下:
msg has been send from Modemn:
AT+CMGS=25
0891683108501705F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5z
>>>AT+CMGS=25
>>>//(MODEM收到的输入数据少了前面几位)
>>>> F011000D91683136143636F10008000A4F60597DFF0C6D4B8BD5z>>>
>>>ERROR

这是为何?大家救救我吧,搞了一天还是这人问题,一直搞不定
 
你确定正确输出到了串口了?
我没怎么看懂你的程序,
我觉得你发送的时候中间没停顿呢,不知道是不是这个原因
 
如果可以,加我的QQ呀:258811031
我也在弄这个呢
 
应该正确把数据写入输出流了吧,至于MODEM是正确收到,不好测试呀
 
看不太明白,不过应该不会有你说的问题的。我开发过不少gsm medem 没有遇到过这样的,应该还是你自己的程序的问题吧。QQ:185597150
 
输入AT+CMGS=25
要等到收到“>”后,再发送内容,利用串口发短信就这么简单
 
后退
顶部