亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 收發原理.txt

?? 使用Gsm手機模塊發送手機短信的C#源代碼、手機AT指令中文參考手冊、短信解碼及編碼規范、收發原理、以及一個C#實現的Demo
?? TXT
?? 第 1 頁 / 共 3 頁
字號:
  原理篇

  短信編碼

  在收發短信方面,按時間產生先后,共產生了三種模式:Block Mode、基于AT指令的Text Mode、基于AT指令的PDU Modem, Text Mode比較簡單,多款諾基亞手機均支持該模式。西門子的手機大多只支持PDU模式,PDU模式是發送或接收手機SMS信息的一種方法,短信息正文經過十六進制編碼后被傳送。目前,PDU已取代Block Mode,因我們主要探討PDU模式的發送。以西門子3508手機為例。

  SMS是由Etsi所制定的一個規范(GSM 03.40 和 GSM 03.38)。當使用7-bits編碼時,它可以發送最多160個字符;但用8-bit編碼,最多可以發送140個字符,通常無法直接通過手機顯示;還有用16-bit編碼時,最多70個字符,被用來顯示Unicode(UCS2)文本信息,可以被大多數的手機所顯示。我們今天討論的是UCS2編碼,也就是說,最多只能發送70個字符,不管英文還是中文。

  現例如我們現在要發送如下信息,向我的手機13715342642發送"你好,Hello!"。在沒有發送之前,你要清楚,手機SIM卡所在地的短信中心號,并不是你現在所在地方的短信中心號,像我在深圳,深圳的短信中心號是:8613800755000,即使我現在到外地,短信中心號仍是深圳。從上面我們得到了下面的信息:

  接收的手機號:13715342642
  短信中心號:8613800755000
  短信內容:你好,Hello!

  在實際使用中,上面這些信息并不為手機所執行,要進行編碼手機才會執行,先不管,看看編碼后的信息:

0891683108705500F011000D91683117352446F2000800124F60597DFF0C00480065006C006C006F0021
										000D91683117352446F2000800124F60597DFF0C00480065006C006C006F0021

  看不懂吧,我來解釋一下:

  08 - 指的是短信中心號的長度,也就是指(91)+( 683108705500F0)的長度

  91 - 指的是短信息中心號碼類型。91是TON/NPI遵守International/E.164標準,指在號碼前需加'+'號;此外還有其它數值,但91最常用。

  683108705500F0 - 短信息中心號碼。由于位置上略有處理,實際號碼應為:8613800731500(字母F是指長度減1)。這需要根據不同的地域作相應的修改。前面的(08)+(91)+( 683108705500F0)實際上就構成了整個短信的一部份,通稱短消息中心地址(Address of the SMSC)。

  11 - 文件頭字節

  00 - 信息類型(TP-Message-Reference)

  0D - 被叫號碼長度

  91 - 被叫號碼類型

  其實在實際處理中,我們通常把11000D91寫死在程序中,因為在國內,這些數據都是不會改變的。

  683117352446F2 -被叫號碼,經過了位移處理,實際號碼為"8613715342642"。上面的(00)+(0D)+(91)+( 683117352446F2),構成了整個短信的第二部份目的地址(TP-Destination-Address)。

  00 - 協議標識TP-PID,這里一般為00

  08 - 數據編碼方案TP-DCS(TP-Data-Coding-Scheme),采用前面說的USC2(16bit)數據編碼

  00 - 有效期TP-VP(TP-Valid-Period)

  12-長度TP-UDL(TP-User-Data-Length),也就是4F60597DFF0C00480065006C006C的長度 36 / 2 = 18 的十六進 12

  4F60597DFF0C00480065006C006C 006F0021- 這里就是短信內容了,實際內容為:"你好,Hello!"程序實現,請參考本文章所帶源程序的PDUdecoding.cs。


AT指令

  說到AT指令可多了,有厚厚的一本書,不屬于我們今天討論的范圍,在這里我僅討論在發送短信中必須要用的幾個AT指令。

  與SMS有關的GSM AT指令(from GSM07.05)如表1所示:

