Friday, November 13, 2015

Implementation of sliding window protocol using C++.

Program

Server Code:
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>
#define SIZE 4
int main()
{
        int sfd,lfd,len,i,j,status;
        char str[20],frame[20],temp[20],ack[20];
        struct sockaddr_in saddr,caddr;
        sfd=socket(AF_INET,SOCK_STREAM,0);
        if(sfd<0)
                perror("Error");
                bzero(&saddr,sizeof(saddr));
                saddr.sin_family=AF_INET;
                saddr.sin_addr.s_addr=htonl(INADDR_ANY);
                saddr.sin_port=htons(5465);
                if(bind(sfd,(struct sockaddr*)&saddr,sizeof(saddr))<0)
                        perror("Bind Error");
                listen(sfd,5);
                len=sizeof(&caddr);
                lfd=accept(sfd,(struct sockaddr*)&caddr,&len);
                printf(" Enter the text : \n");
                scanf("%s",str);
                i=0;
                while(i<strlen(str))
                {
                        memset(frame,0,20);
                        strncpy(frame,str+i,SIZE);
                        printf(" Transmitting Frames. ");
                        len=strlen(frame);
                        for(j=0;j<len;j++)
                        {
                                printf("%d",i+j);
                                sprintf(temp,"%d",i+j);
                                strcat(frame,temp);
                        }
                        printf("\n");
                        write(lfd,frame,sizeof(frame));
                        read(lfd,ack,20);
                        sscanf(ack,"%d",&status);

                        if(status==-1)
                                printf(" Transmission is successful. \n");
                        else
                        {
                                printf(" Received error in %d \n\n",status);
                                printf("\n\n Retransmitting Frame. ");
                                for(j=0;;)
                                {
                                        frame[j]=str[j+status];
                                        printf("%d",j+status);
                                        j++;
                                    if((j+status)%4==0)
                                                break;
                                }
                                printf("\n");
                                frame[j]='\0';
                                len=strlen(frame);
                                for(j=0;j<len;j++)
                                {
                                        sprintf(temp,"%d",j+status);
                                        strcat(frame,temp);
                                }
                                write(lfd,frame,sizeof(frame));
                        }
                        i+=SIZE;
                }
                write(lfd,"exit",sizeof("exit"));
                printf("Exiting\n");
                sleep(2);
                close(lfd);
                close(sfd);
}

************************************************
Client Code:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
int main()
{
        int sfd,lfd,len,choice;
        char str[20],str1[20],err[20];
        struct sockaddr_in saddr,caddr;
        sfd=socket(AF_INET,SOCK_STREAM,0);
        if(sfd<0)
                perror("FdError");
        bzero(&saddr,sizeof(saddr));
        saddr.sin_family=AF_INET;
        saddr.sin_addr.s_addr=INADDR_ANY;
        saddr.sin_port=htons(5465);
        connect(sfd,(struct sockaddr*)&saddr,sizeof(saddr));
        for(;;)
        {
                read(sfd,str,20);
                if(!strcmp(str,"exit"))
                {
                        printf("Exiting\n");
                        break;
                }
                printf("\n\nReceived: %s\n\n1.Do u want to report an error(1-Yes 0-No)",str);
                scanf("%d",&choice);
                if(!choice)
                        write(sfd,"-1",sizeof("-1"));
                else
                {
                        printf("Enter the sequence no of the frame where error has occurred\n");
                        scanf("%s",err);
                        write(sfd,err,sizeof(err));
                        read(sfd,str,20);
                        printf("\n\nReceived the re-transmitted frames: %s\n\n",str);
                }
        }
}
************************************************
Output(Server):
[exam10@localhost sliding]$ ./a.out
 Enter the text : 
HelloPICT1
 Transmitting Frames. 0123
 Transmission is successful. 
 Transmitting Frames. 4567
 Received error in 5 



 Retransmitting Frame. 567
 Transmitting Frames. 89
 Transmission is successful. 
Exiting

************************************************
Output(client):
[exam10@localhost sliding]$ ./a.out


Received: Hell0123

1.Do u want to report an error(1-Yes 0-No)0


Received: oPIC4567

1.Do u want to report an error(1-Yes 0-No)1
Enter the sequence no of the frame where error has occurred
5


Received the re-transmitted frames: PIC567



Received: T189

1.Do u want to report an error(1-Yes 0-No)0
Exiting
[exam10@localhost sliding]$ 

No comments:

Post a Comment

Perform a suitable assignment using Xen Hypervisor or equivalent open source to configure it. Give necessary GUI.

 To install kvm on Fedora:  yum install kvm  yum install virt-manager libvirt libvirt-python python-virtinst  su -c "yum install @v...