Programmieren I / Schmiedecke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 VL-Material Seite 1 von 1 IP-Multicast-Chat mit Java (Quelle Marko Boger, Java in verteilten Systemen, dpunkt 1999) import java.net.*; import java.io.*; public class MulticastChatClient { ChatFrame gui; String name; InetAddress group; MulticastSocket socket; int port = 6789; public MulticastChatClient(String name) { this.name = name; // GUI erzeugen und Events behandeln: // Nach Texteingaben wird sendTextToChat(), // bei Schließen des Fensters wird disconnect()gerufen. gui = new ChatFrame("Chat mit mit IP-Multicast"); gui.input.addKeyListener (new EnterListener(this,gui)); gui.addWindowListener(new ExitListener(this)); try { socket = new MulticastSocket(port); // Anmelden bei einer Multicast-Gruppe group = InetAddress.getByName("226.1.3.5"); socket.joinGroup(group); gui.output.append("Connected...\n"); // Auf Nachrichten warten und empfangen while (true) { byte[] buffer = new byte[1000]; DatagramPacket datagram = new DatagramPacket (buffer,buffer.length); socket.receive(datagram); String message = new String(datagram.getData()); gui.output.append(message); } } catch (IOException e) { e.printStackTrace(); } } public void sendTextToChat(String message) { message = name+": "+message+"\n"; Programmieren I / Schmiedecke 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 VL-Material Seite 2 von 2 byte[] buf = (message).getBytes(); DatagramPacket dg = new DatagramPacket (buf, buf.length,group,port); try { socket.send(dg); } catch (IOException ex) { ex.printStackTrace(); } } public void disconnect() {} public static void main(String args[]) { if (args.length!=1) throw new RuntimeException ("Syntax: java ChatClient <name>"); ChatClient client = new ChatClient(args[0]); } } /* Die Klassen ChatFrame, EnterListener und ExitListener werden unverändert aus dem * (Unicast) Chat übernommen. */