AT 指令 功 能  
AT+CMGC Send an SMS command(發出一條短消息命令) 
AT+CMGD Delete SMS message(刪除SIM卡內存的短消息)  
AT+CMGF Select SMS message formate(選擇短消息信息格式:0-PDU;1-文本) 
AT+CMGL List SMS message from preferred store(列出SIM卡中的短消息PDU/text: 0/"REC UNREAD"-未讀,1/"REC READ"-已讀,2/"STO UNSENT"-待發,3/"STO SENT"-已發,4/"ALL"-全部的) 
AT+CMGR Read SMS message(讀短消息) 
AT+CMGS Send SMS message(發送短消息)  
AT+CMGW Write SMS message to memory(向SIM內存中寫入待發的短消息) 
AT+CMSS Send SMS message from storage(從SIN|M內存中發送短消息)  
AT+CNMI New SMS message indications(顯示新收到的短消息) 
AT+CPMS Preferred SMS message storage(選擇短消息內存) 
AT+CSCA  SMS service center address(短消息中心地址) 
AT+CSCB Select cell broadcast messages(選擇蜂窩廣播消息)  
AT+CSMP Set SMS text mode parameters(設置短消息文本模式參數)  
AT+CSMS Select Message Service(選擇短消息服務) 
表一:相關的GSM AT指令

  我現在以實例來說明這些指令的使用方法:

  先用手機數據線將手機連接到電腦串口,并將串口的波特率設置為19200,可以開始了。

  1、首先測試你的連接及手機是否支持AT指令,請在你的串口調試程序中輸入:

  AT<回車>

  屏幕上返回"OK"表明計算機與手機連接正常,那樣我們就可以進行其它的AT指令測試了

  2、設置短信發送格式

  AT+CMGF=1<回車>

  屏幕上返回"OK"表明現在短信的發送方式為PDU方式,如果是設置為TEXT方式,則,AT+CMGF=0<回車>

  3、 發送短信

  發送內容及手要號仍舊同上面在編碼中的一樣,編碼后,得到要發送的數據如下

0891683108705505F011000D91683117352446F2000800124F60597D002C00480065006C006C006F0021

  我們用如下指令來發送

  AT+CMGS=33<回車>

  如果返回">",就把上面編碼數據輸入,并以CTRL+Z結尾,稍等一下,你就可以看到返回OK啦。

  說明一下,為什么AT+CMGS=33呢,是這樣得來的:

11000D91683117352446F2000800124F60597D002C00480065006C006C006F0021

  這一段字符串的長度除以2得到的結果,上面的字符串,短信中心號加上短信內容得到的,怎么得到的,請回顧一下解碼部份

  在我們前面的討論中,一條完整的短信發送,只要執行三條AT指令,AT、AT+CMGS=?、AT+CMGS=?就可以了。由于篇幅,我只能在這里提到這么多,大家要是想了解更多,可以向各手機廠商索取AT指令白皮書,里面很詳細的。

  上面講到的,只能為我們實際中作準備,我們還必須要一個發送途徑,根據我們的需要,我們選擇投資最少,實現比較方便的串口通信。注意,串口通過數據線跟手機相連,用AT指令來實現發送短信,在我們選擇數據線時,建議購買原廠所配,非原廠所配,在使用過程中,經常出現一些莫明其妙的問題,比如,手機屏幕黑了,手機老是提示電池電量不足之類的。
串口通信

  在C#中要實現串口通信,很多人都不知所措,在論壇上經??梢钥吹?quot;怎么用MSCOMM實現串口通信"、"怎樣能過串口與設備相連"諸如此類的問題。其實國外的網友早就把這些列入FAQ中了。

  通常,在C#中實現串口通信,我們有四種方法:	

  第一:通過MSCOMM控件這是最簡單的,最方便的方法。可功能上很難做到控制自如,同時這個控件并不是系統本身所帶,所以還得注冊,不在本文討論范圍。可以訪問http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=320 ,一個國外網友的寫的教程,作者很熱心,我曾有發郵件給他,很快就回復了。

  第二:微軟在.NET新推出了一個串口控件,基于.NET的P/Invoke調用方法實現,詳細的大家可以訪問微軟網站http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx,方便得到更多資料。

  第三:就是用第三方控件啦,可一般都要付費的,不太合實際,不作考慮

  第四:自己用API寫串口通信,這樣難度高點,但對于我們來說,可以方便實現自己想要的各種功能

  在本文,我們采用第四種方法來實現串口通信,不過不是自己寫,用一個國外網友現成的已經封裝好的類庫,不過功能簡單點,相對我們來說已經夠用了。

  在整個終端短信的操作過程中,與串口的通信,只用到了四個功能,打開、寫、讀、關閉串口。下面是類庫對這四個功能的定義:

  打開串口:

  函數原型:public void Open()

  說明:打開事先設置好的端口

  示例:

using JustinIO;

static JustinIO.CommPort ss_port = new JustinIO.CommPort();
ss_port.PortNum = COM1; //端口號
ss_port.BaudRate = 19200; //串口通信波特率
ss_port.ByteSize = 8; //數據位
ss_port.Parity = 0; //奇偶校驗
ss_port.StopBits = 1;//停止位
ss_port.ReadTimeout = 1000; //讀超時
try
{
 if (ss_port.Opened)
 {
  ss_port.Close();
  ss_port.Open(); //打開串口
 }
 else
 {
  ss_port.Open();//打開串口
 }
 return true;
}
catch(Exception e) 
{
 MessageBox.Show("錯誤:" + e.Message);
 return false;
} 

  寫串口:

  函數原型:public void Write(byte[] WriteBytes)

  WriteBytes 就是你的寫入的字節,注意,字符串要轉換成字節數組才能進行通信

  示例:

ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r")); //獲取手機品牌

  讀串口:

  函數原型:public byte[] Read(int NumBytes)

  NumBytes 讀入緩存數,注意讀取來的是字節數組,要實際應用中要進行字符轉換

  示例:

string response = Encoding.ASCII.GetString(ss_port.Read(128)); //讀取128個字節緩存

  關閉串口:

  函數原型:ss_port.Close()

  示例:

ss_port.Close();

  由于篇幅,以及串口通信涉及內容廣泛,我在這里只講這些。

  在上面我們已經把終端短信所需的各種原始技術有所了解,是可以小試牛刀的時候了。
