public static void main(String[] args) throws Exception {
        InetAddress aslf = null;
        InetAddress aoth = null;
        int pslf = 0;
        int poth = 0;
        try {
            aslf = InetAddress.getByName(args[0]);
            pslf = Integer.parseInt(args[1]);
            aoth = InetAddress.getByName(args[2]);
            poth = Integer.parseInt(args[3]);
        } catch (Exception e) { System.out.println("Usage: UDPTest myIP myPort toIP toPort"); System.exit(0);}

        String s = "METADATA";
        StoreInterface<String> stif = new Store<String>(s.getBytes());
        java.util.Random r = new Random(System.currentTimeMillis()); 
        for (long i = 0; i < 500; i++) {
            long j = Reconciler.randomKey(r);
            String sj = Long.toString(j);
            stif.addIfNew(Reconciler.hash(sj.getBytes()), sj);
        }
        MoverInterface<String> mvif = new MoverProtocol<String>(stif);

        SyncPeer slf = new SyncPeer(aslf, pslf); 
        SyncPeer oth = new SyncPeer(aoth, poth);
        SyncInterface<String> spif = new SyncProtocol<String>(slf, oth, stif, mvif);
        DatagramTransport<String> ut = new DatagramTransport<String>(slf, spif, mvif);
        System.out.println("started UDPTest");
        
        try {Thread.sleep(600000);} catch (InterruptedException e) {}
        System.out.println("Store has: " + stif.cardinality());
        ut.stop();
        
        System.out.println("stopped UDPTest");
    }