0% found this document useful (0 votes)
45 views

Computer Networks

The document contains code snippets for implementing various networking and error detection concepts in C/C++ including: 1) TCP client-server code to demonstrate socket programming and bidirectional communication between a client and server. 2) UDP client-server code using datagrams for communication without establishing a connection. 3) Distance vector routing algorithm code to calculate the shortest paths between nodes in a network. 4) CRC algorithm code to generate and check cyclic redundancy checks to detect errors in transmitted data. 5) Hamming code algorithm to encode data by adding redundant bits to detect and correct single-bit errors.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views

Computer Networks

The document contains code snippets for implementing various networking and error detection concepts in C/C++ including: 1) TCP client-server code to demonstrate socket programming and bidirectional communication between a client and server. 2) UDP client-server code using datagrams for communication without establishing a connection. 3) Distance vector routing algorithm code to calculate the shortest paths between nodes in a network. 4) CRC algorithm code to generate and check cyclic redundancy checks to detect errors in transmitted data. 5) Hamming code algorithm to encode data by adding redundant bits to detect and correct single-bit errors.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 20

TCP

SERVER

#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<stdlib.h>
#include<string.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,MAX);
read(sockfd,buff,sizeof(buff));
printf("From client: %s\t To client : ",buff);
bzero(buff,MAX);
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
if(strncmp("exit",buff,4)==0)
{
printf("Server Exit...\n");
break;
}
}
}
int main()
{
int sockfd,connfd,len;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
if((listen(sockfd,5))!=0)
{
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len=sizeof(cli);
connfd=accept(sockfd,(SA *)&cli,&len);
if(connfd<0)
{
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
func(connfd);
close(sockfd);
}
CLIENT
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<string.h>
#include<stdlib.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,sizeof(buff));
printf("Enter the string : ");
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
bzero(buff,sizeof(buff));
read(sockfd,buff,sizeof(buff));
printf("From Server : %s",buff);
if((strncmp(buff,"exit",4))==0)
{
printf("Client Exit...\n");
break;
}
}
}

int main()
{
int sockfd,connfd;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(PORT);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0)
{
printf("connection with the server failed...\n");
exit(0);
}
else
printf("connected to the server..\n");
func(sockfd);
close(sockfd);
}

UDP
CLIENT
#include<sys/socket.h>
#include<netdb.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define MAX 80
#define PORT 68586
#define SA struct sockaddr
int main()
{
char buff[MAX];
int sockfd,len,n;
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(len));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(PORT);
len=sizeof(servaddr);
for(;;)
{
printf("\nEnter string : ");
n=0;
while((buff[n++]=getchar())!='\n');
sendto(sockfd,buff,sizeof(buff),0,(SA *)&servaddr,len);
bzero(buff,sizeof(buff));
recvfrom(sockfd,buff,sizeof(buff),0,(SA *)&servaddr,&len);
printf("From Server : %s\n",buff);
if(strncmp("exit",buff,4)==0)
{
printf("Client Exit...\n");
break;
}
}
close(sockfd);
}
SERVER
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<ctype.h>
#include<netdb.h>
#include<string.h>
#include<stdlib.h>
#define MAX 80
#define PORT 23866
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n,clen;
struct sockaddr_in cli;
clen=sizeof(cli);
for(;;)
{
int i;
bzero(buff,MAX);
recvfrom(sockfd,buff,sizeof(buff),0,(SA *)&cli,&clen);
for(i=0; i<sizeof(buff); i++){
buff[i] = toupper(buff[i]);
}
printf("From client %s To client",buff);
bzero(buff,MAX);
n=0;
while((buff[n++]=getchar())!='\n');
sendto(sockfd,buff,sizeof(buff),0,(SA *)&cli,clen);
if(strncmp("exit",buff,4)==0)
{
printf("Server Exit...\n");
break;
}
}
}
int main()
{
int sockfd;
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(SA *)&servaddr,sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
func(sockfd);
close(sockfd);
}
DISTANCE VECTOR ROUTING
#include<stdio.h>
struct node
{
unsigned dist[20];
unsigned from[20];
}rt[10];
int main()
{
int dmat[20][20];
int n,i,j,k,count=0;
printf("\nEnter the number of nodes : ");
scanf("%d",&n);
printf("\nEnter the cost matrix :\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
scanf("%d",&dmat[i][j]);
dmat[i][i]=0;
rt[i].dist[j]=dmat[i][j];
rt[i].from[j]=j;
}
do
{
count=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
if(rt[i].dist[j]>dmat[i][k]+rt[k].dist[j])
{
rt[i].dist[j]=rt[i].dist[k]+rt[k].dist[j];
rt[i].from[j]=k;
count++;
}
}while(count!=0);
for(i=0;i<n;i++)
{
printf("\n\nState value for router %d is \n",i+1);
for(j=0;j<n;j++)
{
printf("\nnode %d via %d Distance%d",j+1,rt[i].from[j]
+1,rt[i].dist[j]);
}
}
printf("\n\n");
}
CRC
#include <stdio.h>

#include <string.h>

