vb2008 Отправка SMS начинается со второй строки, а не с первой.

У меня возникли некоторые проблемы с моим текущим проектом. Я использую vb2008 для отправки SMS с помощью AT+Commands. Итак, вот код

Dim sender_port As New System.IO.Ports.SerialPort()
Private Sub btn_sender_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_sender.Click

'set port values
sender_port.PortName = "COM16"
sender_port.BaudRate = 115200
sender_port.Parity = IO.Ports.Parity.None
sender_port.StopBits = IO.Ports.StopBits.One
sender_port.DataBits = 8
sender_port.Handshake = IO.Ports.Handshake.RequestToSend
sender_port.DtrEnable = True
sender_port.RtsEnable = True
sender_port.NewLine = vbCrLf

sender_port.Open()

If sender_port.IsOpen Then
    Dim forSending As New MySqlDataAdapter("select * from sms_for_sending where dateSent = 0000-00-00 LIMIT 1", myconn)
    Dim myDataTable As New DataTable

    forSending.Fill(myDataTable)

    If myDataTable.Rows.Count = 1 Then
        'send message
        sender_port.Write("AT" & vbCrLf)
        sender_port.Write("AT+CMGF=1" & vbCrLf)
        sender_port.Write("AT+CMGS=" & Chr(34) & myDataTable.Rows(0).Item("recepient") & Chr(34) & vbCrLf)
        sender_port.Write(myDataTable.Rows(0).Item("message") & vbCrLf & vbCrLf & "Sent using SMS Server" & vbCrLf & "(do not reply)" & Chr(26))
    Else
        MessageBox.Show("Sender Port no Available", "SMS Server")
    End If
End If
End Sub

Сообщение успешно отправлено. Но сообщение, которое я получаю:

"
Это тестовое сообщение

Отправлено с помощью SMS-сервера
(не отвечать)
"

вместо:

"Это тестовое сообщение

Отправлено с помощью SMS-сервера
(не отвечать)
"

Пожалуйста помоги. Спасибо

EDIT: я решил это.

Я думал, что vbCrLf — это всего лишь одна функция. Но, проведя некоторые исследования, я обнаружил, что vbCrLf эквивалентен «\r\n», а только vbCr — «\r», а vbLf — «\n».

Я только что изменил vbCrLf на vbCr в

sender_port.Write("AT+CMGS=" & Chr(34) & myDataTable.Rows(0).Item("recepient") & Chr(34) & vbCrLf)

сейчас

sender_port.Write("AT+CMGS=" & Chr(34) & myDataTable.Rows(0).Item("recepient") & Chr(34) & vbCr)

person Bong Naval    schedule 24.07.2014    source источник
comment
Вместо того, чтобы встраивать решение в вопрос, вы можете создать ответ на свой собственный вопрос (это нормально и правильный способ сделать это).   -  person hlovdal    schedule 25.07.2014
comment
Также вам необходимо исправить (отсутствующую) обработку ответа на команду AT в целом и, в частности, обработку префикса \r\n> для AT+CMGS, см. этот ответ. Если ваш код в настоящее время работает так, как ожидалось, вам просто повезло.   -  person hlovdal    schedule 25.07.2014