2.2.4 使用資料報連線
資料報是應用程式通過網路傳送的獨立資料包。Datagram物件是作為資料報載體的位元組陣列的封裝。使用資料報連線來發送和接受資料報。
為使用資料報連線,你必須使你的裝置連線到無線網路,包括一個GPRS網路的接入點(APN)。使用UDP連線需要你與服務提供商緊密合作。確定你的服務提供商支援UDP連線。
為使用資料報連線,
匯入如下類:
net.rim.device.api.system.CoverageInfo
javax.microedition.io.Connector
java.lang.String
匯入如下介面:
net.rim.device.api.system.CoverageStatusListener
javax.microedition.io.DatagramConnection
javax.microedition.io.Datagram
使用net.rim.device.api.system包中的CoverageInfo類和CoverageStatusListener介面來確認黑莓裝置在無線網路覆蓋區域內。
呼叫Connector.open(),指定udp為協議並將返回的物件轉型為DatagramConnection物件來開啟一個數據報連線。
(DatagramConnection)Connector.open("udp://host:dest_port[;src_port]/apn");
其中:
host 是點分ASCII十進位制數格式的主機地址。
dest-port 是主機地址的目標埠 (接收訊息時是可選的)。
src-port 本地源埠 (可選)。
apn 是字串格式的網路APN。
5.為在指定主機上的所有埠接收資料報,省略連線字串中的目標埠。
6.為在非GPRS網路中開啟資料報連線,指定源埠,包括結尾的斜線。例如,一個CDMA網路連線的地址可能是:
udp://121.0.0.0:2332;6343/.
你可以在同一個埠傳送和接收資料報。
7.為建立資料報,呼叫DatagramConnection.newDatagram()。
Datagram outDatagram = conn.newDatagram(buf, buf.length);
8.為資料報新增資料,呼叫Datagram.setData(). byte[] buf = new byte[256];
outDatagram.setData(buf, buf.length);
9.為在資料報連線上傳送資料,在資料報連線上呼叫呼叫send()
conn.send(outDatagram);
如果一個黑莓Java應用程式嘗試在一個數據報連線上傳送資料報,而接收者沒有在指定的源埠監聽,將會丟擲IOException。確保黑莓Java應用程式實現了異常處理。
10.為在資料報連線上接收資料,在資料報連線上呼叫receive()。receive()方法將阻塞直到收到一個數據包。使用一個定時器來在未收到迴應時轉發請求或關閉連線。
byte[] buf = new byte[256];
Datagram inDatagram = conn.newDatagram(buf, buf.length);
conn.receive(inDatagram);
為從資料報中提取資料,呼叫getData()。如果你知道接受的資料的型別,將資料轉換為適當的型別。
String received = new String(inDatagram.getData());
關閉資料報連線,在輸入流、輸出流和資料報連線物件上呼叫close()。
conn.close();