// second dummy version of dglistener5 in Java // three classes in the same file import java.net.*; import java.io.*; import java.lang.*; // main class, just starts listener and ui public class Dglistener5 { public static void main(String[] args) throws IOException { int port = 54321; if (args.length > 0) { port = Integer.valueOf(args[0]); if (port < 1024) port = 54321; } Dglistener5Thread net = new Dglistener5Thread(port); net.start(); new Dglistener5UI(net).start(); } // main() } // class Dglistener5 // thread to listen for the socket class Dglistener5Thread extends Thread { protected DatagramSocket socket; protected String message; protected int port; public Dglistener5Thread(int p) { super(); port = p; } public void run() { try { socket = new DatagramSocket(port); byte[] rbuf = new byte[1000]; message = "Hello"; String knownhosts = new String(); System.out.println("Socket listening port " + port); while(true) { // receive DatagramPacket rpacket = new DatagramPacket(rbuf, rbuf.length); socket.receive(rpacket); System.out.println("Got message from " + rpacket.getAddress() + " port " + rpacket.getPort()); // getAddress() prefixes address with a /, strip it away String newhost = rpacket.getAddress().toString().substring(1) + ":" + rpacket.getPort(); if (knownhosts.indexOf(newhost) == -1) { System.out.println("New host"); knownhosts = knownhosts + " " + newhost; } else System.out.println("Old host"); // construc reply String response = message + " Known hosts are:" + knownhosts; byte[] sbuf = response.getBytes(); DatagramPacket spacket = new DatagramPacket(sbuf, sbuf.length, rpacket.getAddress(), rpacket.getPort()); socket.send(spacket); } // while } catch (SocketException e) { System.err.println("socket problem" + e); } catch (IOException e) { System.err.println("io problem" + e); } } // run() // change message public void setMessage(String msg) { message = msg; } } // class Dglistener5Thread // User interface class Dglistener5UI extends Thread { Dglistener5Thread net; public Dglistener5UI(Dglistener5Thread n) { super(); net = n; } public void run() { String line = new String(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("UI ready"); while(true) { try { line = in.readLine(); } catch (IOException e) { System.err.println("input" + e); } if (line.indexOf("quit") != -1) { // if you want to kill net thread cruely, uncomment: // net.stop(); // but stop() is a deprecated method return; } else net.setMessage(line); } } // run() } // class Dglistener5UI