package udps; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; public class UDPServer { public static void main(String[] args) { UDPServer server = new UDPServer(); server.init(); } public void init() { Thread serverThread = new Thread(new Server()); serverThread.start(); } public class Server implements Runnable { public void run() { DatagramSocket socket = null; try { socket = new DatagramSocket(7777); } catch (SocketException ex) { Logger.getLogger(UDPServer.class.getName()).log(Level.SEVERE, null, ex); } ExecutorService pool = Executors.newFixedThreadPool(32); for (;;) { DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); try { socket.receive(packet); } catch (IOException ex) { Logger.getLogger(UDPServer.class.getName()).log(Level.SEVERE, null, ex); } pool.execute(new Responder(socket, packet)); } } } public class Responder implements Runnable { DatagramSocket socket = null; DatagramPacket packet = null; public Responder(DatagramSocket socket, DatagramPacket packet) { this.socket = socket; this.packet = packet; } public void run() { byte[] data = "PONG".getBytes(); DatagramPacket response = new DatagramPacket(data, data.length, packet.getAddress(), packet.getPort()); System.out.println(packet.getData().toString()); try { socket.send(response); } catch (IOException ex) { Logger.getLogger(UDPServer.class.getName()).log(Level.SEVERE, null, ex); } } } }