亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法使用gsm調制解調器使用System.IO.Ports通過C#代碼發送SMS

無法使用gsm調制解調器使用System.IO.Ports通過C#代碼發送SMS

C#
一只名叫tom的貓 2019-08-14 15:47:22
無法使用gsm調制解調器使用System.IO.Ports通過C#代碼發送SMS單擊一個按鈕,將短信發送到NumTxt文本框中輸入的數字,并發送在SMSTxt文本框中輸入的文本。在texbox中輸入的端口名稱ComPort這是按鈕單擊事件的事件處理程序。  using System.IO.Ports;   private void button1_Click(object sender, EventArgs e)     {         try         {             int mSpeed = 1;             serialport.PortName = ComPort.Text;             serialport.BaudRate = 96000;             serialport.Parity = Parity.None;             serialport.DataBits = 8;             serialport.StopBits = StopBits.One;             serialport.Handshake = Handshake.XOnXOff;             serialport.DtrEnable = true;             serialport.RtsEnable = true;             serialport.NewLine = Environment.NewLine;             Console.WriteLine("1a");             try             {                 serialport.Open();             }             catch (Exception)             {                 MessageBox.Show("Try another Port." +      Environment.NewLine + "Phone not detected or The requested resource is in           use.", "CONNECTION ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);                 return;             }             Console.WriteLine("2a");             serialport.WriteLine("AT+CMGF=1" + Environment.NewLine);             System.Threading.Thread.Sleep(200);             serialport.WriteLine("AT+CSCS=GSM" + Environment.NewLine);             System.Threading.Thread.Sleep(200);             serialport.WriteLine("AT+CMGS=" + (char)34 + NumTxt.Text             + (char)34 + Environment.NewLine);             System.Threading.Thread.Sleep(200);             serialport.WriteLine(SMSTxt.Text + (char)26);             System.Threading.Thread.Sleep(mSpeed);             serialport.Close();         }         catch (Exception)         {             if (serialport.IsOpen)                 serialport.Close();             MessageBox.Show("Couldn't send the SMS.", "CONNECTION ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);         }     }我昨天能夠使用這個代碼發送短信,但我不知道為什么它不再起作用..沒有例外拋出。當我使用gsm調制解調器附帶的軟件時,我可以發送短信。但不是通過C#代碼。如果有人能指出上述代碼中的錯誤,我將非常感激。
查看完整描述

1 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

永遠不應該,永遠不要使用睡眠代替等待調制解調器的最終結果代碼。正如您不會編寫完全忽略來自http服務器的所有響應的http客戶端一樣,您不應將AT命令發送到調制解調器并完全忽略它發回的響應。您必須閱讀并解析調制解調器發回給您的所有內容。沒有別的東西能可靠地運作。

我的建議是,您首先要獲取V.250標準的副本,并至少閱讀第5章的全部內容。該標準是AT命令處理的圣經,并將教您大量有關AT命令處理的內容。例如,使用WriteLine和/或Environment.NewLine錯誤; AT命令行應該單獨終止,\r沒有別的。


只是為了強調該文件的重要性:即使在愛立信手機中實施AT命令十多年后,我和我的同事仍然定期查閱該標準。

事實上現在停止閱讀這個答案,下載該文件,閱讀第5章的全部內容,然后再回頭閱讀其余內容。


對于發送不特別關心響應1的命令,唯一可靠的方法是執行類似的操作

serialport.Open();...// start sending AT+CMGF=1serialport.Write("AT+CMGF=1\r");do {
    line = readLine(serialport);} while (! is_final_result_code(line))// Sending of AT+CMGF=1 command finished (successfully or not)...serialport.Close();

其中readLine函數從串行端口,直到它接收與終止的完整的線讀出一個與一個字節\r\n,然后返回該行。

您可以查看atinout的代碼以獲取該is_final_result_code功能的示例(您也可以在ST-Ericsson的U300 RIL中isFinalResponseErrorisFinalResponseSuccess22進行比較)。

查看完整回答
反對 回復 2019-08-14
  • 1 回答
  • 0 關注
  • 505 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號