-->

9/15/2019

A Group chat application in Java

In this post, a group chat application using MulticastSocket (Java Platform SE 7) class is discussed. A MulticastSocket is a (UDP) DatagramSocket, with additional capabilities for joining “groups” of other multicast hosts on the internet.


import java.net.*; import java.io.*; import java.util.*; public class GroupChat { private static final String TERMINATE = "Exit"; static String name; static volatile boolean finished = false; public static void main(String[] args) { if (args.length != 2) System.out.println("Two arguments required: <multicast-host> <port-number>"); else { try { InetAddress group = InetAddress.getByName(args[0]); int port = Integer.parseInt(args[1]); Scanner sc = new Scanner(System.in); System.out.print("Enter your name: "); name = sc.nextLine(); MulticastSocket socket = new MulticastSocket(port); // Since we are deploying socket.setTimeToLive(0); //this on localhost only (For a subnet set it as 1) socket.joinGroup(group); Thread t = new Thread(new ReadThread(socket,group,port)); // Spawn a thread for reading messages t.start(); // sent to the current group System.out.println("Start typing messages...\n"); while(true) { String message; message = sc.nextLine(); if(message.equalsIgnoreCase(GroupChat.TERMINATE)) { finished = true; socket.leaveGroup(group); socket.close(); break; } message = name + ": " + message; byte[] buffer = message.getBytes(); DatagramPacket datagram = new DatagramPacket(buffer,buffer.length,group,port); socket.send(datagram); } } catch(SocketException se) { System.out.println("Error creating socket"); se.printStackTrace(); } catch(IOException ie) { System.out.println("Error reading/writing from/to socket"); ie.printStackTrace(); } } } } class ReadThread implements Runnable { private MulticastSocket socket; private InetAddress group; private int port; private static final int MAX_LEN = 1000; ReadThread(MulticastSocket socket,InetAddress group,int port) { this.socket = socket; this.group = group; this.port = port; } @Override public void run() { while(!GroupChat.finished) { byte[] buffer = new byte[ReadThread.MAX_LEN]; DatagramPacket datagram = new DatagramPacket(buffer,buffer.length,group,port); String message; try { socket.receive(datagram); message = new String(buffer,0,datagram.getLength(),"UTF-8"); if(!message.startsWith(GroupChat.name)) System.out.println(message); } catch(IOException e) { System.out.println("Socket closed!"); } } } }

NEXT ARTICLE Next Post
PREVIOUS ARTICLE Previous Post
NEXT ARTICLE Next Post
PREVIOUS ARTICLE Previous Post