客户端和服务器端分别增设了聊天窗口和聊天记录 服务器端和客户端分别只有一个 服务器端代码: //ServerM.java package udp; import java.io.IOException; import javax.microedition.io.Connector; import javax.microedition.io.Datagram; import javax.microedition.io.UDPDatagramConnection; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; /** * @author boolean boolean@163.com: * @version 创建时间:2009-2-26 下午05:06:22 * @todo */ public class ServerM extends MIDlet { private Display display; public ServerM() { display = Display.getDisplay(this); display.setCurrent(new ServerForm("服务器端")); } protected void startApp() throws MIDletStateChangeException { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } } class ServerForm extends Form implements CommandListener, Runnable { /** 发言的内容 */ private TextField textField = null; /** 指定要发送的地址 */ private String address = null; /** 构造报文的大小 */ private final int MAX = 255; /** 连接*/ private UDPDatagramConnection udcServer = null; public ServerForm(String title) { super(title); textField = new TextField("输入聊天信息", null, 30, TextField.ANY); this.append(textField); this.addCommand(new Command("Send", Command.OK, 1)); this.setCommandListener(this); try {// 建立连接 指定端口9999 udcServer = (UDPDatagramConnection) Connector .open("datagram://:9999"); } catch (IOException e) { e.printStackTrace(); } // 启动线程 new Thread(this).start(); } public void commandAction(Command c, Displayable d) { try { // 获取要发送的字符数据 String s = textField.getString(); // 构建报文 Datagram dgSend = udcServer.newDatagram(s.getBytes(), s.getBytes().length, address); // 发送报文 udcServer.send(dgSend); } catch (IOException e) { e.printStackTrace(); } } public void run() { while (true) { try { // 防止数据溢出 构造一个比较大的报文 Datagram dgRecive = udcServer.newDatagram(MAX); // 接受报文 udcServer.receive(dgRecive); // 获取报文地址 address = dgRecive.getAddress(); // 报文中的全部数据 byte数组形式 byte[] data = dgRecive.getData(); // byte数组转为字符 同时去掉无用数据 String recive = new String(data, 0, dgRecive.getLength()); // 添加聊天记录到界面 this.append(recive + "/n"); } catch (IOException e) { e.printStackTrace(); } } } } 客户端代码: //ClientM.java package udp; import java.io.IOException; import javax.microedition.io.Connector; import javax.microedition.io.Datagram; import javax.microedition.io.UDPDatagramConnection; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; /** * @author boolean boolean@163.com: * @version 创建时间:2009-2-26 下午05:10:50 * @todo */ public class ClientM extends MIDlet { private Display display; public ClientM() { display = Display.getDisplay(this); } protected void startApp() throws MIDletStateChangeException { display.setCurrent(new ClientForm("客户端")); } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } } class ClientForm extends Form implements CommandListener, Runnable { /** 发言 */ private TextField tf; /** 构造报文的大小 */ private final int MAX = 255; /** 连接 */ private UDPDatagramConnection udcClient = null; public ClientForm(String title) { super(title); tf = new TextField("输入聊天信息:", null, 55, TextField.ANY); this.append(tf); this.addCommand(new Command("Send", Command.OK, 1)); this.setCommandListener(this); try { udcClient = (UDPDatagramConnection) Connector .open("datagram://127.0.0.1:9999"); } catch (IOException e) { e.printStackTrace(); } // 启动接收报文线程 new Thread(this).start(); } public void commandAction(Command c, Displayable d) { try { // 获取要发送的字符数据 String s = tf.getString(); // 构建报文 Datagram dgSend = udcClient.newDatagram(s.getBytes(), s.getBytes().length); // 发送报文 udcClient.send(dgSend); } catch (IOException e) { e.printStackTrace(); } } public void run() { while (true) { try { // 防止数据溢出 构造一个比较大的报文 Datagram dgRecive = udcClient.newDatagram(MAX); // 接受报文 udcClient.receive(dgRecive); // 报文中的全部数据 byte数组形式 byte[] data = dgRecive.getData(); // byte数组转为字符 同时去掉无用数据 String recive = new String(data, 0, dgRecive.getLength()); // 添加聊天记录到界面 this.append(recive ); } catch (IOException e) { e.printStackTrace(); } } } } 接下来要加入多个客户端