Wednesday, 27 November 2013

Socket Programming-Hamming code

/*Package declaration*/
package Hamming_Code;

/*Importing packets*/
import javax.swing.*;


public class Hamming_Code
{
    public static void main(String args[])
    {
        Object[] options = {"Transmitting End", "Receiving End"};
        int selection = JOptionPane.showOptionDialog(null,"Select the Terminal",null, JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE, null,options, options[0]);
        if (selection==JOptionPane.YES_NO_OPTION)
        {
            TransmittingEnd();
        }
        else
        {
            ReceivingEnd();
        }
    }
   
    static void TransmittingEnd()//For tranmitting end operations
    {
        Transmitting_End T=new Transmitting_End();
        T.main();
    }
    static void ReceivingEnd()//For receiving end operations
    {
        Receiving_End R=new Receiving_End();
        R.main();
    }
}

class Transmitting_End
{
   
    /*Declaration of variables*/
    StringBuffer Take_Input=new StringBuffer("ENTER THE DATAWORD");//Statement to display
    StringBuffer Message=new StringBuffer();//Message bits taken from user
    StringBuffer Appended_Word=new StringBuffer();
    StringBuffer Transmitted_Word=new StringBuffer();//Hamming code
    int parity[];//Parity bits
    int m,p,n,x=0;//m,p and denotes numbers of message bits,parity bits and total number of bits respectively.x is temperory variable
    boolean valid;//Checking validity of input
   
   
    void input()    /*Taking input*/
    {
        do
        {
            Message.append(JOptionPane.showInputDialog(Take_Input));
            m=Message.length();
            for(int i=0;i<m;i++)
            {
                if(Message.charAt(i)!='1'&&Message.charAt(i)!='0')
                {
                    valid=false;
                    break;
                }
                valid=true;
            }
           
            if(!valid)
            {
                Message.delete(0, m);
                Take_Input.delete(0,Take_Input.length());
                Take_Input.append("INVALID DATAWORD \nPLEASE ENTER A VALID DATAWORD ");
            }
        }
        while(!valid);  
    }
    void calculate()/*Calculating positions of databits in hamming code leaving pariry positions*/
    {
        for(int i=0;x<m;i++)
        {
            if(Math.pow(2,p)==(i+1))  
            {
                p++;
                Transmitted_Word.append('_');
            }
           
            else
            {
                Transmitted_Word.append(Message.charAt(x));
                x++;
            }
        }
        n=p+m;
        Appended_Word.append(Transmitted_Word);
    }
    void appendParity()/*Appending parity bits to the databits*/
    {
        parity=new int[p];
        x=0;
        for(int i=0;i<p;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(convert(j).length()>i)
                {
                    if(convert(j).charAt(convert(j).length()-i-1)=='1')
                    {
                        if(Transmitted_Word.charAt(j-1)=='1')
                        {
                            parity[i]++;
                        }
                    }
                }
            }
        }
        for(int i=0;i<p;i++)
        {
            parity[i]=parity[i]%2;
        }
        for(int i=0;i<n;i++)
        {
            if(Transmitted_Word.charAt(i)=='_')
            {
                Transmitted_Word.replace(i, i+1,parity[x]+"");
                x++;
            }
        }
    }
    StringBuffer convert(int a)/*Function used to convert decimal to binary*/
    {
        StringBuffer s=new StringBuffer();
        do
        {
            s.append(a%2);
            a=a/2;
        }
        while(a!=0);
        s.reverse();
        return s;
    }
    void output()/*Displaying output*/
    {
        JOptionPane.showMessageDialog(null, "DATAWORD                                           :  "+Message+"\n"+"DATAWORD IN HAMMING FORMAT  :  "+Appended_Word+"\n"+"HAMMING CODE                                    :  "+Transmitted_Word);
    }
    void main()/* Calling all functions in sequence*/
    {
        input();
        calculate();
        appendParity();
        output();
    }
   
}

class Receiving_End
{
    /*Declaration of variables*/
    StringBuffer Take_Input=new StringBuffer("ENTER THE RECIEVED CODEWORD");//Statement to display
    StringBuffer Message=new StringBuffer();//Isolated message bits
    StringBuffer Recieved_Word=new StringBuffer();//Bits recieved from user
    StringBuffer Corrected_Word=new StringBuffer();//Corrected hamming code
    int parity[];//Parity bits
    int m=0,p=0,n,x,error=0;//m,p and denotes numbers of message bits,parity bits and total number of bits respectively.x is temperory variable
    boolean valid;//Chacking validity of input
   
