下一页 1 2 3
建立连接后,我们可以通过DatagramConnection的newDatagram()方法构造一个Datagram,然后调用DatagramConnection的send()方法。这样数据报将会发送到指定的接受方。例如你可以构建这个一个负责发送数据的Sender类。 package com.siemens.datagramtest; import javax.microedition.io.Datagram; public class Sender extends Thread private DatagramConnection dc; private String address; private String message; public Sender(DatagramConnection dc) public synchronized void send(String addr, String msg) public synchronized void run() while (true) // If no client to deal, wait until one connects try // Completed client handling, return handler to pool and } 注意联网的时候我们应该在另外一个线程中而不是在主线程中。
在GCF中提供了DatagramConnection和Datagram两个接口,借助他们我们可以在J2ME中基于UDP协议开发联网应用程序。在MIDP2.0中,添加了UDPDatagramConnection这个接口,他扩展了DatagramConnection并添加了两个方法getLocalAddress()和getLocalPort()。
我们知道UDP服务是不可靠的,如果你希望开发更可靠的联网应用的话可以采用SocketConnection,因为TCP服务是面向连接且可靠的。我们还必须清楚地一点是以上所说的各种连接方式都不是MIDP规范中规定必须实现的。因此在使用之前请参考特定设备的开发文档。MIDP中只有Http连接是必须支持的。
同样,我们要获得DatagramConnection的话,必须通过Connector的open方法,其中的URL应该满足如下的形式。
clearcase/" target="_blank" >cc66 width="90%" align=center bgColor=#e6e4dd border=1>
import javax.microedition.io.DatagramConnection;
{
{
this.dc = dc;
start();
}
{
address = addr;
message = msg;
notify();
}
{
{
if (message == null)
{
try
{
wait();
} catch (InterruptedException e)
{
}
}
{
byte[] bytes = message.getBytes();
Datagram dg = null;
// Are we a sender thread for the client ? If so then there's
// no address parameter
if (address == null)
{
dg = dc.newDatagram(bytes, bytes.length);
} else
{
dg = dc.newDatagram(bytes, bytes.length, address);
System.out.println(address);
}
dc.send(dg);
} catch (Exception ioe)
{
ioe.printStackTrace();
}
// mark for wait
message = null;
}
}