ab

ab


#include<stdio.h>

#include<sys/types.h>

#include<netinet/in.h>

#include<netdb.h>

#include<stdlib.h>

#include<sys/socket.h>

#include<string.h>

#define cls() printf("Clearing")

 struct frame{int packet[40];};

 struct ack{int acknowledge[40]; };

int main()

{

 int clientsocket;

 struct sockaddr_in serveraddr;

 socklen_t len;

 struct hostent *server;

 struct frame f1;

 int windowsize,totalpackets,totalframes,i=0,j=0,framesreceived=0,k,m,n,l;

 int repacket[40];

 struct ack acknowledgement;

 char req[50];

 clientsocket=socket(AF_INET,SOCK_DGRAM,0);

 bzero((char*)&serveraddr,sizeof(serveraddr));

 serveraddr.sin_family=AF_INET;

 serveraddr.sin_port=htons(5018);

 server=gethostbyname("127.0.0.1");

 bcopy((char*)server->h_addr,(char*)&serveraddr.sin_addr.s_addr,sizeof(server->h_addr));

 printf("Sending request to the server\n");

 sendto(clientsocket,"HI IAM CLIENT.",sizeof("HI IAM CLIENT"),0,(struct sockaddr*)&serveraddr,sizeof(serveraddr));

 printf("\nWaiting for reply\n");

 recvfrom(clientsocket,req,sizeof(req),0,(struct sockaddr*)&serveraddr,&len);

 printf("The server has send:It %s \n",req);

 printf("\nEnter the window size \n");

 scanf("%d",&windowsize);

 printf("Sending window size\n");

 sendto(clientsocket,(char*)&windowsize,sizeof(windowsize),0,(struct sockaddr*)&serveraddr,sizeof(serveraddr));

 cls();

 printf("\nWaiting for the server response\n");

 recvfrom(clientsocket,(char*)&totalpackets,sizeof(totalpackets),0,(struct sockaddr*)&serveraddr,&len);

 printf("The total packets are:%d\n",totalpackets);

 sendto(clientsocket,"RECEIVED.",sizeof("RECEIVED."),0,(struct sockaddr*)&serveraddr,sizeof(serveraddr));

 recvfrom(clientsocket,(char*)&totalframes,sizeof(totalframes),0,(struct sockaddr*)&serveraddr,&len);

 printf("The frames of windows are:\t%d\n",totalframes);

 sendto(clientsocket,"RECEIVED.",sizeof("RECEIVED."),0,(struct sockaddr*)&serveraddr,sizeof(serveraddr));

 printf("Starting the process of receiving:\n");

 l=0;

 j=0;

while(l<totalpackets)

 {

 printf("Initializing the receiver buffer \n");

 printf("The Expected frame is %d with packets:",framesreceived);

for(m=0;m<j;m++)

{

 printf("%d",repacket[m]);

}

while(j<windowsize && i<totalpackets)

{

 printf("%d",i);

 i++;

 j++;

}

 printf("\nWaiting for the frame \n");

 recvfrom(clientsocket,(char*)&f1,sizeof(f1),0,(struct sockaddr*)&serveraddr,&len);

 printf("Received frame %d \n\nEnter to send negative acknowledgement for the following packets.\n",framesreceived);

 j=0;

 m=0;

 k=l;

while(m<windowsize && k<totalpackets)

{

 printf("\nPacket:%d\n",f1.packet[m]);

if(acknowledgement.acknowledge[m]==-1)

{

 repacket[j]=f1.packet[m];

 j++;

}

else

{

 l++;

}

 m++;

 k++;

}

 framesreceived++;

 sendto(clientsocket,(char*)&acknowledgement,sizeof(acknowledgement),0,(struct sockaddr*)&serveraddr,sizeof(serveraddr));

 cls();

}

 printf("\nAll frames received successfully.\n\n Closing connection with the server. \n");

 close(clientsocket);

}


Report Page