   void input()/*Taking input*/
   {
       do
        {
           valid=true;
           Recieved_Word.append(JOptionPane.showInputDialog(Take_Input));
            n=Recieved_Word.length();
            for(int i=0;i<n;i++)
            {
                if(Recieved_Word.charAt(i)!='1'&&Recieved_Word.charAt(i)!='0')
                {
                    valid=false;
                    break;
                }
                valid=true;
            }
           
            if(!valid)
            {
                Recieved_Word.delete(0, n);
                Take_Input.delete(0,Take_Input.length());
                Take_Input.append("INVALID CODEWORD \nPLEASE ENTER A VALID CODE WORD ");
            }
        }
        while(!valid);
     
   }
   void calculate()/*Calculating number of parity bits and data bits*/
   {
       for(int i=0;i<n;i++)
        {
         if(Math.pow(2,p)==(i+1))  
         {
             p++;
         }
         else
         {
             Message.append(Recieved_Word.charAt(i));
             m++;
         }
        }
   }
   int check()/*Checking for errors*/
   {
       parity=new int[p];
        for(int i=0;i<p;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(convert(j).length()>i)
                {
                    if(convert(j).charAt(convert(j).length()-i-1)=='1')
                    {
                        if(Recieved_Word.charAt(j-1)=='1')
                        {
                            parity[i]++;
                           
                        }
                    }
                }
            }
        }
        for(int i=0;i<p;i++)
        {
            parity[i]=parity[i]%2;
            if(parity[i]!=0)
            {
                error++;
               
            }
        }
        return error;
   }
   StringBuffer convert(int a)/*Function used to convert decimal to binary*/
   {
       StringBuffer s=new StringBuffer();
        do
        {
            s.append(a%2);
            a=a/2;
        }
        while(a!=0);
        s.reverse();
        return s;
   }
   int convertIntoDecimal(int a[],int length)/*Function used to convert binary to decimal*/
   {
     
       int dec=0;
        for(int i=0;i<length;i++)
        {
           dec=dec+a[i]*(int)(Math.pow(2, length-1-i));
        }
        return dec;
   }
   void main()/* Calling all functions in sequence*/
   {
       input();
       calculate();
       int c=check();
       if(c==0)
       {
           JOptionPane.showMessageDialog(null,"RECEIVED MESSAGE : "+Recieved_Word+"\nNO ERRORS DETECTED");
       }
        else
         
           {
               int temp[]=new int[p];
               for(int i=0;i<p;i++)
               {
                   temp[i]=parity[i];
               }
               for(int i=0;i<p;i++)
               {
                   parity[i]=temp[p-1-i];
               }
               int position=convertIntoDecimal(parity,p);
               JOptionPane.showMessageDialog(null,"ERROR DETECTED AT "+position);
               Corrected_Word.append(Recieved_Word);
               if(Corrected_Word.charAt(position-1)=='0')
               {
                   Corrected_Word.replace(position-1,position,"1");
               }
               else
               {
                   Corrected_Word.replace(position-1, position,"0");
               }
               JOptionPane.showMessageDialog(null,"RECEIVED CODE     : "+Recieved_Word+"\nERROR DETECTED AT "+position+"\nCORRECTED CODE : "+Corrected_Word);
           }
   }
}

Socket Programming-CRC

import java.util.*;
import javax.swing.*;
class Cyclic_Reduncany_Check
{
    static StringBuffer Frame=new StringBuffer();
    static StringBuffer Generator=new StringBuffer();
    static StringBuffer Message=new StringBuffer();
    static StringBuffer Remainder=new StringBuffer();
    static StringBuffer Quotient=new StringBuffer();
    static StringBuffer Zero=new StringBuffer();
    static StringBuffer TransmittedFrame=new StringBuffer();
    static int fl,gl,ml,pointer,turn=0;
   
