1. 程式人生 > >2.2.4 使用資料報連線

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();