import java.net.*; import java.util.*; public class OnLineTerm { private final int SENDER_SLEEP_TIME = 1000; private final int INTERFACE_HANDLER_SLEEP_TIME = 5000; private String name, comment, host; private HashSet set = new HashSet(); private int port = 2000; private String address = "234.235.236.237"; public static void main(String[] args) { new OnLineTerm(args[0], args[1]); } public OnLineTerm(String name, String comment) { this.name = name; this.comment = comment; new Receiver(); new Sender(); new InterfaceHandler(); } // #################### Sender #################### class Sender extends Thread { private MulticastSocket ms; public Sender() { try { ms = new MulticastSocket(); //ms.setInterface(InetAddress.getByName("localhost")); } catch(Exception e) {} start(); } public void run() { while(true) { try { sleep(SENDER_SLEEP_TIME); String message = "From: " + name + " Host: " + InetAddress.getLocalHost().toString() + " Comment: " + comment; byte[] data = message.getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName(address), port); ms.send(packet); //System.out.println("SENT MESSAGE: " + message); } catch(Exception e) {e.printStackTrace();} } } } // #################### Receiver #################### class Receiver extends Thread { private MulticastSocket ms; public Receiver() { try { ms = new MulticastSocket(port); ms.joinGroup(InetAddress.getByName(address)); System.out.println("GROUP: " + address + " JOINED AT PORT: " + port + "\n"); ms.setTimeToLive(20); } catch(Exception e) {} start(); } public void run() { while(true) { String message = null; try { byte[] data = new byte[8192]; DatagramPacket packet = new DatagramPacket(data, data.length); ms.receive(packet); message = new String(data, 0, packet.getLength()); set.add(message); //System.out.println("RECEIVED MESSAGE: " + message); } catch(Exception e) {} } } } // #################### InterfaceHandler #################### class InterfaceHandler extends Thread { public InterfaceHandler() { start(); } public void run() { while(true) { Iterator iter = set.iterator(); while(iter.hasNext()) { String message = (String)iter.next(); System.out.println(getItem("From:", message) + " --- " + getItem("Host:", message) + " --- " + getItem("Comment:", message)); } set.clear(); System.out.println(); try { sleep(INTERFACE_HANDLER_SLEEP_TIME); } catch(Exception e) {} } } private String getItem(String item, String message) { try { StringTokenizer st = new StringTokenizer(message); while(!st.nextToken().equals(item)) {} return st.nextToken(); } catch(Exception e) { return "COULD NOT PARSE MESSAGE"; } } } }