#define MAX_LEN 100

char data[MAX_LEN];

char gen_poly[MAX_LEN];

char check_value[MAX_LEN];
int data_length, gen_poly_length, i, j;

void XOR()

for (int i = 1; i < gen_poly_length; i++)

if (check_value[i] == gen_poly[i])

check_value[i] = '0';

else

check_value[i] = '1';

void receiver()

printf("Enter the received data: ");

scanf("%s", data);

crc();

for (i = 0; (i < gen_poly_length - 1) && (check_value[i] != '1'); i++)

if (i < gen_poly_length - 1)

printf("\nError detected\n\n");

else

printf("\nNo error detected\n\n");

void crc()
{

for (i = 0; i < gen_poly_length; i++)

check_value[i] = data[i];

do

if (check_value[0] == '1')

XOR();

for (j = 0; j < gen_poly_length - 1; j++)

check_value[j] = check_value[j + 1];

check_value[j] = data[i++];

} while (i <= data_length + gen_poly_length - 1);

int main()

printf("Enter data to be transmitted: ");

scanf("%s", data);

printf("Enter the generator polynomial: ");

scanf("%s", gen_poly);

data_length = strlen(data);

gen_poly_length = strlen(gen_poly);

for (int i = data_length; i < data_length + gen_poly_length - 1; i++)

data[i] = '0';

crc();

for (int i = data_length; i < data_length + gen_poly_length - 1; i++)

data[i] = check_value[i - data_length];

printf("Final data to be sent: %s\n", data);

printf("CRC is: %s\n", check_value);


receiver();

return 0;

HAMMING

#include <stdio.h>

#include <math.h>

int input[32];

int code[32];

int ham_calc(int position, int c_l)

int count = 0, i, j;

i = position - 1;

while (i < c_l)

for (j = i; j < i + position; j++)

if (code[j] == 1)

count++;

i = i + 2 * position;

if (count % 2 == 0)

return 0;

else

return 1;

int main()

int n, i, p_n = 0, c_l, j, k;

printf("\nEnter length of the Data Word: ");

scanf("%d", &n);
printf("Enter the Data Word:\n");

for (i = 0; i < n; i++)

scanf("%d", &input[i]);

i = 0;

while (n > (int)pow(2, i) - (i + 1))

p_n++;

i++;

c_l = p_n + n;

j = k = 0;

for (i = 0; i < c_l; i++)

if (i == ((int)pow(2, k) - 1))

code[i] = 0;

k++;

else

code[i] = input[j];

j++;

for (i = 0; i < p_n; i++)

int position = (int)pow(2, i);

int value = ham_calc(position, c_l);

code[position - 1] = value;
}

printf("The Code Word is: ");

for (i = 0; i < c_l; i++)

printf("%d", code[i]);

printf("\n");

printf("Enter received Code Word:\n");

for (i = 0; i < c_l; i++)

scanf("%d", &code[i]);

int error_pos = 0;

for (i = 0; i < p_n; i++)

int position = (int)pow(2, i);

int value = ham_calc(position, c_l);

if (value != 0)

error_pos += position;

if (error_pos+1 == 1)

printf("The received Code Word is correct.\n");

else

printf("Error at bit position: %d\n", error_pos);

return 0;

CHECKSUM

#include <stdio.h>
#include <conio.h>
#include <math.h>
int sender(int b[10], int k)
{
int checksum, sum = 0, i;
for (i = 0; i < k; i++)
sum += b[i];
printf("Sender's Sum: %d", sum);
checksum = ~sum;
printf("\nSender's Checksum: %d", checksum);
return checksum;
}
int receiver(int c[10], int k, int scheck)
{
int checksum, sum = 0, i;
for (i = 0; i < k; i++)
sum += c[i];
printf("\nReceiver's Sum: %d", sum);
sum = sum + scheck;
checksum = ~sum;
printf("\nReceiver's Checksum: %d", checksum);
return checksum;
}
int main()
{
int a[10], i, m, scheck, rcheck;
printf("\nEnter Size of the string: ");
scanf("%d", &m);
printf("\nEnter elements of Array: ");
for (i = 0; i < m; i++)
scanf("%d", &a[i]);
scheck = sender(a, m);
rcheck = receiver(a, m, scheck);
if (rcheck == 0)
printf("\nNo Error Detected");
else
printf("\nError Detected");
return 0;
}
GO BACK
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
struct frame
{
char ack;
int data;
} frm[10];
int goback(int n)
{
int r;
for (int i = 1; i <= n; i++)
{
printf("\nEnter data for packets[%d]", i);
scanf("%d", &frm[i].data);
frm[i].ack = 'y';
}
rand();
r = rand() % n;
frm[r].ack = 'n';
for (int i = 1; i <= n; i++)
{
if (frm[i].ack == 'n')
printf("\nThe packet number %d is not received\n", r);
}
printf("\n resending from packet %d", r);
for (int i = r; i <= n; i++)
{
sleep(2);
frm[i].ack = 'y';
printf("\nReceived data of packet %d is %d", i, frm[i].data);
}
printf("\n all packets sent successfully\n");
return 0;
}
int main()
{
int n;
printf("\nEnter the no. of packets to be sent:");
scanf("%d", &n);
goback(n);
return 0;
}
SELECTIVE
#include <stdio.h>

#include <stdbool.h>

#include <stdlib.h>

#include <time.h>

#define WINDOW_SIZE 4

typedef struct {
int sequence_number;

bool ack_received;

bool is_sent;

} Packet;

int main() {

int NUM_PACKETS;

printf("Enter the number of packets: ");

scanf("%d", &NUM_PACKETS);

Packet packets[NUM_PACKETS];

int window_start = 0;

int window_end = WINDOW_SIZE - 1;

for (int i = 0; i < NUM_PACKETS; i++) {

packets[i].sequence_number = i;

packets[i].ack_received = false;

packets[i].is_sent = false;

srand(time(NULL));

while (window_end < NUM_PACKETS) {

for (int i = window_start; i <= window_end; i++) {

if (!packets[i].is_sent) {

printf("Sending packet %d\n", packets[i].sequence_number);

packets[i].is_sent = true;

for (int i = window_start; i <= window_end; i++) {

if (!packets[i].ack_received) {

if (rand() % 10 < 3) {

printf("Packet %d lost\n", packets[i].sequence_number);

continue;

printf("Received acknowledgement for packet %d\n", packets[i].sequence_number);


packets[i].ack_received = true;

if (packets[window_start].ack_received) {

window_start++;

window_end++;

printf("\nAll packets sent and acknowledged successfully.\n");

return 0;

IP FINDER
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int isValidIPv4(const char *ip) {

int num, dots = 0;

int i;

char *copy, *token;

if (ip == NULL || strlen(ip) > 15)

return 0;

copy = strdup(ip);

token = strtok(copy, ".");

if (token == NULL)

return 0;

while (token) {

if (strlen(token) > 3)

return 0;

for (i = 0; i < strlen(token); i++) {

if (token[i] < '0' || token[i] > '9')

return 0;
}

num = atoi(token);

if (num < 0 || num > 255)

return 0;

token = strtok(NULL, ".");

dots++;

free(copy);

return (dots == 4);

int isValidIPv6(const char *ip) {

int i, colons = 0;

int num, digits = 0;

if (ip == NULL || strlen(ip) > 39)

return 0;

for (i = 0; i < strlen(ip); i++) {

if ((ip[i] >= '0' && ip[i] <= '9') || (ip[i] >= 'a' && ip[i] <= 'f') || (ip[i] >= 'A' && ip[i] <= 'F') || ip[i]
== ':') {

if (ip[i] == ':') {

colons++;

digits = 0;

if (colons > 7)

return 0;

if (i > 0 && ip[i - 1] == ':') {

if (colons == 2)

return 0;

} else {

digits++;

if (digits > 4)

return 0;
}

} else {

return 0;

return (colons == 7 && digits > 0);

void printIPAddress(const char *ip) {

if (isValidIPv4(ip)) {

printf("Valid IPv4 address\n");

} else if (isValidIPv6(ip)) {

printf("Valid IPv6 address\n");

} else {

printf("Invalid IP address\n");

int main() {

char ipAddress[100];

printf("\nEnter IP Address");

scanf("%s", ipAddress);

printIPAddress(ipAddress);

return 0;

BIT ORIENTED

#include <stdio.h>
void sendBit(unsigned int bit) {
printf("Sent bit: %u\n", bit);
}

void receiveBit(unsigned int bit) {


printf("Received bit: %u\n", bit);
}
int main() {
unsigned int data;
printf("\nName - Soham Bandyopadhyay");
printf("\nReg : 21BCE2386");
printf("\nEnter the data to be transmitted: ");
scanf("%u", &data);
int significantBits = sizeof(data) * 8;
while ((data & (1 << (significantBits - 1))) == 0) {
significantBits--;
}
for (int i = 0; i < significantBits; i++) {
unsigned int bit = (data >> i) & 1;
sendBit(bit);
}
printf("\n");
printf("Enter the received bits: ");
for (int i = 0; i < significantBits; i++) {
unsigned int receivedBit;
scanf("%u", &receivedBit);
receiveBit(receivedBit);
}
return 0;
}
CHARACTER
#include <stdio.h>

#include <string.h>

void sendCharacter(char character)

printf("Sent character: %c\n", character);


}

char receiveCharacter()

char character;

scanf(" %c", &character);

return character;

int main()

printf("\nName : Soham Bandyopadhyay");

printf("\nReg : 21BCE2386");

char data[100];

printf("\nEnter the data to be transmitted: ");

fgets(data, sizeof(data), stdin);

data[strcspn(data, "\n")] = '\0';

for (int i = 0; i < strlen(data); i++)

sendCharacter(data[i]);

printf("\n");

printf("Enter the received characters:\n");

for (int i = 0; i < strlen(data); i++)

char receivedCharacter = receiveCharacter();

printf("Received character: %c\n", receivedCharacter);

return 0;

You might also like