import java.io.*;
import java.net.*;
import java.util.*;

public class t_DatagramPacket {
	public static void main( String args[]){
		byte[] buff = new byte[1000];
		short localPort = 4444;
		try {

// Socket address

			InetSocketAddress addr = new InetSocketAddress("localhost", localPort);
			System.out.println("\nInetSocketAddress");
			System.out.println("toString: "+addr.toString());
			System.out.println("Address:  "+addr.getAddress());
			System.out.println("Hostname: "+addr.getHostName());
			System.out.println("Port:     "+addr.getPort());
			System.out.println("HashCode: "+addr.hashCode());

// Sending packets
			
			DatagramPacket snd = new DatagramPacket("Ahoj".getBytes(), "Ahoj".length(), addr);
			System.out.println("\nSending packet");
			System.out.println("SocketAddr:"+snd.getSocketAddress().toString());
			System.out.println("Address:  "+snd.getAddress());
			System.out.println("Port:     "+snd.getPort());
			System.out.println("Data:     " + new String(snd.getData()));
			System.out.println("Length:   "+snd.getLength());
			System.out.println("Offset:   "+snd.getOffset());

//Receiving packets

			DatagramPacket rcv = new DatagramPacket(buff, buff.length);
			
			DatagramSocket s = new DatagramSocket();
			DatagramSocket r = new DatagramSocket( localPort );
			
			try {
				s.send(snd);
			    r.receive(rcv);
			}
			catch (IOException e) {
				e.printStackTrace();
			}  
			System.out.println("\nReceiving packet");			
			System.out.println("SocketAddr:"+rcv.getSocketAddress().toString());
			System.out.println("Address:  "+rcv.getAddress());
			System.out.println("Port:     "+rcv.getPort());
			System.out.println("Data:     " + new String(rcv.getData(),0,rcv.getLength()));
			System.out.println("Length:   "+rcv.getLength());
			System.out.println("Offset:   "+rcv.getOffset());
			
		}
		catch (IllegalArgumentException e){
			e.printStackTrace();	
		}
		catch (SocketException e){
			e.printStackTrace();
		}
	}
}