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")

//structure definition for accepting the packets. struct frame

{

 int packet[40]; };

  COMPUTER NETWORK

 IET/IT DEPARTMENT

 

  COMPUTER NETWORK

//structure definition for constructing the acknowledgement frame

 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));

//establishing the connection.

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); //accepting window size from the user.

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

scanf("%d",&windowsize); //sending the window size.

printf("Sending window size\n"); sendto(clientsocket,(char*)&windowsize,sizeof(windowsize),

0,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); cls();

//collecting details from server.

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)); //starting the process.

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

j=0;

while(l<totalpackets)

 {

//initialising the receive buffer.

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

 IET/IT DEPARTMENT

 

  COMPUTER NETWORK

printf("The Expected frame is %d with packets:",framesreceived); for(m=0;m<j;m++)

{

//readjusting for packets with negative acknowledgemen printf("%d",repacket[m]);

 }

while(j<windowsize && i<totalpackets) {

printf("%d",i); i++;

j++;

printf("\nWaiting for the frame \n"); //accepting the frame.

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);

//constructing the acknowledgement frame. j=0;

 }

m=0;

k=l;

while(m<windowsize && k<totalpackets) {

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

//accepting acknowledgement from the user. scanf("%d",&acknowledgement.acknowledge[m]);

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

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

j++; }

else {

l++; }

m++;

k++; }

framesreceived++; //sending acknowledgement to the server.

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

 }

cls(); }

printf("\nAll frames received successfully.\n\nClosing connection

with the server.\n");

close(clientsocket);

 /****************OUTPUT***

Report Page