ab

ab


include<stdio.h> #include<sys/types.h> #include<netinet/in.h> #include<netdb.h> #include<stdlib.h> #include<sys/socket.h> #include<unistd.h> #include<string.h> #include<arpa/inet.h> #include<sys/stat.h>

 #define cls() printf("Clearing")

 IET/IT DEPARTMENT

 

  COMPUTER NETWORK

//structure definition for designing the packet.

 struct frame {

int packet[40];

 };

//structure definition for accepting the acknowledgement.

struct ack {

int acknowledge[40]; };

int main() {

int serversocket;

struct sockaddr_in serveraddr,clientaddr; socklen_t len;

 struct frame f1;

int windowsize,totalpackets,totalframes,i=0,j=0,framessend=0,k,m,n,l; int repacket[40];

struct ack acknowledgement;

char req[50];

serversocket=socket(AF_INET,SOCK_DGRAM,0); bzero((char*)&serveraddr,sizeof(serveraddr)); serveraddr.sin_family=AF_INET;

serveraddr.sin_port=htons(5018); serveraddr.sin_addr.s_addr=INADDR_ANY; bind(serversocket,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); bzero((char*)&clientaddr,sizeof(clientaddr));

len=sizeof(clientaddr);

//connection establishment.

printf("\nWaiting for client connetion \n"); recvfrom(serversocket,req,sizeof(req),0,(struct sockaddr*)&clientaddr,&len);

 printf("\nClient connection obtained\t%s\n",req);

//sending request for windowsize.

printf("\nSending request for window size\n");

sendto(serversocket,"REQUEST FOR WINDOW SIZE",sizeof("REQUST FOR WINDOW"),

0,(struct sockaddr*)&clientaddr,sizeof(clientaddr));

//obtaining windowsize.

printf("\nWaiting for the window size\n"); recvfrom(serversocket,(char*)&windowsize,sizeof(windowsize),

0,(struct sockaddr*)&clientaddr,&len);

 cls();

printf("The window size obtained as: \t%d\n",windowsize); printf("\nObtaining packets from network layer\n");

 IET/IT DEPARTMENT

 

  COMPUTER NETWORK

 printf("\nTotal packets obtained \t%d\n",(totalpackets=windowsize*5));

printf("\nTotal frames or windows to be transmitted\t%d\n",(totalframes=5));

//sending details to client.

printf("\nSending total number of packets\n");

 sendto(serversocket,(char*)&totalpackets,sizeof(totalpackets),

0,(struct sockaddr*)&clientaddr,sizeof(clientaddr));

recvfrom(serversocket,req,sizeof(req),0,(struct sockaddr*)&clientaddr,&len); printf("\nSending total number of frames\n"); sendto(serversocket,(char*)&totalframes,sizeof(totalframes),

0,(struct sockaddr*)&clientaddr,sizeof(clientaddr)); recvfrom(serversocket,req,sizeof(req),0,(struct sockaddr*)&clientaddr,&len);

printf("\nPress enter to start the process\n"); fgets(req,2,stdin);

cls();

j=0;

 l=0;

//starting the process of sending

while(l<totalpackets)

{

//initialising the transmit buffer.

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

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

printf("The frame to be send is %d with packets\n",framessend);

//Builting the frame.

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

{

//including the packets for which negative acknowledgement was received.

printf("%d",repacket[m]); f1.packet[m]=repacket[m];

}

while(j<windowsize && i<totalpackets)

 {

printf("%d",i);

f1.packet[j]=i; i++;

j++;

printf("Sending frame %d\n",framessend);

//sending the frame.

sendto(serversocket,(char*)&f1,sizeof(f1),

}

 0,(struct sockaddr*)&clientaddr,sizeof(clientaddr));

//Waiting for the acknowledgement.

printf("Waiting for the acknowledgement\n");

 IET/IT DEPARTMENT

 

  COMPUTER NETWORK

 recvfrom(serversocket,(char*)&acknowledgement,sizeof(acknowledgement), 0,(struct sockaddr*)&clientaddr,&len);

cls();

//Checking acknowledgement of each packet.

 j=0;

m=0;

k=0;

n=1;

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

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

{

printf("\nNegetive acknowledgement received for packet:%d\n",

k=1;

f1.packet[m]);

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

}

else

{

l++;

} m++; n++;

}if(k==0) {

printf("\nPositive,acknowledgement recived for all packets, waiting for frame:%d\n",framessend);

}

framessend++;

printf("\nPress enter to proceed\n");

 }

fgets(req,2,stdin);

cls(); }

printf("All frames sends successfully,.\nClosing connection with the client()");

close(serversocket);


Report Page