02 May, 2014

Protocol 3

Sender

#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
int main()
{
    int retval;
    char buffer1[63],buffer2[63];
    char buflen = 64;
    int fd1,fd2;

    int ack=0,timeout=0,iteration=0,iserror=0;

    time_t time1,time2;

    fd1 = open("Compile",O_RDWR|O_NDELAY);

    fd2 = open("Ackfifo",O_RDWR);
    printf("Please Enter The Message \n");
    scanf("%s",buffer1);
    retval = write(fd1,&buffer1,buflen);
    if(!strcmp(buffer1,"Bye"))
    {
        exit(0);
    }
    if(retval < 0)
        perror("Sendetr");

    for(;;)
    {
        time1 = time(0);
        while(!ack && !timeout && !iserror)
        {
            time2 = time(0);
            if((time2-time1)>=1)
            {
                timeout=1;
            }
            retval = read(fd2,&buffer2,buflen);

            if(retval>=0)
                ack=1;

            iserror = checksum(buffer2);
        }
        if(ack)
        {

            printf("Ack Received\n");

            printf("Please Enter The Message \n");
            scanf("%s",buffer1);
            retval = write(fd1,&buffer1,buflen);

            if(!strcmp(buffer1,"Bye"))
                    break;
            if(retval < 0)
                    perror("Sendetr");
            time1 = time(0);
            ack = 0;
        }
        else if(timeout || iserror)
        {
            retval = write(fd1,&buffer1,buflen);

            if(!strcmp(buffer1,"Bye"))
                    break;
            if(retval < 0)
                    perror("Sendetr");

            time1 = time(0);
            timeout = 0;
            iserror = 0;
        }
    }
}

Receiver


#include<stdio.h>
#include<fcntl.h>
int main()
{
    int retval;
    char buffer1[63],buffer2[63];
    char buflen = 64;
    int fd1,fd2;

    fd1 = open("Compile",O_RDWR);
    fd2 = open("Ackfifo",O_RDWR);

    for(;;)
    {
        retval = read(fd1,&buffer1,buflen);
        if(!strcmp(buffer1,"Bye"))
            break;
        if(retval < 0)
            perror("Receiver");
           
        printf("%s",buffer1);
       
        sleep(10);
       
        retval = write(fd2,&buffer2,buflen);
        if(retval < 0)
            perror("Receiver Ack");
    }
}


Protocol 2

Sender

#include<stdio.h>
#include<fcntl.h>
int main()
{
    int retval;
    char buffer1[63],buffer2[63];
    char buflen = 64;
    int fd1,fd2;
   
    fd1 = open("Compipe",O_RDWR);
    fd2 = open("Ackfifo",O_RDWR);
   
    for(;;)
    {
        printf("Please Enter The Message \n");
        fflush(stdin);
        scanf("%s",buffer1);
       
        retval = write(fd1,&buffer1,buflen);
        if(!strcmp(buffer1,"Bye"))
            break;
           
        if(retval < 0)
            perror("Sendetr");
           
        retval = read(fd2,&buffer2,buflen);
        //read stops untill the receiver sends back the ack
       
        if(retval < 0)
            perror("Sender Ack");
    }
}

Receiver



#include<stdio.h>
#include<fcntl.h>
int main()
{
    int retval;
    char buffer1[63],buffer2[63];
    char buflen = 64;
    int fd1,fd2;
   
    fd1 = open("Compipe",O_RDWR);
    fd2 = open("Ackfifo",O_RDWR);
   
    for(;;)
    {
        retval = read(fd1,&buffer1,buflen);
        if(!strcmp(buffer1,"Bye"))
            break;
        if(retval < 0)
            perror("Receiver");
       
        printf("Receiver Message is : - ")
        printf("%s\n",buffer1);
       
        //simulating the application read time
        //sleep(10);
       
        retval = write(fd2,&buffer2,buflen);
        //sending back the ack!
       
        if(retval < 0)
            perror("Receiver Ack");
    }
}



 

Protocol 1

Sender


#include<stdio.h>
#include<fcntl.h>
int main()
{
    int retval;
    char buffer1[63];
    char buflen = 64;
    int fd1;
   
    fd1 = open("Compile",O_RDWR);
    for(;;)
    {
        printf("Please Enter The Message \n");
        scanf("%s",buffer1);
        retval = write(fd1,&buffer1,buflen);
        if(!strcmp(buffer1,"Bye"))
            break;
        if(retval < 0)
            perror("Sendetr");
    }
}

Receiver


#include<stdio.h>
#include<fcntl.h>
int main()
{
    int retval;
    char buffer1[63];
    char buflen = 64;
    int fd1;
   
    fd1 = open("Compile",O_RDWR);
    for(;;)
    {
        retval = read(fd1,&buffer1,buflen);
        if(!strcmp(buffer1,"Bye"))
            break;
        if(retval < 0)
            perror("Receiver");
           
        printf("%s",buffer1);
    }
}

08 March, 2014

Humming Code

Humming Code Receiver


#include<stdio.h>
#include<fcntl.h>
main()
{
    int fd,i,ind;
    char data[11],ch;

    if((fd=open("testfile",O_RDONLY))<=0)
        perror("File open failed");
   
    while(1)
    {
        if((i=read(fd,data,11))<=0)
            break;

        for(i=10;i>=0;i--)
        {
            printf("%c",data[i]);
        }
        hammingCode(data);
        ind=8;

        for(i=0;i<11;i++)
        {
           
            if(i!=0 && i!=1 && i!=3 && i!=7)
            {
                if(data[i]=='1')
                {
                    ch=setBit(ch,ind--);
                }
                else
                {
                    ch=unSetBit(ch,ind--);
                }
            }
        }
        ch=unSetBit(ch,1);
        printf("%c",ch);
        printf("\n");
    }
}
void displayBit(char ch)
{
    int no=128;
    int i;

    for(i=0;i<8;i++)
    {
        if((no&ch)>0)
            printf("1");
        else
            printf("0");
       
        no=no>>1;
    }
}
char setBit(char ch,int pos)
{
    int no=128;
   
    no=no>>(pos-1);
   
    return ch|no;

}
char unSetBit(char ch,int pos)
{
    int no=128;
   
    no=no>>(pos-1);

    no=~no;

    return ch&no;
}
void hammingCode(char data[])
{
   
    int one=0,two=0,three=0,four=0,i;   

    for(i=1;i<=11;i++)
    {
        if((i==1 || i==3 || i==5 || i==7 || i==9 || i==11) && (data[i-1]=='1'))
        {
            one++;
        }
        if((i==2 || i==3 || i==6 || i==7 || i==10 || i==11) &&(data[i-1]=='1'))
        {
            two++;
        }
        if((i==4 || i==5 || i==6 || i==7) && (data[i-1]=='1'))
        {
            three++;
        }
        if((i==8 || i==9 || i==10 || i==11) && (data[i-1]=='1'))
        {
            four++;
        }
    }
   
    if(one%2==0 && two%2==0 && three%2==0 && four%2==0)
        printf("\tValid Data - \t");
    else
    {
        int pos=0;

        if(one%2!=0)
        {
            pos++;
        }
        if(two%2!=0)
        {
            pos+=2;
        }
        if(three%2!=0)
        {
            pos+=4;
        }   
        if(four%2!=0)
        {
            pos+=8;
        }
       
        printf("Error detected at bit %d",pos);

        if(data[pos]==0)
            data[pos]='1';
        else
            data[pos]='0';
        printf("\nCorrected Data is: ");
    }
   
}



Humming Code Sender


#include<stdio.h>
#include<fcntl.h>

void displayBit(char ch);
char* hammingCode(char ch);
char getBit(char ch,int pos);

main()
{
    int fd,fd1,i,j;
    char ch,*data;

    if((fd=open("testfile",O_WRONLY))<=0)
        perror("File open failed");
   
    if((fd1=open("input.txt",O_RDONLY))<=0)
        perror("File open failed");

    while(1)
    {
        if((i=read(fd1,&ch,1))<=0)
            break;
        if(ch==10)
            break;

        printf("\nchar is: %c -",ch);
        displayBit(ch);

        data=hammingCode(ch);
        printf("\n\nSender\n:");

        for(i=10;i>=0;i--)
        {
            printf("%c",data[i]);
        }   
       
        if((i=write(fd,data,11))<=0)
            break;

        free(data);
       
    }
   
}
void displayBit(char ch)
{
    int no=128;
    int i;

    for(i=0;i<8;i++)
    {
        if((no&ch)>0)
            printf("1");
        else
            printf("0");
       
        no=no>>1;
    }
}
char getBit(char ch,int pos)
{
    int no=128;

    no=no>>(pos-1);

    if((no&ch)>0)
        return '1';
    else
        return '0';
}
char* hammingCode(char ch)
{
    char *data=(char *)malloc(sizeof(char)*11);
   
    int one=0,two=0,three=0,four=0,i;   

    data[0]='0';    //1st
    data[1]='0';    //2nd

    data[2]=getBit(ch,8);

    data[3]='0';    //4th

    data[4]=getBit(ch,7);
    data[5]=getBit(ch,6);
    data[6]=getBit(ch,5);

    data[7]='0';    //8th

    data[8]=getBit(ch,4);
    data[9]=getBit(ch,3);
    data[10]=getBit(ch,2);


    for(i=1;i<=11;i++)
    {
        if((i==1 || i==3 || i==5 || i==7 || i==9 || i==11) && (data[i-1]=='1'))
        {
            one++;
        }
        if((i==2 || i==3 || i==6 || i==7 || i==10 || i==11) &&(data[i-1]=='1'))
        {
            two++;
        }
        if((i==4 || i==5 || i==6 || i==7) && (data[i-1]=='1'))
        {
            three++;
        }
        if((i==8 || i==9 || i==10 || i==11) && (data[i-1]=='1'))
        {
            four++;
        }
    }
   
    if(one%2!=0)
        data[0]='1';

    if(two%2!=0)
        data[1]='1';

    if(three%2!=0)
        data[3]='1';

    if(four%2!=0)
        data[7]='1';

    return data;
}