1,在有外网ip的机器上启动server。
package udp; import java.net.DatagramPacket; import java.net.InetSocketAddress; public class Server extends UDPAgent { public static void main(String[] args) throws Exception { new Server(2008).start(); } public Server(int port) { super(port); } public void onReceive(DatagramPacket rec) { try { println("=== Server OnReceive ==="); String s = rec.getSocketAddress().toString(); String msg = new String(rec.getData(), rec.getOffset(), rec.getLength()); //if receive client's first log on, return its NAT port. if (msg.trim().startsWith("register")) { DatagramPacket outPacket = new DatagramPacket(s.getBytes(), s.length(), rec.getSocketAddress()); // 发送数据 ds.send(outPacket); } } catch (Exception e) { e.printStackTrace(); } } public void doSend(String cmd) throws Exception { println("====server's doSend====="); println("CMD: " + cmd); String[] s = cmd.split(" ", 4); // println("===split cmd========="); // for(String item:s){ // println(item); // } // println("============"); int port = Integer.parseInt(s[2]); InetSocketAddress target = new InetSocketAddress(s[1], port); String msg = s[0]+" "+s[3]; doSend(target, msg.getBytes()); } }