    public static void main(String args[])
    {
       
    Object[] options = {"Transmission End", "Receiving End"};
    int selection = JOptionPane.showOptionDialog(null,"Select the Terminal",null, JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE, null,options, options[0]);
    if(selection == JOptionPane.YES_NO_OPTION)
    {
        input_t();
        length_t();
        initialise_t();
        calculate_t();
        output_t();
    }
    else
    {
        input_r();
        length_r();
        initialise_r();
        calculate_r();
        output_r();
    }
       
       
    }
   
    static void input_t()
    {
        Scanner sc=new Scanner(System.in);
Frame.append(JOptionPane.showInputDialog("Enter the Frame"));
Generator.append(JOptionPane.showInputDialog("Enter the Generator"));
     
       
       
     
    }
   
   
    static void length_t()
    {
      fl=Frame.length();
      gl=Generator.length();
      ml=gl+fl-1;
      pointer=gl;
    }
   
    static void initialise_t()
    {
        Message.append(Frame);
        for(int i=0;i<gl-1;i++)
        {
         Message.append("0");  
        }
        Remainder.append(Message.substring(0,gl));
        for(int i=0;i<gl;i++)
            Zero.append("0");
    }
   
    static void calculate_t()
    {
        for(;pointer<ml;pointer++)
        {
           
           
            if(Remainder.charAt(0)=='1')
            {
               
                Remainder=exor(Remainder,Generator);
                Remainder.deleteCharAt(0);
                Remainder.append(Message.charAt(pointer));
                Quotient.append('1');
               
            }
            else
            {
               
            Remainder=exor(Remainder,Zero);  
            Remainder.deleteCharAt(0);
            Remainder.append(Message.charAt(pointer));
            Quotient.append('0');
           
            }
        }
       
       
        Remainder.deleteCharAt(0);
        Quotient.append('0');
        TransmittedFrame=Frame;
        TransmittedFrame.append(Remainder);
       
    }
   
    static StringBuffer exor(StringBuffer Frame,StringBuffer Remainder)
    {
        StringBuffer exor=new StringBuffer();
        for(int i=0;i<gl;i++)
        {
            if(Frame.charAt(i)==Remainder.charAt(i))
                exor.append('0');
            else
                exor.append('1');
           
        }
        return exor;
    }
   
    static void output_t()
    {
        JOptionPane.showMessageDialog(null,"Frame             : "+Frame+
                "\n"+"Generator         : "+Generator+
                "\n"+"Quotient          : "+Quotient+
                "\n"+"Remainder         : "+Remainder+
                "\n"+"Transmitted Frame : "+TransmittedFrame);
     
    }
   
     static void input_r()
    {
        Scanner sc=new Scanner(System.in);
     
   
Frame.append(JOptionPane.showInputDialog("Enter the Recieved Frame"));
Generator.append(JOptionPane.showInputDialog("Enter the Generator"));
    }
   
   
    static void length_r()
    {
      fl=Frame.length();
      gl=Generator.length();
      ml=fl;
      pointer=gl;
    }
   
    static void initialise_r()
    {
        Message.append(Frame);
        Remainder.append(Message.substring(0,gl));
        for(int i=0;i<gl;i++)
            Zero.append("0");
    }
   
    static void calculate_r()
    {
        for(;pointer<ml;pointer++)
        {
           
           
            if(Remainder.charAt(0)=='1')
            {
               
                Remainder=exor(Remainder,Generator);
                Remainder.deleteCharAt(0);
                Remainder.append(Message.charAt(pointer));
                Quotient.append('1');
            }
            else
            {
               
            Remainder=exor(Remainder,Zero);  
            Remainder.deleteCharAt(0);
            Remainder.append(Message.charAt(pointer));
            Quotient.append('0');
            }
        }
        Quotient.append('0');
        TransmittedFrame=Frame;
        TransmittedFrame.append(Remainder);
    }
   
   public static boolean check()
   {
       for(int i=0;i<gl;i++)
       {
           if(Remainder.charAt(i)!=Zero.charAt(i))
           {
               return false;
           }
       }
       return true;
   }
    static void output_r()
    {
        if(check())
        {
        JOptionPane.showMessageDialog(null,"Correctly recieved");
        }
        else
        {
         JOptionPane.showMessageDialog(null,"Incorrect Message Recieved");
        }
     
    }

   
}