Multicasting in UDP

Multicasting using DatagramSocket by MultiThreading

//QuoteServerThread.java notepad
import java.io.*;

import java.net.*;

import java.util.*;


public class QuoteServerThread extends Thread {


protected DatagramSocket socket = null;

protected BufferedReader in = null;

 protected boolean moreQuotes = true;


public QuoteServerThread() throws IOException {

this(“QuoteServerThread”);

}


public QuoteServerThread(String name) throws IOException {

super(name);

socket = new DatagramSocket(4445);


try {

in = new BufferedReader(new FileReader(“us.java”));

} catch (FileNotFoundException e) {

            System.err.println(“Could not open quote file. Serving time instead.”);

 }
    }


 public void run() {


while (moreQuotes) {

try {
                byte[] buf = new byte[256];

                    // receive request
                DatagramPacket packet = new DatagramPacket(buf, buf.length);

socket.receive(packet);

                    // figure out response

String dString = null;

if (in == null)

dString = new Date().toString();

else

dString = getNextQuote();

buf = dString.getBytes();


// send the response to the client at “address” and “port”

InetAddress address = packet.getAddress();

int port = packet.getPort();

packet = new DatagramPacket(buf, buf.length, address, port);

socket.send(packet);

} catch (IOException e) {

e.printStackTrace();

moreQuotes = false;
            }
        }

 socket.close();
    }


protected String getNextQuote() {

String returnValue = null;

try {

if ((returnValue = in.readLine()) == null) {

in.close();
        moreQuotes = false;

returnValue = “No more quotes. Goodbye.”;

}
        }
catch (IOException e) {


returnValue = “IOException occurred in server.”;

}

return returnValue;

}
}

2)
//MulticastServerThread.java notepad


import java.io.*;

import java.net.*;

import java.util.*;


public class MulticastServerThread extends QuoteServerThread {


  private long FIVE_SECONDS = 5000;


public MulticastServerThread() throws IOException
 {
        super(“MulticastServerThread”);

  }


public void run() {

   while (moreQuotes) {

    try {

 byte[] buf = new byte[256];


  // construct quote

 String dString = null;

  if (in == null)

 dString = new Date().toString();

   else

 dString = getNextQuote();

     buf = dString.getBytes();


   // send it

 InetAddress group = InetAddress.getByName(“230.0.0.1”);

 DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 4446);

             socket.send(packet);


  // sleep for a while

try {
            sleep((long)(Math.random() * FIVE_SECONDS));

    } catch (InterruptedException e) { }

          } catch (IOException e)
{
                e.printStackTrace();

moreQuotes = false;
            }

       }

socket.close();

}
}

3)
//MulticastServer.java notepad


public class MulticastServer
{
    public static void main(String[] args) throws java.io.IOException
 {

 new MulticastServerThread().start();

 }
}

//MulticastClient.java notepad



import java.io.*;
import java.net.*;

import java.util.*;


public class MulticastClient {


 public static void main(String[] args) throws IOException {


 MulticastSocket socket = new MulticastSocket(4446);

 InetAddress address = InetAddress.getByName(“230.0.0.1”);

socket.joinGroup(address);


 DatagramPacket packet;


 // get a few quotes

for (int i = 0; i < 5; i++) {


        byte[] buf = new byte[256];

           packet = new DatagramPacket(buf, buf.length);

          socket.receive(packet);


 String received = new String(packet.getData(), 0, packet.getLength());

           System.out.println(“Quote of the Moment: ” + received);

    }


socket.leaveGroup(address);

socket.close();

 }

}

/* 1 cmd promp->javac QuoteServerThread.java
                        >javac MulticastServer.java
                        >java MulticastServer
==>make sure change file name present in code of QuoteServerThread, thats present in ur pc
2cmd promp->javac MulticastClient.java
                    >java MulticastClient
*/