数据报是应用程序通过网络发送的独立数据包。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();