0% found this document useful (0 votes)
175 views

Chat Forum in Java

The document describes a Java program that implements a group chat application using multicast sockets. The program allows multiple clients to join a multicast group and chat with each other. It uses two threads - one for reading user input and the other for reading messages from other clients. Clients can join and leave the chat by specifying a multicast IP address and port. The output shows sample runs of the program with three clients chatting.

Uploaded by

Md Azib
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
175 views

Chat Forum in Java

The document describes a Java program that implements a group chat application using multicast sockets. The program allows multiple clients to join a multicast group and chat with each other. It uses two threads - one for reading user input and the other for reading messages from other clients. Clients can join and leave the chat by specifying a multicast IP address and port. The output shows sample runs of the program with three clients chatting.

Uploaded by

Md Azib
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

B. P.

PODDAR INSTITUTE OF
MANAGEMENT AND TECHNOLOGY
[Affiliated to Maulana Abul Kalam Azad University of Technology]

137, V.I.P. ROAD, PODDAR VIHAR, KOLKATA – 700052

Department of Computer Science & Engineering

A MICRO-PROJECT REPORT
ON
“Chat Forum for Multiple User​”
FOR
Computer Networks Lab (CS692)

Submitted by

Mohammed Azib 11500116082


Modhura Das 11500116083
Mitul Biswas 11500116084
Md Naseem 11500116085

Session – 2019 - 2020

1
Table of Contents

Topics Page No

1. Introduction 4

2. Source Code 5-7

3. Output 8-9

4. Discussion 10

2
Implement a chat forum where
more than one clients can chat with
each other

3
Introduction

A group chat application will be implemented in the project using MulticastSocket (Java
Platform SE 8) class is discussed. A MulticastSocket is a (UDP) DatagramSocket, with
additional capabilities for joining “groups” of other multicast hosts on the internet.

A multicast group is specified by a class D IP address, those in the range 224.0.0.1 to


239.255.255.255, inclusive, and by a standard UDP port number. One would join a multicast
group by first creating a MulticastSocket with the desired port, then invoking the
joinGroup(InetAddress groupAddr) method:

// join a Multicast group and send the group salutations


...
byte[] msg = {'H', 'e', 'l', 'l', 'o'};
InetAddress group = InetAddress.getByName("228.5.6.7");
MulticastSocket s = new MulticastSocket(6789);
s.joinGroup(group);
DatagramPacket hi = new DatagramPacket(msg, msg.length,
group, 6789);
s.send(hi);
// get their responses!
byte[] buf = new byte[1000];
DatagramPacket recv = new DatagramPacket(buf, buf.length);
s.receive(recv);
...
// OK, I'm done talking - leave the group...
s.leaveGroup(group);

When one sends a message to a multicast group, ​all​ subscribing recipients to that host and port
receive the message (within the time-to-live range of the packet, see below). The socket needn't
be a member of the multicast group to send messages to it.
When a socket subscribes to a multicast group/port, it receives datagrams sent by other hosts to
the group/port, as do all other members of the group and port. A socket relinquishes membership
in a group by the leaveGroup(InetAddress addr) method. ​Multiple MulticastSocket's​ may
subscribe to a multicast group and port concurrently, and they will all receive group datagrams.

4
Source Code

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");

5
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)
{

6
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!");
}
}
}
}

Additional Instruction

Save the file as GroupChat.java and compile it using javac and then run the program using two
command line arguments as specified. A multicast host is specified by a class D IP address and
by a standard UDP port number. Class D IP addresses are in the range 224.0.0.0 to
239.255.255.255, inclusive. The address 224.0.0.0 is reserved and should not be used.

7
Output

8
9
Discussion

We have used the multicast host IP address as 239.0.0.0 and the port number as 1234 (since the
port numbers 0 through 1023 are reserved). There are 3 members in the group: Ironman,
CaptainAmerica, and Groot. Start all three terminals first before sending the message, otherwise
messages which are sent before starting the terminal are lost (since there is no facility of buffer
incorporated to store the messages.) We need two threads in this application. One for accepting
the user input (using the java.util.Scanner class) and the other for reading the messages sent from
other clients. Hence I have separated the thread which does the reading work into
ReadThreadclass. For leaving the group, any of the user can type in Exit to terminate the session.

The above program is executed on a single machine. Socket programming is meant for
distributed programming. The same piece of code snippet when present on different machines
which have Java installed can satisfy that requirement. This is just the bare bones service logic.
The project would be even more fascinating if the front-end is developed. You can use Java’s
AWT (Abstract Window Toolkit) or its advanced counterpart, Java Swing to develop the front
end. Since this wouldn’t be part of Socket programming I’m leaving it untouched without getting
into the details.

Additional points:

● You can incorporate network security feature by performing encryption before


sending the message over the network.
● Primitive techniques such as Caesar cipher or advanced methods such as RSA can
be used to perform encryption-decryption. You can try using Java’s RMI (Remote
Method Invocation) to perform the same task.
● Here, you can leverage the abstraction offered by Java to maximum extent.
However, if your primary objective is efficiency, then Socket programming is the
best choice. Since it doesn’t require any run time support, it is a bit faster compared
to RMI.

10

You might also like