我有以下shell脚本(期待)我正在尝试发送短信。我已经引用了许多堆栈溢出引用,并发现ctrl-z映射到\ x1a。但是,即使将其附加到消息并发送到端口或分别向端口发送ctrl z也没有帮助我。它稍后会超时。
编写脚本是为了以pdu格式发送短信。不管怎样,我相信,这是将ctrl-z发送到端口的一般问题。如果您觉得脚本有其他一些错误,请分享相同的解决方案。
下面提到的长度(34)也是根据规范的(PDU_LENGTH -2)/ 2的长度。该长度不包括ctrl-z字符。
at_command =" AT + CMGS = 34 \ r" message_content =" 0011000C810056890 ......"
脚本:
set PROMPT "0"
set timeout "$COMMAND_TIMEOUT"
send "$at_command"
expect {
"OK" { puts "Command Accepted\n"; }
"ERROR" { puts "Command Failed\n"; }
timeout { puts "Unable to connect to $HOSTIP at $HOSTPORT"; exit 1 }
"*>*" { set PROMPT "1"; }
}
if { "$PROMPT" == "1" } {
send "$message_content"
send "\x1a"
expect {
"OK" { puts "\nCommand accepted"; }
"ERROR" { puts "\nCommand failed"; }
"*>*" { puts "CTRL-Z dint reach UT. Error..."; }
"*" { puts "Unexpected return value received"; }
}
}
我非常肯定脚本会发送$ message_content"发送" $ message_content"。
后立即退出输出:
AT+CMGS=34
>
答案 0 :(得分:0)
我在c#
中使用SMS-Gateway-Modul进行了类似的操作。
我必须switch to PDU-Mode first!
之后,我必须发送预期的PDU长度,最后发送PDU本身。
每个命令都必须使用can carriage return ASC[13]
提交,并且最终必须使用ASC[26]
提交PDU。
在这里,您可以看到示意图(!)流程,我是如何在c#
中完成的:
1)创建PDU并获取长度
int len;
var pdu = PDUGenerator.GetPdu(destination, message, "", out len);
2)切换到PDUMode
SendToCom("AT+CMGF=0" + System.Convert.ToChar(13));
3)宣布消息长度
SendToCom("AT+CMGS=" + len + System.Convert.ToChar(13));
4)发送PDU并提交
SendToCom(pdu + System.Convert.ToChar(26));