我正在尝试使用AT命令向我的诺基亚手机(C1-01)发送短信,我可以使用此vb.net代码成功发送短信。
Button_Send_Click:
Dim SMSPort = New SerialPort
With SMSPort
.PortName = "COM2"
.BaudRate = 9600
.Parity = Parity.None
.DataBits = 8
.StopBits = StopBits.One
.Handshake = Handshake.None
.DtrEnable = True
.RtsEnable = True
.NewLine = vbCrLf
End With
SMSPort.Open()
SMSPort.Write("AT+CMGF=1" & vbCrLf)
Threading.Thread.Sleep(200)
SMSPort.Write("AT+CMGS=" & Chr(34) & TextBox1.Text & Chr(34) & vbCrLf) 'TextBox1.text = Recipient mobile number and chr(34) = "
Threading.Thread.Sleep(200)
SMSPort.Write("TEST MESSAGE" & Chr(26)) 'chr(26) = →
Threading.Thread.Sleep(200)
MsgBox(SMSPort.ReadExisting())
SMSPort.Close()
第一次正常工作,火灾后这段代码我在手机上收到短信TEST MESSAGE
(很棒)但是当我第二次按下发送按钮时,我在手机上收到短信,其中包含:
AT+CMGF=1
AT+CMGS=+92XXYYYYYY
TEST MESSAGE
为什么第二次在SMS中包含“AT命令,即AT + CMGF等......”?
如何从中删除不需要的文字?
在打开之后和关闭我的串口(SMSPort)之前,我还尝试了SMSPort.DiscardInBuffer()
和SMSPort.DiscardOutBuffer()
属性,但我的问题没有解决。
我用Google搜索了很多但都是徒劳的,请帮我解决这个问题。
平台:带有.NET 2.0的Microsoft Visual Basic 2010
答案 0 :(得分:1)
首先,您必须认真重做AT命令处理
Threading.Thread.Sleep
。有关中止下一个命令的风险的详细信息,请参阅this answer。AT+CMGS
,您还必须在发送数据之前等待“\ n \ r>”响应,有关详细信息,请参阅this answer(再次)。在解决这些基本问题之前,你不能指望任何成功的行为。
答案 1 :(得分:0)
好的,今天我遇到了同样的问题,我通过添加" \ r \ n "解决了这个问题。在发送CTRL + Z(char 26)之前,在消息的末尾。您可以仅使用" \ n"
进行尝试答案 2 :(得分:-1)
试试这个
Dim SMSPort = New SerialPort
With SMSPort
.PortName = "COM2"
.BaudRate = 9600
.Parity = Parity.None
.DataBits = 8
.StopBits = StopBits.One
.Handshake = Handshake.None
.DtrEnable = True
.RtsEnable = True
.NewLine = vbCrLf
End With
SMSPort.Open()
SMSPort.WriteLine("AT" & Chr(13))
Threading.Thread.Sleep(200)
SMSPort.WriteLine("AT+CMGF=1" & Chr(13))
Threading.Thread.Sleep(200)
SMSPort.WriteLine("AT+CMGS=" & Chr(34) & TextBox1.Text & Chr(34))
Threading.Thread.Sleep(200)
SMSPort.WriteLine("TEST MESSAGE" & Chr(26))
Threading.Thread.Sleep(200)
MsgBox(SMSPort.ReadExisting())
SMSPort.Close()
添加SMSPort.WriteLine(“AT”& Chr(13)),我用WriteLine替换了Write并删除了vbCrlf。还将Chr(13)添加到SMSPort.WriteLine(“AT + CMGF = 1”)