import java.net.*;
import java.io.*;

public class UdpServer {
  public static void main(String[] argv) {
    try {
      // $B;HMQ$9$k%]!<%HHV9f(B
      int port = Integer.parseInt(argv[0]);

      // $B;XDj$5$l$?%]!<%HHV9f$K%=%1%C%H$r:n$k(B
      DatagramSocket dgSock = new DatagramSocket(port);
      while (true) {
        // $B<u?.%Q%1%C%HMQ%G!<%?NN0h$N:n@.(B
        byte buff1[]= new byte[512];
        DatagramPacket pa1 = new DatagramPacket(buff1, buff1.length);
        dgSock.receive(pa1);  // $B%Q%1%C%H<u?.(B
        System.out.println("Received!");
        System.out.print(new String(pa1.getData()));
        System.out.println("addr: "+pa1.getAddress());
        System.out.println("port: "+pa1.getPort());

        // $BAw?.%Q%1%C%H$N:n@.(B
        DatagramPacket pa2 =
          new DatagramPacket(pa1.getData(), pa1.getLength(),
                             pa1.getAddress(), pa1.getPort());
        dgSock.send(pa2);
        System.out.println("Sent!");
      }
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }
  }
}
