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);
}
}
}
}