Stop and Wait
Stop and Wait
Stop and Wait
TESSA GEORGE
S6 CSB, Roll No. 55
CLIENT SIDE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int frame_id = 0;
Frame frame_send;
Frame frame_recv;
int ack_recv = 1;
if(ack_recv == 1){
frame_send.sq_no = frame_id;
frame_send.frame_kind = 1;
frame_send.ack = 0;
SERVER SIDE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
typedef struct packet{
char data[1024];
}Packet;
if (argc != 2){
printf("Usage: %s <port>", argv[0]);
exit(0);
}
int frame_id=0;
Frame frame_recv;
Frame frame_send;
while(1){
int f_recv_size = recvfrom(sockfd, &frame_recv, sizeof(Frame), 0, (struct
sockaddr*)&newAddr, &addr_size);
if (f_recv_size > 0 && frame_recv.frame_kind == 1 && frame_recv.sq_no ==
frame_id){
printf("[+]Frame Received: %s\n", frame_recv.packet.data);
frame_send.sq_no = 0;
frame_send.frame_kind = 0;
frame_send.ack = frame_recv.sq_no + 1;
sendto(sockfd, &frame_send, sizeof(frame_send), 0, (struct
sockaddr*)&newAddr, addr_size);
printf("[+]Ack Send\n");
}else{
printf("[+]Frame Not Received\n");
}
frame_id++;
}
close(sockfd);
return 0;
}
OUTPUT
CLIENT
gcc client.c -o c
./c 4000
Enter Data: 1234
[+]Frame Send
[+]Ack Received
Enter Data: 0100
[+]Frame Send
[+]Ack Received
Enter Data: -5
[+]Frame Send
[+]Ack Received
Enter Data: abc
[+]Frame Send
[+]Ack Received
SERVER
gcc server.c -o s
./s 4000
[+]Frame Received: 1234
[+]Ack Send
[+]Frame Received: 0100
[+]Ack Send
[+]Frame Received: -5
[+]Ack Send
[+]Frame Received: abc
[+]Ack Send