|  Home   |  About Us   |  Online Exam   |  Tech World   |  Jobs    | Member Login

 

Group-Aided Reliable Multicasting Transport Protocol (JAVA: RMI, SWING)

 

We present the design and implementation of Group-Aided Multicast (GAM), a scalable many-to-many reliable multicast transport protocol. GAM achieves high quality ACK trees while keeping the tree maintenance overhead reasonably low.

Designing The GUI:-
In this module , we provide an interactive screen for each and every node in order to select the file which is to be transferred.
We are using Java Swing for designing the user interface.
In this interface we use various components like Frame,Panel,TextField,TextArea,Buttons,Labels and Checkboxes.

Group Formation :-
Each node have the capability to function as a Group head but the node with the Re-routing and Packet Monitoring capability will be selected as a Group head.
The Re-routing capability of the group head involves forwarding of files from one group to another.
The file transfer between the child nodes occur through the group heads.


gp1server.java                                                                     gp1client1.java    Next

import java.io.*;
import java.awt.*;
import java.rmi.*;
import java.rmi.server.*;
import java.net.*;
import java.util.*;

class gp1serwin extends javax.swing.JFrame {

String filesel,s1,s2,mst;
String[] pmes;
String[] str1=new String[10];
Random r;
File f;

public gp1serwin() {
initComponents();
}


private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();

jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jTextArea1 = new javax.swing.JTextArea();
jTextArea2 = new javax.swing.JTextArea();
jTextArea3 = new javax.swing.JTextArea();
jTextArea4 = new javax.swing.JTextArea();
jTextArea5 = new javax.swing.JTextArea();
jTextArea6 = new javax.swing.JTextArea();
jCheckBox1 = new javax.swing.JCheckBox();
jCheckBox2 = new javax.swing.JCheckBox();
sp1 = new javax.swing.JScrollPane();
sp2 = new javax.swing.JScrollPane();
sp3 = new javax.swing.JScrollPane();
sp4 = new javax.swing.JScrollPane();
sp5 = new javax.swing.JScrollPane();
sp6 = new javax.swing.JScrollPane();

getContentPane().setLayout(null);
jPanel1.setLayout(null);
jPanel2.setLayout(null);
jPanel3.setLayout(null);
jPanel4.setLayout(null);
jPanel5.setLayout(null);

jPanel1.setBackground(new java.awt.Color(204, 204, 255));
jPanel2.setBackground(new java.awt.Color(204, 204, 255));
jPanel3.setBackground(new java.awt.Color(204, 204, 255));
jPanel4.setBackground(new java.awt.Color(204, 204, 255));
jPanel5.setBackground(new java.awt.Color(204, 204, 255));

jCheckBox1.setBackground(new java.awt.Color(204, 204, 255));
jCheckBox2.setBackground(new java.awt.Color(204, 204, 255));

jPanel1.setBorder(new javax.swing.border.EtchedBorder());
jPanel2.setBorder(new javax.swing.border.EtchedBorder());
jPanel3.setBorder(new javax.swing.border.EtchedBorder());
jPanel4.setBorder(new javax.swing.border.EtchedBorder());
jPanel5.setBorder(new javax.swing.border.EtchedBorder());

jPanel1.setFont(new java.awt.Font("MS Sans Serif", 1, 18));

jLabel1.setFont(new java.awt.Font("MS Sans Serif", 3, 36));
jLabel2.setFont(new java.awt.Font("MS Sans Serif", 3, 24));
jLabel3.setFont(new java.awt.Font("MS Sans Serif", 3, 18));
jLabel4.setFont(new java.awt.Font("MS Sans Serif", 1, 18));
jLabel5.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jLabel6.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jLabel7.setFont(new java.awt.Font("MS Sans Serif", 1, 20));
jLabel8.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jLabel9.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jLabel10.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jLabel11.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jLabel12.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jLabel13.setFont(new java.awt.Font("MS Sans Serif", 1, 14));

jButton1.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jButton2.setFont(new java.awt.Font("MS Sans Serif", 1, 14));
jButton3.setFont(new java.awt.Font("MS Sans Serif", 1, 14));

jCheckBox1.setFont(new java.awt.Font("MS Sans Serif", 1, 18));
jCheckBox2.setFont(new java.awt.Font("MS Sans Serif", 1, 18));

jLabel1.setText("Group-Aided Reliable Multicasting");
jLabel2.setText("Group1");
jLabel3.setText("Receive the Source");
jLabel4.setText("Select Other Group");
jLabel5.setText("Destinations");
jLabel6.setText("Node1");
jLabel7.setText("Flow of Packets");
jLabel8.setText("Node2");
//jLabel9.setText("With Ack");
jLabel10.setText("Group2");
//jLabel11.setText("With Ack");
jLabel12.setText("Group3");
//jLabel13.setText("With Ack");

jButton1.setText("Select Source");
jButton2.setText("Receive");
jButton3.setText("Send");

jCheckBox1.setText("Group3");
jCheckBox2.setText("Group2");

jPanel1.setBounds(-20, 0, 820, 600);
jPanel2.setBounds(470, 120, 340, 140);
jPanel3.setBounds(30, 200, 410, 50);
jPanel4.setBounds(20, 120, 440, 140);
jPanel5.setBounds(20, 300, 790, 260);

jLabel1.setBounds(170, 20, 630, 40);
jLabel2.setBounds(400, 70, 90, 30);
jLabel3.setBounds(100, 10, 170, 30);
jLabel4.setBounds(10, 10, 180, 30);
jLabel5.setBounds(50, 310, 140, 20);
jLabel6.setBounds(200, 310, 150, 20);
jLabel7.setBounds(400, 280, 200, 19);
jLabel8.setBounds(350, 310, 150, 20);
jLabel9.setBounds(330, 330, 100, 19);
jLabel10.setBounds(500, 310, 210, 19);
jLabel11.setBounds(500, 330, 90, 19);
jLabel12.setBounds(680, 310, 170, 19);
jLabel13.setBounds(680, 330, 70, 19);

jCheckBox1.setBounds(300, 10, 90, 30);
jCheckBox2.setBounds(190, 10, 90, 30);

jButton1.setBounds(225, 150, 140, 30);
jButton2.setBounds(230, 70, 100, 30);
jButton3.setBounds(370, 150, 70, 30);

jTextField1.setBounds(30, 150, 190, 30);
jTextField2.setBounds(20, 70, 200, 30);

sp1.setBounds(50, 350, 110, 190);
sp2.setBounds(200, 350, 110, 190);
sp3.setBounds(350, 350, 110, 190);
sp5.setBounds(500, 350, 110, 190);
sp6.setBounds(650, 350, 110, 190);

addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});

jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});

jCheckBox2.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
jCheckBox2StateChanged(evt);
}
});

sp1.getViewport().add(jTextArea1, null);
sp2.getViewport().add(jTextArea2, null);
sp3.getViewport().add(jTextArea3, null);
sp5.getViewport().add(jTextArea5, null);
sp6.getViewport().add(jTextArea6, null);

jTextArea1.setEditable(false);
jTextArea2.setEditable(false);
jTextArea3.setEditable(false);
jTextArea5.setEditable(false);
jTextArea6.setEditable(false);

jPanel1.add(jLabel1);
jPanel1.add(jLabel2);
jPanel1.add(jLabel5);
jPanel1.add(jLabel6);
jPanel1.add(jLabel7);
jPanel1.add(jLabel8);
jPanel1.add(jLabel9);
jPanel1.add(jLabel10);
jPanel1.add(jLabel11);
jPanel1.add(jLabel12);
jPanel1.add(jLabel13);
jPanel1.add(jButton1);
jPanel1.add(jButton3);
jPanel1.add(jTextField1);

jPanel1.add(jPanel2);
jPanel1.add(jPanel3);
jPanel1.add(jPanel4);
// jPanel1.add(jPanel5);

jPanel2.add(jButton2);
jPanel2.add(jLabel3);
jPanel2.add(jTextField2);

jPanel3.add(jLabel4);
jPanel3.add(jCheckBox1);
jPanel3.add(jCheckBox2);


jPanel1.add(sp1,null);
jPanel1.add(sp2,null);
jPanel1.add(sp3,null);
jPanel1.add(sp5,null);
jPanel1.add(sp6,null);


