CN Lab5
CN Lab5
Q1:
#include <stdio.h>
#include <string.h>
int main() {
char frame[50][50], str[50][50];
char flag[] = "0x7E";
char esc[] = "0x7D";
int i, j, k = 0, n;
strcpy(frame[k++], flag);
printf("Enter number of strings: ");
scanf("%d", &n);
getchar();
printf("Enter the strings:\n");
for (i = 0; i < n; i++) {
fgets(str[i], sizeof(str[i]), stdin);
str[i][strcspn(str[i], "\n")] = 0;
}
for (i = 0; i < n; i++) {
if (strcmp(str[i], flag) != 0 && strcmp(str[i], esc) != 0) {
strcpy(frame[k++], str[i]);
} else {
strcpy(frame[k++], esc);
strcpy(frame[k++], str[i]);
}
}
strcpy(frame[k++], flag);
printf("------------------------------\n\n");
printf("Byte stuffing at sender side:\n\n");
printf("------------------------------\n\n");
for (i = 0; i < k; i++) {
printf("%s\t", frame[i]);
}
printf("\n");
char destuffed[50][50];
int d = 0;
i = 1;
while (i < k - 1) {
if (strcmp(frame[i], esc) == 0) {
strcpy(destuffed[d++], frame[++i]);
} else {
strcpy(destuffed[d++], frame[i]);
}
i++;
}
printf("\n------------------------------\n\n");
printf("Destuffing at receiver side:\n\n");
printf("------------------------------\n\n");
printf("0x7E\t");
for (i = 0; i < d; i++) {
printf("%s\t", destuffed[i]);
}
printf("0x7E");
printf("\n");
return 0;
}
Output:
Q2:
SENDER
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <time.h>
#define PORT 1047
#define TIMEOUT 2 // seconds
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
int total_packets, packet_no = 1;
int ack;
srand(time(0)); // Seed for random number generation
// Create socket
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("\n Socket creation error \n");
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
RECIEVER:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <time.h>
int simulate_packet_loss() {
return rand() % 5 == 0; // 20% chance of loss
}
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
int packet_no, expected_packet_no = 1;
srand(time(0)); // Seed for random number generation
// Create socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
printf("Connected to sender.\n");
while (1) {
// Receive packet number
int valread = recv(new_socket, &packet_no, sizeof(packet_no),
0);
if (valread <= 0) break;
// Simulate packet loss
if (simulate_packet_loss()) {
printf("Packet %d lost or corrupted. No ACK sent.\n",
packet_no);
continue; // No acknowledgment sent
}
if (packet_no == expected_packet_no) {
printf("Packet %d received successfully.\n", packet_no);
// Send acknowledgment
send(new_socket, &packet_no, sizeof(packet_no), 0);
expected_packet_no++; // Move to the next expected packet
} else {
printf("Received out of order packet %d. Expected %d.\n",
packet_no, expected_packet_no);
}
}
close(new_socket);
close(server_fd);
return 0;
}
OUTPUT:
Q3:
SENDER:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <time.h>
int window_size;
int simulate_packet_loss() {
return rand() % 5 == 0; // Simulate packet loss/corruption with 20%
probability
}
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
int total_packets;
// Create socket
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("\n Socket creation error \n");
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
close(sock);
return 0;
}
RECIEVER:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <time.h>
int simulate_packet_loss() {
return rand() % 5 == 0; // Simulate packet loss with 20% chance
}
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
int expected_seq_num = 1, packet_no;
// Create socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
printf("Connected to sender.\n");
while (1) {
int valread = recv(new_socket, &packet_no, sizeof(packet_no),
0);
if (valread <= 0) break;
close(new_socket);
close(server_fd);
return 0;
}
Output: