import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPServer {

	//netcat client: nc -u localhost 12345
	
	public final static int PORT = 12345;
	public final static int BUFFER_SIZE = 1024;

	public static void main(String[] args) {
		try (
				DatagramSocket serverSocket = new DatagramSocket(PORT);
				)
		{
			while(true) {
				byte[] rcvData = new byte[BUFFER_SIZE];

				//create packet
				DatagramPacket rcvPacket = new DatagramPacket(rcvData, 
						rcvData.length);

				//wait for packet
				serverSocket.receive(rcvPacket);

				//received a packet
				InetAddress addr = rcvPacket.getAddress();
				int port = rcvPacket.getPort();

				//array contains the message
				String msg = new String(rcvPacket.getData());

				System.out.printf("Packet received from: %s, %d, %s.\n",
						addr, port, msg);


				String reply = msg.toUpperCase();

				byte[] sendData = reply.getBytes();

				DatagramPacket sendPacket = new DatagramPacket(
						sendData, sendData.length, addr, port);


				//send the packet
				serverSocket.send(sendPacket);
			} //end while
		}
		catch (Exception e) {
			System.err.println(e.getMessage());
		}

	}

}
