首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

C# 開發終端機簡訊(SMS)完整指南:PDU 編碼與 AT 指令

     編輯:C# 入門

一、簡訊編碼模式演進

  1. Block Mode(早期)
  2. Text Mode(AT 指令文字模式,諾基亞常支援)
  3. PDU Mode:十六進位編碼,西門子等主流手機支援,現為標準。

二、PDU 編碼詳解(UCS2/16-bit,最多 70 字)

範例:發送「你好,Hello!」給 13715342642,簡訊中心號 8613800755000。

完整 PDU 字串:

0891683108705500F011000D91683117352446F2000800124F60597DFF0C00480065006C006C006F0021

欄位拆解

片段意義
08簡訊中心號長度(含 91 號碼類型)
91TON/NPI:國際格式(E.164,號碼前加 +)
683108705500F0簡訊中心號(實際 8613800755000,F 為長度補位)
11PDU 標頭:提交、無狀態報告、無有效期、UCS2 編碼
00TP-MR 訊息參考號
0D接收方號碼長度(13 位)
91接收方號碼類型(國際格式)
683117352446F2接收方號碼(實際 8613715342642)
00TP-PID 協定識別碼
08TP-DCS 資料編碼:UCS2 (16-bit)
00TP-VP 有效期:無
12TP-UDL 使用者資料長度(18 bytes = 36 十六進位字元)
4F60597DFF0C00480065006C006C006F0021內容「你好,Hello!」UCS2 編碼

三、關鍵 AT 指令

指令功能
AT測試連線,回 OK 表示正常
AT+CMGF=0設定 PDU 模式(1=Text)
AT+CMGS=33發送 PDU,33 為 PDU 字串長度/2(不含前兩欄位)
AT+CMGR=1讀取簡訊
AT+CMGL=4列出所有簡訊
AT+CMGD=1刪除簡訊
AT+CSCA="8613800755000"設定簡訊中心號

四、發送流程實作

  1. 串列埠設定:19200/9600 baud, 8N1, 手機資料線連接。
  2. 發送 AT 確認連線。
  3. 發送 AT+CMGF=0 進入 PDU 模式。
  4. 發送 AT+CMGS=長度,收到 > 提示後送入 PDU 字串,結尾送 Ctrl+Z (0x1A)。
  5. 等待 OK 表示發送成功。

五、C# 串列埠通訊骨架

using System.IO.Ports;

SerialPort sp = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
sp.Open();
sp.WriteLine("AT");
Thread.Sleep(500);
sp.WriteLine("AT+CMGF=0");
Thread.Sleep(500);
sp.Write("AT+CMGS=33\r");
Thread.Sleep(500);
sp.Write(pduString + "\x1A"); // Ctrl+Z
Thread.Sleep(3000);
string resp = sp.ReadExisting();
sp.Close();

實務建議

  • PDU 編碼/解碼邏輯建議封裝為獨立類別(參考原文 PDUdecoding.cs)。
  • 長簡訊需拆分為多段 PDU(UDH 指示分段)。
  • 生產環境請加入重試、超時、編碼驗證機制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved