DHRUV KALPESH JADAV 22BCE3591
Computer Networks Lab
Lab Assessment – 2
Check Sum:
Code:
#include <stdio.h>
//Dhruv Kalpesh Jadav
//22BCE3591
int calculateSenderChecksum(int data[], int length) {
int sum = 0;
for(int i = 0; i < length; i++) {
sum += data[i];
}
int checksum = ~sum;
printf("\nMessage Sender:\n");
printf("Sum: %d\n", sum);
printf("Checksum: %d\n", checksum);
return checksum;
}
void validateReceiverChecksum(int data[], int length, int senderChecksum) {
int sum = 0;
for(int i = 0; i < length; i++) {
sum += data[i];
}
sum += senderChecksum;
int checksum = ~sum;
printf("\nMessage Reciever:\n");
printf("Sum: %d\n", sum);
printf("Checksum: %d\n", checksum);
if (checksum == 0) {
printf("\nData received is correct.\n");
} else {
printf("\nError detected in received data.\n");
}
}
int main() {
int n;
DHRUV KALPESH JADAV 22BCE3591
printf("\nEnter the number of elements: ");
scanf("%d", &n);
int data[n];
int dataR[n];
printf("Enter the elements of the array:\n");
for(int i = 0; i < n; i++) {
scanf("%d", &data[i]);
}
printf("\nEnter the elements of the recieved array:\n");
for(int i = 0; i < n; i++) {
scanf("%d", &dataR[i]);
}
int senderChecksum = calculateSenderChecksum(data, n);
validateReceiverChecksum(dataR, n, senderChecksum);
}
Output:
DHRUV KALPESH JADAV 22BCE3591
Hamming Code:
Code:
#include <stdio.h>
#include <math.h>
//Dhruv Kalpesh Jadav
//22BCE3591
int input[32];
int code[32];
int calculate_parity(int position, int code_length) {
int count = 0;
for (int i = position - 1; i < code_length; i += 2 * position) {
for (int j = i; j<i+position && j<code_length; j++) {
if (code[j] == 1) {
count++;
}
}
}
return (count % 2 ==0) ? 0:1;
}
int main() {
int n, parity_count = 0, code_length;
printf("Length of the Data Word: ");
scanf("%d", &n);
printf("Data Word (binary digits one by one):\n");
for (int i = 0; i < n; i++) {
scanf("%d", &input[i]);
}
while (n > pow(2, parity_count) - (parity_count + 1)) {
parity_count++;
}
code_length = n + parity_count;
for (int i = 0, j = 0, k = 0; i < code_length; i++) {
if (i == pow(2, k) - 1) {
code[i] = 0;
k++;
} else {
code[i] = input[j];
j++;
}
DHRUV KALPESH JADAV 22BCE3591
for (int i = 0; i < parity_count; i++) {
int position = pow(2, i);
code[position - 1] = calculate_parity(position, code_length);
}
printf("\nThe calculated message to be sent is: ");
for (int i = 0; i < code_length; i++) {
printf("%d", code[i]);
}
printf("\n");
printf("Received Data:\n");
for (int i = 0; i < code_length; i++) {
scanf("%d", &code[i]);
}
int error_position = 0;
for (int i = 0; i < parity_count; i++) {
int position = pow(2, i);
if (calculate_parity(position, code_length) != 0) {
error_position += position;
}
}
if (error_position == 0) {
printf("The received Data is correct.\n");
} else {
printf("Error at bit position: %d\n", error_position);
}
}
DHRUV KALPESH JADAV 22BCE3591
Output:
CRC:
Code:
#include <stdio.h>
#include <string.h>
//Dhruv Kalpesh Jadav
//22BCE3591
void xor1(char *result, char *a, char *b) {
int len = strlen(b);
for (int i = 1; i < len; i++) {
result[i - 1] = (a[i] == b[i]) ? '0' : '1';
}
result[len - 1] = '\0';
}
void mod2div(char *remainder, char *dividend, char *divisor) {
int pick = strlen(divisor);
char tmp[100];
DHRUV KALPESH JADAV 22BCE3591
strncpy(tmp, dividend, pick);
tmp[pick] = '\0';
int n = strlen(dividend);
while (pick < n) {
if (tmp[0] == '1') {
xor1(tmp, divisor, tmp);
} else {
char allZero[pick + 1];
memset(allZero, '0', pick);
allZero[pick] = '\0';
xor1(tmp, allZero, tmp);
}
strncat(tmp, ÷nd[pick], 1);
pick++;
}
if (tmp[0] == '1') {
xor1(tmp, divisor, tmp);
} else {
char allZero[pick + 1];
memset(allZero, '0', pick);
allZero[pick] = '\0';
xor1(tmp, allZero, tmp);
}
strcpy(remainder, tmp);
}
void encodeData(char *data, char *key, char *encoded) {
int l_key = strlen(key);
char appended_data[100];
snprintf(appended_data, sizeof(appended_data), "%s%0*d", data, l_key - 1,
0);
char remainder[100];
mod2div(remainder, appended_data, key);
strcpy(encoded, data);
strcat(encoded, remainder);
printf("Encoded Data: %s\n", encoded);
}
void receiver(char *received_data, char *key) {
char remainder[100];
mod2div(remainder, received_data, key);
DHRUV KALPESH JADAV 22BCE3591
if (strchr(remainder, '1') != NULL) {
printf("There is some error in the received data.\n");
} else {
printf("Correct message received.\n");
}
}
int main() {
char data[100], key[100], received_data[100];
printf("Enter the data to be sent: ");
scanf("%s", data);
printf("Enter the divisor: ");
scanf("%s", key);
char encoded[200];
encodeData(data, key, encoded);
printf("\nEnter the received data: ");
scanf("%s", received_data);
receiver(received_data, key);
}
DHRUV KALPESH JADAV 22BCE3591
Output: