国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

J2ME的無(wú)線消息傳遞概述與應(yīng)用程序示例

2019-11-18 15:54:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  無(wú)線消息傳遞的目標(biāo)是擴(kuò)展 J2ME 應(yīng)用程序的聯(lián)網(wǎng)和 I/O 能力,以便能使用 GSM 網(wǎng)絡(luò)上的消息傳遞服務(wù)(如短信服務(wù)(Short Message Service,SMS)和小區(qū)廣播服務(wù)(Cell Broadcast Service,CBS))來(lái)發(fā)送和接收消息。
  
  GSM 短信服務(wù)(SMS)
  SMS 是 GSM 網(wǎng)絡(luò)中移動(dòng)電話、傳真機(jī)和/或 ip 地址之間簡(jiǎn)短文本消息的傳遞。消息不得超過(guò) 160 個(gè)字母數(shù)字字符且不包含圖像或圖形。這一服務(wù)的主要特性是迅速、價(jià)廉并能保證消息會(huì)到達(dá)目標(biāo)用戶(哪怕他在信號(hào)覆蓋范圍之外或已關(guān)掉電話)。消息一經(jīng)發(fā)送,就會(huì)由短信服務(wù)中心(SMSC)接收,該中心必須隨即將消息發(fā)送到適當(dāng)?shù)囊苿?dòng)設(shè)備。為了做到這一點(diǎn),SMSC 會(huì)向歸屬位置寄存器(home location register,HLR)發(fā)送 SMS 請(qǐng)求以找到漫游用戶。一旦 HLR 接收到該請(qǐng)求,就會(huì)以用戶的狀態(tài)(如 1. 不活動(dòng)或活動(dòng),和 2. 漫游位置)來(lái)響應(yīng) SMSC。假如響應(yīng)是不活動(dòng),則 SMSC 將保留消息一段時(shí)間。當(dāng)用戶使用其設(shè)備時(shí),HLR 會(huì)向 SMSC 發(fā)送一個(gè) SMS 通知,而 SMSC 則嘗試進(jìn)行發(fā)送。SMSC 以短信發(fā)送點(diǎn)對(duì)點(diǎn)(Short Message Delivery Point-to-Point)格式將消息發(fā)送到 GSM 消息發(fā)送系統(tǒng)。該系統(tǒng)會(huì)尋呼設(shè)備,若設(shè)備作出響應(yīng),則發(fā)送消息。SMSC 會(huì)收到驗(yàn)證,即消息已經(jīng)由最終用戶接收,然后將該消息歸類為已發(fā)送,并且將不再嘗試發(fā)送它。圖 1 說(shuō)明了 SMS 發(fā)送機(jī)制。
  
 J2ME的無(wú)線消息傳遞概述與應(yīng)用程序示例(圖一)

  
圖 1. SMS 發(fā)送系統(tǒng)

  
  GSM 小區(qū)廣播服務(wù)
  GSM 小區(qū)廣播服務(wù)答應(yīng)將消息發(fā)送到當(dāng)前位于某個(gè)特定小區(qū)的每個(gè)移動(dòng)臺(tái)(Mobile Station,MS),如移動(dòng)電話、傳真機(jī)和/或 IP 地址。在一段時(shí)間內(nèi)會(huì)不時(shí)重復(fù)小區(qū)廣播消息,從而使在第一次發(fā)送之后才進(jìn)入小區(qū)的 MS 也能接收到消息。可以用二進(jìn)制數(shù)據(jù)或 ASCII 文本的形式最多發(fā)送 15 頁(yè)的數(shù)據(jù),每頁(yè)最多有 93 個(gè)字符;測(cè)試裝置僅提供對(duì) ASCII 消息的支持。小區(qū)廣播消息按主題分類,給每條消息都分配了通道號(hào)、消息代碼、更新號(hào)和語(yǔ)言。
  1.通道號(hào)是標(biāo)識(shí)消息主題的頭部號(hào)(如‘氣象報(bào)告’或‘交通信息’)。
  2.消息代碼標(biāo)識(shí)特定的消息,這樣當(dāng) MS 收到的消息的消息代碼與以前收到的相同時(shí),會(huì)意識(shí)到這是一條重復(fù)消息,可能就不會(huì)顯示給用戶了。
  3.更新號(hào)用來(lái)標(biāo)識(shí)消息的特定版本。這對(duì)于報(bào)告動(dòng)態(tài)情況比較有用,在這樣的情況下,消息可能正在報(bào)告某個(gè)事件(如前方道路施工),但事件的詳情經(jīng)常改變(例如,塞車的長(zhǎng)度)。在某個(gè)小區(qū)中停留一段時(shí)間的 MS 將接收帶相同消息代碼的消息,但會(huì)接收作為同一消息更新版本的更新號(hào);然而,進(jìn)入該小區(qū)的 MS 將僅接收最新版本的消息(以及此后的任何后繼版本)。
  4.語(yǔ)言指明消息所用的語(yǔ)言。更改此參數(shù)不會(huì)使消息的原文得到翻譯
  
  SMS 是一對(duì)一和一對(duì)幾的消息傳遞系統(tǒng),而 CBS 則可以在某一個(gè)地區(qū)提供一對(duì)多消息傳遞。
  
  無(wú)線消息傳遞系統(tǒng)
  可以將這一系統(tǒng)看作一個(gè)三層體系結(jié)構(gòu),由接口層(Interface Layer)、實(shí)現(xiàn)層(Implementation Layer)和傳輸層(Transport Layer)組成。
  
  接口層構(gòu)成了一組通用的消息傳遞接口,它們獨(dú)立于所有消息傳遞協(xié)議。這些接口提供消息的基本定義,定義發(fā)送和接收消息的基本功能,以及提供向 MIDlet 應(yīng)用程序通知進(jìn)入消息的機(jī)制。
  
  實(shí)現(xiàn)層包含這樣的類:它們實(shí)現(xiàn)每個(gè)接口層以訪問(wèn)無(wú)線消息傳遞,如 GSM 移動(dòng)設(shè)備上的 SMS 或 CBS 功能。例如,就 SMS 而言,這一層提供了用于 SMS 消息的消息連接的實(shí)現(xiàn),以及具有文本或二進(jìn)制屬性的 SMS 消息的實(shí)現(xiàn)。實(shí)現(xiàn)層還執(zhí)行用于底層協(xié)議的消息分段和并置。然后,MIDlet 可以在 MessageConnection 中指定應(yīng)該將某條消息拆分成幾段。
  
  傳輸層包含這樣的類:它們實(shí)際實(shí)現(xiàn)了將消息傳送到移動(dòng)設(shè)備的協(xié)議。這一三層機(jī)制如圖 2 所示。
  
 J2ME的無(wú)線消息傳遞概述與應(yīng)用程序示例(圖二)

  
圖 2. 無(wú)線消息傳遞系統(tǒng)體系結(jié)構(gòu)

  
  通用消息傳遞 API — javax.wireless.messaging
  此 API 由 javax.wireless.messaging 包定義,該包定義了所有用于發(fā)送和接收無(wú)線消息的接口。以下是一個(gè)接口列表:
  一、Message:它提供消息的基本定義,它充當(dāng)一個(gè)容器來(lái)容納消息的地址、有效負(fù)載及關(guān)于發(fā)送和阻塞的標(biāo)志。它是 TextMessage 和 BinaryMessage 的超接口(superinterface),后兩個(gè)分別是帶文本有效負(fù)載屬性和帶二進(jìn)制有效負(fù)載屬性的消息對(duì)象。Message 的結(jié)構(gòu)如圖 3 所示。
  
J2ME的無(wú)線消息傳遞概述與應(yīng)用程序示例(圖三)

  
圖 3. 消息的結(jié)構(gòu)

  
  二、MessageConnection:它提供接收和發(fā)送消息的基本功能。它包含一個(gè)發(fā)送和接收消息的方法、一個(gè)創(chuàng)建新 Message 對(duì)象的工廠(factory)方法和一個(gè)計(jì)算發(fā)送某指定 Message 對(duì)象所需底層協(xié)議段數(shù)量的方法。通過(guò)調(diào)用 Connector.open() 可將這個(gè)類實(shí)例化。 在客戶機(jī)方式連接中,只能發(fā)送消息。通過(guò)將標(biāo)識(shí)著目的地址的字符串傳遞到 Connector.open() 方法來(lái)創(chuàng)建客戶機(jī)方式連接。該方法返回 MessageConnection 對(duì)象。
  
  clientConn = (MessageConnection)Connector.open("sms:// +18643630999:5000");
  
  在服務(wù)器方式連接中,可以發(fā)送或接收消息。通過(guò)將標(biāo)識(shí)本地主機(jī)上端點(diǎn)(取決于協(xié)議的標(biāo)識(shí)符,例如,端口號(hào))的字符串傳遞給 Connector.open() 方法來(lái)創(chuàng)建服務(wù)器方式連接。
  
  serverConn = (MessageConnection)Connector.open("sms://:5000");
  
  三、MessageListener:它提供了向 MIDlet 應(yīng)用程序通知有進(jìn)入消息的基本機(jī)制。當(dāng)可以讀取新到消息時(shí),它答應(yīng) MIDlet 接收一個(gè)回調(diào)。
  
  短信服務(wù) API
  com.sun.midp.io.j2me.sms 包提供用于短信服務(wù)消息傳遞系統(tǒng)的 API,并答應(yīng) MIDlet 訪問(wèn) GSM 移動(dòng)設(shè)備上的 SMS 功能。該包的主要組件 — MessageObject 和 PRotocol — 支持 SMS 消息的發(fā)送和接收。
  
  一、MessageObject:MessageObject 是 SMS 消息的實(shí)現(xiàn)。在實(shí)現(xiàn)層,javax.wireless.messaging.Message 接口是作為緩沖區(qū)實(shí)現(xiàn)的。MessageObject 處理消息緩沖區(qū)的創(chuàng)建和緩沖區(qū)之外的輸入/輸出操作。此外,它有兩個(gè)子類 — TextObject 和 BinaryObject.這些類實(shí)現(xiàn)具有文本或二進(jìn)制有效負(fù)載的 SMS 消息。
  
  二、Protocol.它實(shí)現(xiàn)發(fā)送 SMS 消息所需的與低層傳輸(Transport)機(jī)制的消息連接。在這一過(guò)程中,它檢查所有的運(yùn)行時(shí)配置參數(shù),并處理與無(wú)效 URL 語(yǔ)法、安全性違規(guī)、I/O 違規(guī)和無(wú)效參數(shù)有關(guān)的異常。Protocol 還處理使用數(shù)據(jù)報(bào)或串行端口連接的消息發(fā)送與接收。
  
  小區(qū)廣播消息傳遞 API
  com.sun.midp.io.j2me.cbs 包提供用于小區(qū)廣播消息傳遞系統(tǒng)的 API,并答應(yīng) MIDLlet 訪問(wèn) GSM 移動(dòng)設(shè)備上的 CBS 功能。該包的主要組件 com.sun.midp.io.j2me.cbs.Protocol 支持 CBS 消息的接收。CBS 與 SMS 的不同之處在于:URL 連接字符串不支持指定的主機(jī),而且它僅用于入站協(xié)議。有 CBS 能力的 MIDlet 可接收消息,但不能發(fā)送它們。
  
  J2ME 消息傳遞應(yīng)用程序
  在這里,我們演示一個(gè) WMAServer 示例,它等候進(jìn)入的 SMS 消息,然后將它們顯示在電話屏幕上。javax.microedition.lcdui 包提供了一組功能,用于實(shí)現(xiàn)應(yīng)用程序的用戶界面。WMAServer MIDlet 通過(guò)將標(biāo)識(shí)本地主機(jī)上端點(diǎn)(取決于協(xié)議的標(biāo)識(shí)符,例如,端口號(hào))的字符串傳遞給 Connector.open() 方法來(lái)創(chuàng)建服務(wù)器方式連接。 為了能收到進(jìn)入消息的通知,MIDlet 在 MessageConnection 實(shí)例 serverConn 處注冊(cè)一個(gè) MessageListener 對(duì)象。
  
  serverConn.setMessageListener(MessageListener ml);
  
  它還在 MessageListener 接口中實(shí)現(xiàn) notifyIncomingMessage()。當(dāng)進(jìn)入消息到達(dá) MessageConnection 時(shí),就調(diào)用 notifyIncomingMessage() 方法。應(yīng)用程序必須使用 MessageConnection 的 receive() 方法來(lái)檢索該消息。WMAServer 應(yīng)用程序從進(jìn)入消息讀取文本或二進(jìn)制的有效負(fù)載數(shù)據(jù),然后將其存儲(chǔ)在字符串對(duì)象中供以后顯示。
  
  public void notifyIncomingMessage(MessageConnection conn) {
  
  Message msg = null;
  // Try reading (maybe block for) a message
  try {
  msg = conn.receive();
  }
  catch (Exception e) {
  // Handle reading errors
  System.out.println("processMessage.receive " + e);
  }
  // Process the received message
  if (msg instanceof TextMessage) {
  TextMessage tmsg = (TextMessage)msg;
  msgReceived = tmsg.getPayloadText();
  }
  else
  {
  // process received message
  if (msg instanceof BinaryMessage) {
  BinaryMessage bmsg = (BinaryMessage)msg;
  byte[] data = bmsg.getPayloadData();
  // Handle the binary message...
  msgReceived = data.toString();
  }
  }
  
  當(dāng)必須釋放連接資源和相關(guān)聯(lián)的偵聽(tīng)器對(duì)象時(shí),應(yīng)用程序提供 destroyApp() 方法。
  
  public void destroyApp(boolean unconditional) {
  try {
  if (serverConn != null) {
  serverConn.setMessageListener(null);
  serverConn.close();
  }
  }
  catch (IOException e) {
  // Handle the exception...
  e.printStacktrace();
  }
  
  以下是完整的應(yīng)用程序代碼:
  <

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绿春县| 宁城县| 武穴市| 高唐县| 容城县| 北票市| 若羌县| 荣成市| 鹤庆县| 武平县| 双牌县| 巴南区| 黄梅县| 新乐市| 岐山县| 鹤山市| 怀仁县| 香格里拉县| 民勤县| 安多县| 黑河市| 象州县| 蒲城县| 曲松县| 平罗县| 安泽县| 都昌县| 冕宁县| 左贡县| 南阳市| 灵璧县| 湖南省| 泰和县| 宕昌县| 古丈县| 徐汇区| 海门市| 泸州市| 基隆市| 西吉县| 玉门市|