/*******************************************************************************/
Name : Anandu Murali Roll No :16
SLIDING WNDOW PROTOCOL
(Stop and Wait ARQ)
Date : 22/04/2024 Experiment No : 10
/******************************************************************************/
Client Program
#include<stdio.h>
#include<string.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
void main() {
printf("\nSearching for server... \n");
struct sockaddr_in servaddr;
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&servaddr, 0 , sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(5600);
int n = -1 , len, ack;
sendto(sockfd, &n, sizeof(n),0 , (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("\nServer connected successfully!\n");
printf("\nEnter total number of frames : ");
scanf("%d", &n);
sendto(sockfd, &n, sizeof(n),0 , (struct sockaddr*)&servaddr, sizeof(servaddr));
for (int i=1; i<=n; i++) {
ack = -1;
do {
printf("\nSending frames %d", i);
sendto(sockfd, &i, sizeof(n),0 , (struct sockaddr*)&servaddr,
sizeof(servaddr));
printf("\nWaiting for ACK...\n");
recvfrom(sockfd, &ack, sizeof(n),0 , (struct sockaddr*)&servaddr, sizeof(len));
if (ack == -1) {
printf("\nNegative ACK received... Resending... \n");
} while (ack == -1);
n = -99;
sendto(sockfd, &n, sizeof(n),0 , (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("\nSuccessfully sent all frames!");
close(sockfd);
Server Program
#include<stdio.h>
#include<string.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
void main() {
printf("\nWaiting for client.... \n");
struct sockaddr_in servaddr, cliaddr;
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&servaddr, 0 , sizeof(servaddr));
memset(&cliaddr, 0 , sizeof(cliaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(5600);
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
int len = sizeof(cliaddr);
int frames[100], n , p, ack;
recvfrom(sockfd, &n, sizeof(n), 0, (struct sockaddr*)&cliaddr, &len);
printf("\nClient connected successfully!\n");
printf("Waiting from total number of frames");
recvfrom(sockfd, &n, sizeof(n), 0, (struct sockaddr*)&cliaddr, &len);
while (1) {
recvfrom(sockfd, &p, sizeof(n),0,(struct sockaddr*)&cliaddr, &len);
if (p == -99)
break;
printf("\nReceived frame %d ", p);
printf("\nEnter 1 for +ve ACK and -1 for -ve ACK");
scanf("%d", &ack);
sendto(sockfd, &ack, sizeof(n),0, (struct sockaddr*)&cliaddr, sizeof(cliaddr));
OUTPUT
Server
Waiting for client....
Client connected successfully!
Waiting from total number of frames
Received frame 1
Enter 1 for +ve ACK and -1 for -ve ACK1
Received frame 2
Enter 1 for +ve ACK and -1 for -ve ACK1
Received frame 3
Enter 1 for +ve ACK and -1 for -ve ACK-1
Received frame 3
Enter 1 for +ve ACK and -1 for -ve ACK1
Received frame 4
Enter 1 for +ve ACK and -1 for -ve ACK1
Client
Searching for server...
Server connected successfully!
Enter total number of frames : 4
Sending frames 1
Waiting for ACK...
Sending frames 2
Waiting for ACK...
Sending frames 3
Waiting for ACK...
Negative ACK received... Resending...
Sending frames 3
Waiting for ACK...
Sending frames 4
Waiting for ACK...
Successfully sent all frames!
/***********************************************************************/