getContentPane().add(jPanel1);
pack();
}

private void jCheckBox2StateChanged(javax.swing.event.ChangeEvent evt) {
// TODO add your handling code here:
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{

FileDialog fd1=new FileDialog(this,"OPEN",FileDialog.LOAD);
fd1.setVisible(true);
filesel=fd1.getDirectory()+fd1.getFile();
jTextField1.setText(filesel);

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
{


String file,dir,path,ms;

int mp;
byte b1[];
FileDialog fd2=new FileDialog(this,"SAVE",FileDialog.SAVE);
fd2.setVisible(true);
file=fd2.getFile();
dir=fd2.getDirectory();
path=dir+file;
jTextField2.setText(path);

try
{
FileOutputStream fos=new FileOutputStream(path);


for(int k=0;k<=7;k++)
{

b1=str1[k].getBytes();
fos.write(b1);

}
}catch(Exception e){}

}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
{


f=new File(filesel);
String st;
try
{
int sz;
byte[] buffer;

pmes=new String[10];
r =new Random();
FileInputStream fin=new FileInputStream(filesel);

sz=fin.available()/7;
buffer=new byte[sz];

int m=r.nextInt(7);

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

fin.read(buffer);
st=new String(buffer);
pmes[i]=st;

//System.out.println(pmes[i]);

if(i==m)
{
mst=pmes[i];
pmes[i]=null;

}


}

jTextArea1.append("localhost/Node1");
jTextArea1.append("\n");
jTextArea1.append("localhost/Node2");
jTextArea1.append("\n");

new cc1(pmes);


new cc2(pmes);

if(jCheckBox2.isSelected()==true)
{

jTextArea1.append("localhost/group2");
new grp2(pmes);
}

if(jCheckBox1.isSelected()==true)
{

jTextArea1.append("localhost/group3");
new grp3(pmes);

}

}catch(Exception e){}

}

private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JCheckBox jCheckBox2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
public javax.swing.JTextArea jTextArea1;
public javax.swing.JTextArea jTextArea2;
public javax.swing.JTextArea jTextArea3;
public javax.swing.JTextArea jTextArea4;
public javax.swing.JTextArea jTextArea5;
public javax.swing.JTextArea jTextArea6;
public javax.swing.JTextField jTextField1;
public javax.swing.JTextField jTextField2;
private javax.swing.JScrollPane sp1;
private javax.swing.JScrollPane sp2;
private javax.swing.JScrollPane sp3;
private javax.swing.JScrollPane sp4;
private javax.swing.JScrollPane sp5;
private javax.swing.JScrollPane sp6;

// End of variables declaration

}