實踐篇

  在整個開始的時候,你要準備以下軟硬件:

   硬件:西門子3508或C35系列手機一個
   西門子手機通信數據線一條
   軟件:VS.NET(C#)
   短信編碼類庫(PDUdecoding.cs)
   串口通信類庫(JustinIO.cs)

  當所要求的軟硬件都準備好后,我們就可以正式開始了。下面以我自己的測試用例為大家詳細介紹。

   做什么事情都應該有計劃,雖然我們的測試用例很簡單,但還是畫個簡單的流程圖: 



  有了流程圖,還只是明白了程序怎么運行,再看看界面,會讓你更心動的了。


圖二、短信終端C#版界面圖

  再不開始,就有人罵我了。下在我講的開發環境是在VS.NET(C#)中。COME GO,GO…

  步驟一、打開VS.NET,新建項目->Visual C#項目->Windows應用程序,名稱中輸入你的工程名就行啦,我的是smsForCsharp

  步驟二、參照上面的界面圖,設計你的程序界面,下面是我程序中各控件的主要屬性

控件名稱 控件Name屬性 說明 
TextBox targetNumber 接收手機號碼 
TextBox CenterNumber 短信中心號 
TextBox smsState 發送短信后,返回的信息。注意設置控件為多行 
TextBox  smsContent 短信內容,同樣,注意設置為多行 
ComboBox ConnectPort 連接手機的端口,例:COM1\COM2 
ComboBox ConnectBaudRate 串口連接的波特率,在串口通信中很重要的 
Button btnSend 發送按鈕 
Button btnConnect 連接按鈕,主要用于程序的初始化 
Button btnExit 退出按鈕 

  步驟三、將PDUdecoding.cs與JustinIO.cs拷入剛剛新建工程目錄,并打開解決方案資源管理器,右鍵添加現有項,選中兩個文件就行了,這里再打開類視圖,里面是不是多了兩個類,JustinIO與SMS類啊,如圖三,要是沒有,那你再試。


圖三,添加類后的類視圖

  步驟四、引用命名空間,用代碼查看方式打開Form1.cs(這里以我電腦為準,如果你自己更改過,請以你電腦為準),在代碼前面加上

using JustinIO;
using SMS;
using System.IO;
using System.Text; 

  步驟五、在smsFormCsharp類中,添加兩個字段ss_port、sms,分別為JustinIO及SMS的對象,如下



  步驟六、添加串口初始化代碼,如下:

/// <summary>
/// 初始化串口
/// </summary>
public bool InitCom(string m_port, int m_baudrate)
{
 ss_port.PortNum = m_port;//串口號
 ss_port.BaudRate = m_baudrate;//波特率
 ss_port.ByteSize = 8;//數據位
 ss_port.Parity = 0;//
 ss_port.StopBits = 1;//停止位
 ss_port.ReadTimeout = 1000;//讀超時
 try
 {
  if (ss_port.Opened)
  {
   ss_port.Close();
   ss_port.Open();
  }
  else
  {
   ss_port.Open();//打開串口
  }
  return true;
 }
 catch(Exception e) 
 {
  MessageBox.Show("錯誤:" + e.Message);
  return false;
 }
} 

  將上述代碼直接拷入你的程序中,并確保添加在Main主函數的后面,按F5,調試應該沒什么問題,不過上面還沒有實際任何看得見的功能,僅僅是打開了串口而以。

  步驟七、打開串口后,我們就應該初始化程序,取得手機的名牌,型號,以及短信中心號,雙擊連接按鈕,并把下面代碼拷入程序中:

/// <summary>
/// 初始化代碼,并獲取手機相關信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnConnect_Click(object sender, System.EventArgs e)
{
 bool opened = InitCom(ConnectPort.SelectedItem.ToString(),Convert.ToInt32(ConnectBaudRate.SelectedItem.ToString()));//打開并初始化串口
 bool Connected = false;
 if (opened)
 {
  ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r")); //獲取手機品牌
  string response = Encoding.ASCII.GetString(ss_port.Read(128));
  if (response.Length > 0)
  {
   ConnectState.Text = response.Substring(10,7);
   Connected = true;
  }
  else
  {
   ConnectState.Text = "與手機連接不成功";
   Connected = false;
  }
  ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMM\r"));//獲取手機型號
  response = Encoding.ASCII.GetString(ss_port.Read(128));
  if(response.Length > 0)
  {
   ConnectState.Text =ConnectState.Text+ " " + response.Substring(10,5) + " 連接中......";
   Connected = true;
  }
  else
  {
   ConnectState.Text = "與手機連接不成功";
   Connected = false;
  }
  ss_port.Write(Encoding.ASCII.GetBytes("AT+CSCA?\r"));//獲取手機短信中心號
  response = Encoding.ASCII.GetString(ss_port.Read(128));
  if(response.Length > 0)
  {
   CenterNumber.Text = response.Substring(20,13);
   Connected = true;
  }
  else
  {
   Connected = false;
  }
  if (Connected == true)
  {
   btnConnect.Enabled = false;
   btnSend.Enabled = true;
  }
  else
  {
   btnConnect.Enabled = true;
   btnSend.Enabled = false;
  }
 }
} 

  到這里,你可以按F5,編譯調試,通過,在確保你的手機與電腦連接正常下,點擊連接按鈕看看,是不是像我的一樣,手機型號及短信中心號者正常顯示出來了。 


圖四、連接后程序界面

  步驟八、看到上在的結果,是不是感覺到離成功發送短信很近啦,看這么長的文章,費了大家不少時間,再不亮出發短信部份,對不起大家了。

  雙擊發送按鈕,將下面代碼拷入程序中。

/// <summary>
/// 發送短信
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, System.EventArgs e)
{
 string decodedSMS = sms.smsDecodedsms(CenterNumber.Text,targetNumber.Text,smsContent.Text);
 byte[] buf =Encoding.ASCII.GetBytes(String.Format("AT+CMGS={0}\r",sms.nLength));
 ss_port.Write(buf);
 string response = Encoding.ASCII.GetString(ss_port.Read(128));
 string SendState = "";
 if( response.Length > 0 && response.EndsWith("> "))
 {
  ss_port.Write(Encoding.ASCII.GetBytes(String.Format("{0}\x01a",decodedSMS)));
  SendState = "發送成功!";
 }
 else
 {
  SendState = "發送失敗";
 }

 string Result = String.Format("{0},{1},{2},\n\r",targetNumber.Text,smsContent.Text,SendState);
 smsState.Text += Result;
} 

  快按F5吧!神啊,快通過吧!不用求神了,已經通過了,現在你就可以發短信了,請確保手機可以正常連接電腦。按連接,然后填入你要的發送的目標手機號,并在內容中添入你要發送的內容,發送吧!成功了!成功了是這樣子的!看你的跟我的一樣嗎?


圖五、發送成功

  還有一些事 不要忘了,記得添加退出代碼。雙擊退出,添加下面代碼:

/// <summary>
/// 關閉串口,退出程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExit_Click(object sender, System.EventArgs e)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩成人高清在线一区| 7777精品久久久大香线蕉| 亚洲午夜影视影院在线观看| 中文字幕av不卡| 国产精品网友自拍| 亚洲人一二三区| 亚洲免费在线观看视频| 一区二区三区蜜桃| 天涯成人国产亚洲精品一区av| 婷婷开心激情综合| 青青草97国产精品免费观看| 免费精品视频在线| 国产精品88av| 在线免费视频一区二区| 欧美老肥妇做.爰bbww视频| 欧美大白屁股肥臀xxxxxx| 久久蜜桃av一区精品变态类天堂 | 欧美日韩在线综合| 91精品国产综合久久久久久久久久 | 日本中文字幕一区二区视频 | 偷拍一区二区三区| 免费观看91视频大全| 国产揄拍国内精品对白| 92国产精品观看| 欧美老女人在线| 国产色产综合产在线视频| 一区二区三区精品在线观看| 日韩国产一区二| 国产精品888| 欧日韩精品视频| 精品成人a区在线观看| 综合欧美一区二区三区| 免费观看日韩电影| 不卡的看片网站| 欧美一区二区三区的| 欧美国产精品v| 五月激情六月综合| 不卡高清视频专区| 欧美不卡一区二区三区| 一区二区三区四区国产精品| 九九在线精品视频| 欧美亚洲国产一区二区三区| www久久精品| 天涯成人国产亚洲精品一区av| 国产精品77777| 日韩丝袜美女视频| 亚洲综合色在线| 国产成都精品91一区二区三| 欧美一区二区在线看| 一区二区三区在线视频观看58| 国产一区二区成人久久免费影院| 欧美性大战久久久久久久蜜臀| 久久精品综合网| 日韩 欧美一区二区三区| 色视频成人在线观看免| 国产日韩欧美高清| 国产一区二区三区综合| 欧美精品久久久久久久多人混战| 日韩一区有码在线| 国产91精品露脸国语对白| 中文字幕中文字幕一区| 久久99精品国产.久久久久久| 欧美优质美女网站| 欧美精品v国产精品v日韩精品| 精品国产网站在线观看| 日本不卡123| 欧美日韩精品一区二区| 欧美国产亚洲另类动漫| 亚洲欧美成人一区二区三区| 欧美日韩亚洲综合| 国产精品自拍一区| 性做久久久久久免费观看| 久久久久久**毛片大全| 欧美三级中文字| 成人精品一区二区三区中文字幕| 性做久久久久久免费观看欧美| 久久精品视频一区二区| 欧美高清性hdvideosex| 3751色影院一区二区三区| 国产精品一线二线三线| 香蕉成人伊视频在线观看| 国产人成一区二区三区影院| 欧美欧美欧美欧美| 91片在线免费观看| 国产精品一二二区| 免费观看一级特黄欧美大片| 一区二区三区成人在线视频| 国产三级欧美三级日产三级99 | 久久99精品国产.久久久久久| 一区二区不卡在线播放| 国产色产综合色产在线视频 | 蜜桃视频在线观看一区二区| 悠悠色在线精品| 久久精品人人爽人人爽| 欧美变态tickle挠乳网站| 欧美日韩一区二区在线观看| 99re成人精品视频| 国产麻豆视频一区二区| 日韩av电影一区| 亚洲成精国产精品女| 亚洲人吸女人奶水| 国产精品狼人久久影院观看方式| 日韩欧美亚洲国产另类| 欧美疯狂做受xxxx富婆| 色狠狠色噜噜噜综合网| 91网上在线视频| 99re8在线精品视频免费播放| 国产成人精品免费在线| 国产一区二区女| 国模少妇一区二区三区| 精品在线亚洲视频| 狠狠色综合色综合网络| 经典三级视频一区| 精品一区二区日韩| 麻豆极品一区二区三区| 日韩av电影免费观看高清完整版 | 国产欧美日韩三区| 欧美国产日韩在线观看| 久久精品欧美一区二区三区麻豆| 精品不卡在线视频| 国产清纯美女被跳蛋高潮一区二区久久w | 国产三级欧美三级日产三级99| 国产欧美日韩卡一| 亚洲婷婷在线视频| 一区二区三区四区在线免费观看 | 久久er精品视频| 国产精品一区二区三区网站| 国产成人综合亚洲网站| av激情成人网| 欧美日韩国产不卡| 日韩一级二级三级| 国产亚洲成aⅴ人片在线观看 | 不卡一区中文字幕| 91麻豆swag| 欧美一区二区三区视频在线 | 日韩亚洲电影在线| 久久色在线观看| 综合激情成人伊人| 视频精品一区二区| 国产揄拍国内精品对白| 91蜜桃在线免费视频| 在线播放一区二区三区| 欧美精品一区二区三区蜜臀| 成人免费小视频| 丝袜美腿高跟呻吟高潮一区| 精品一区二区三区影院在线午夜| 国产福利精品一区| 欧美性猛交xxxx黑人交| 欧美tickling网站挠脚心| 国产精品黄色在线观看| 五月天激情综合| 成人自拍视频在线| 欧美日韩www| 国产精品视频一二三| 午夜精品福利在线| 成人国产在线观看| 日韩三区在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 奇米888四色在线精品| 成人黄色小视频| 欧美一区在线视频| 中文字幕一区在线观看| 男女视频一区二区| 色久优优欧美色久优优| 久久久久久毛片| 日韩不卡手机在线v区| 91网站在线观看视频| 久久久九九九九| 天天影视色香欲综合网老头| 99久久精品国产一区二区三区| 日韩午夜激情av| 夜夜嗨av一区二区三区网页| 国产aⅴ精品一区二区三区色成熟| 欧美酷刑日本凌虐凌虐| 亚洲精品v日韩精品| 丁香五精品蜜臀久久久久99网站| 国产精品美女久久久久aⅴ| 久久精品国产亚洲5555| 欧美日韩亚洲国产综合| 亚洲精品欧美二区三区中文字幕| 国产成人免费视频网站 | **欧美大码日韩| 国产精品亚洲一区二区三区妖精| 91精品国产综合久久精品性色 | 在线日韩av片| 亚洲精品乱码久久久久久日本蜜臀| 国产麻豆成人精品| 日韩美一区二区三区| 日本欧美久久久久免费播放网| 欧美亚洲综合另类| 一区二区在线观看视频在线观看| 粉嫩av一区二区三区粉嫩| 欧美精品一区二区三区蜜桃| 蜜桃一区二区三区在线| 日韩女优电影在线观看| 免费观看日韩电影| 欧美tickling网站挠脚心| 久久er99热精品一区二区| 久久久亚洲午夜电影| 国产精品99久久久久久久vr|