public class gp1server extends UnicastRemoteObject implements grpinter
{

String[] str=new String[10];

grpinter gi4;
static gp1serwin gp1s;

public gp1server() throws RemoteException
{
}

public void getfile(String[] s,String sname)
{

try
{

String ms,gs4;
int j=0;


if(sname.equals("gp1client1"))
{
gs4="rmi://localhost/gp1client1";
gi4=(grpinter)Naming.lookup(gs4);
}

if(sname.equals("gp1client2"))
{
gs4="rmi://localhost/gp1client2";
gi4=(grpinter)Naming.lookup(gs4);
}


if(sname.equals("gp2server"))
{

gs4="rmi://localhost/gp2server";
gi4=(grpinter)Naming.lookup(gs4);
}

if(sname.equals("gp3server"))
{
gs4="rmi://localhost/gp3server";
gi4=(grpinter)Naming.lookup(gs4);
}

for(int i=0;i<=7;i++)
{
if(s[i] !=null)
{

gi4.pack(i,"gp1server");

try
{
Thread.sleep(500);
}catch(Exception e){}

}
else
{

j=i;
gi4.nack(i,"gp1server");

}


}


s[j]=gi4.mpackno(j);
gi4.pack(j,"gp1server");
gp1s.str1=s;


}catch(Exception e){}


}

public String mpackno(int m) throws RemoteException
{

//System.out.println("Value of m is"+ m);

//System.out.println("Missed String is"+gp1s.mst);
return gp1s.mst;
}

public void pack(int i,String name) throws RemoteException
{

if(name.equals("gp1client1"))
{
gp1s. jTextArea2.append("Packet["+i+"]:PACK");
gp1s. jTextArea2.append("\n");
}

if(name.equals("gp1client2"))
{
gp1s. jTextArea3.append("Packet["+i+"]:PACK");
gp1s. jTextArea3.append("\n");
}

if(name.equals("gp2server"))
{
//System.out.println("Call from server2");
gp1s. jTextArea5.append("Packet["+i+"]:PACK");
gp1s. jTextArea5.append("\n");
}

if(name.equals("gp3server"))
{
gp1s. jTextArea6.append("Packet["+i+"]:PACK");
gp1s. jTextArea6.append("\n");
}

/*try
{
Thread.sleep(500);
}catch(Exception e){}*/
}

public void nack(int i,String name1) throws RemoteException
{
if(name1.equals("gp1client1"))
{
gp1s. jTextArea2.append("Packet["+i+"]:NACK");
gp1s. jTextArea2.append("\n");
}

if(name1.equals("gpclient2"))
{

gp1s. jTextArea3.append("Packet["+i+"]:NACK");
gp1s. jTextArea3.append("\n");
}

if(name1.equals("gp2server"))
{
gp1s. jTextArea4.append("Packet["+i+"]:NACK");
gp1s. jTextArea4.append("\n");
}

if(name1.equals("gp3server"))
{
gp1s. jTextArea6.append("Packet["+i+"]:NACK");
gp1s. jTextArea6.append("\n");
}

}


public static void main(String args[])
{
try
{
gp1server s1=new gp1server();
Naming.rebind("gp1server",s1);

}catch(Exception e){}

gp1s=new gp1serwin();

gp1s.setSize(800,600);
gp1s.setResizable(false);
gp1s.setTitle("Group-Aided Reliable Multicasting");
//gp1s.r1ta.append("good");
gp1s.show();
}


}

class cc1 extends Thread
{
String[] pmes=new String[10];
String s1;
Thread t;

cc1(String[] ps)
{
//System.out.println("Client2");
this.pmes=ps;
t=new Thread(this,"cc1");
t.start();

}

public void run()
{
//System.out.println("Run method is clalled");
s1="rmi://localhost/gp1client1";

try
{
//System.out.println("With in run method");

grpinter gc1=(grpinter)Naming.lookup(s1);
gc1.getfile(pmes,"gp1server");

//System.out.println("Get file for client1 is called");
t.sleep(2500);
}catch(Exception e){}
}

}

class cc2 extends Thread
{
String[] pmes=new String[10];
String s2;
Thread t1;

cc2(String[] ps)
{
//System.out.println("Client1");

this.pmes=ps;
t1=new Thread(this,"cc2");
t1.start();
}

public void run()
{

s2="rmi://localhost/gp1client2";

try
{
grpinter gc2=(grpinter)Naming.lookup(s2);
gc2.getfile(pmes,"gp1server");
//System.out.println("Get file called for client2");
t1.sleep(3500);
}catch(Exception e){}

}

}

class grp2 extends Thread
{
String[] pmes=new String[10];
String s2;
Thread t1;

grp2(String[] ps)
{
//System.out.println("coming to group2");

this.pmes=ps;
t1=new Thread(this,"grp2");
t1.start();
}

public void run()
{

s2="rmi://localhost/gp2server";

try
{
grpinter gc2=(grpinter)Naming.lookup(s2);
gc2.getfile(pmes,"gp1server");
//System.out.println("Get file called for gp1server");
t1.sleep(3500);
}catch(Exception e){}

}

}

class grp3 extends Thread
{
String[] pmes=new String[10];
String s2;
Thread t1;

grp3(String[] ps)
{
//System.out.println("Client1");

this.pmes=ps;
t1=new Thread(this,"grp3");
t1.start();
}

public void run()
{

s2="rmi://localhost/gp3server";

try
{
grpinter gc2=(grpinter)Naming.lookup(s2);
gc2.getfile(pmes,"gp1server");
//System.out.println("Get file called for client2");
t1.sleep(3500);
}catch(Exception e){}

}

}


Output:-

               Our Portals  :   www.righttimeproperty.com   |   www.sundaychennai.com   |   www.dorabuji.com