Professional Documents
Culture Documents
NW Lab-1
NW Lab-1
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
pid_t pid;
pid = fork();
if (pid == 0)
printf("I am Child Process\n");
else
printf("I am Parent Process\n");
}
OUTPUT
OUTPUT
OUTPUT
input.txt
Computer Networks
sample.txt
Computer Networks
OUTPUT
OUTPUT
Client- Server Communication using Socket Programming and TCP as Transport
Layer
Server Program (tcpserver.c)
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
int main( int argc, char *argv[])
{
struct sockaddr_in server, cli;
int cli_len;
int sd, n, i, len;
int data, temp;
char buffer[100];
if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("Socket failed:");
exit(1);
}
// server socket address structure initialisation
bzero(&server, sizeof(server) );
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[1]));
server.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sd, (struct sockaddr*)&server, sizeof(server)) < 0)
{
perror("bind failed:");
exit(1);
}
listen(sd,5);
if((data = accept(sd , (struct sockaddr *) &cli, &cli_len)) < 0)
{
perror("accept failed:");
exit(1);
}
read(data,buffer, sizeof(buffer));
len = strlen(buffer);
for( i =0; i<= len/2; i++)
{
temp = buffer[i];
buffer[i] = buffer[len - 1-i];
buffer[len-1-i] = temp;
}
write (data,buffer, sizeof(buffer));
close(data);
close(sd);
}
OUTPUT
Server
Client
Client- Server Communication using Socket Programming and UDP as Transport
Layer
Server Program (udpserver.c)
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc, char * argv[])
{
int n;
int sock_fd;
int i,j,k;
int row_1, row_2, col_1, col_2;
struct sockaddr_in servaddr,
cliaddr;
int len = sizeof(cliaddr);
int matrix_1[10][10], matrix_2[10][10], matrix_product[10][10];
int size[2][2];
if(argc != 2)
{
fprintf(stderr, "Usage: ./server port\n");
exit(1);
}
if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
printf("Cannot create socket\n");
exit(1);
}
bzero((char*)&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(atoi(argv[1]));
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sock_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)
{
perror("bind failed:");
exit(1);
}
// MATRICES RECEIVE
if( n < 0)
{
perror("error in matrix 2 sending");
exit(1);}
printf("Waiting for response\n");
if((n=recvfrom(sock_fd, matrix_product, sizeof(matrix_product),0, NULL, NULL))
== -1)
{
perror("read error from server:");
exit(1);
}
printf("\n\nTHE PRODUCT OF MATRICES IS \n\n\n");
for( i=0; i < num_rows_1; i++)
{
for( j=0; j<num_cols_2; j++)
{
printf("%d ",matrix_product[i][j]);
}
printf("\n");
}
close(sock_fd);
}
OUTPUT
Server
Client
OUTPUT
Sliding Window Flow Control Protocol
Stop and Wait
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[])
{
srand(time(NULL));
int sspace = 3;
if(transmit_packet>=0)
{
if(rand()%sspace != 0)
{
//sender receives ack
printf("Sender received ACK with sequence %d.\n",
transmit_seq );
if(transmit_seq != sender_seq_bit)
{
// correct ack
sender_left-=1;
sender_packet += 1;
sender_seq_bit = 1 - sender_seq_bit;
}
}
else
{
//packet lost
printf("ACK lost.\n");
}
}
transmit_seq = -1;
transmit_packet = -1;
}
return 0;
}
OUTPUT
Go back N
#include<stdio.h>
#include<time.h>
#define fail_limit 3
int fr,win_siz,err_no;
int err[100];
int sh=1,st=1,rh=0,rt=1;
int fail_con=0,fail[100],f=0,ack_f=fail_limit;
void read_val();
void assign(int arr[]);
void send();
void recive();
void main(){
read_val();
// int sent[fr],rec[fr];
// assign(sent);
assign(fail);
printf("Sender,reciever and ack_fail\n");
while(sh<=fr){
send();
recive();
printf("\n");
}
}
void read_val(){
printf("Number of frames: ");
scanf("%d",&fr);
fr++;
printf("Window size: ");
scanf("%d",&win_siz);
printf("Number of errors: ");
scanf("%d",&err_no);
printf("Error numbers: ");
for(int i=0;i<err_no;i++)
scanf("%d",&err[i]);
}
void assign(int arr[]){
for(int i=0;i<fr;i++)
arr[i]=0;
}
void send(){
if(fail_con==1){
ack_f--;
}
if(ack_f<fail_limit && sh>=fr){
ack_f=0;
}
if(ack_f<=0){
printf("\nRetransmmiting %d\n\n",sh-fail_limit-1);
ack_f=fail_limit;
fail_con=0;
sh-=fail_limit;
st-=fail_limit;
}
for(int i=sh;i<fr && i<sh+win_siz;i++){
printf("%d ",i);
fflush(stdout);
}
printf("\t");
sh++;
}
void recive(){
if(fail_con==1){
for(int k=rh-1;k<rh+win_siz-1;k++){
printf("%d ",k);
}
printf("\t");
fail[f]=fail[f-1]+1;
f++;
for(int u=0;u<f;u++){
printf("%d ",fail[u]);
fflush(stdout);
}
return;
}
for(int i=rh;fr && i<=rt;i++){
for(int j=0;j<err_no;j++){
if(i==err[j]){
for(int k=rh-1;k<rh+win_siz-1;k++){
printf("%d ",k);
}
printf("\t");
fail_con=1;
fail[f++]=i;
printf("%d",i);
fflush(stdout);
err[j]=-1;
return;
}
}
}
if(rh==0){
rh++;
printf("\t");
return;
}
for(int i=rh;i<fr && i<=rt;i++){
printf("%d ",i);
fflush(stdout);
}
printf("\t");
if(1+rt-rh<win_siz){
rt++;
}
else{
rt++;
rh++;
}
}
OUTPUT
OUTPUT
Selective Repeat
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[])
{
srand(time(NULL));
int sspace = 6;
int seq_size = 4;
int sender_packets[] = {0, 1, 2, 3, 4, 5};
int total_size=6;
int sender_seq=0, receiver_seq=0;
int transmit_packet=0, transmit_seq=-1;
int sender_packet=0, sender_win_start=0;
int sender_start_seq=0;
int sender_pos=0;
while(sender_win_start < total_size)
{
//send packet
if((sender_pos-sender_win_start >= seq_size-1) ||
(sender_pos+sender_win_start >= total_size))
{
sender_pos=0;
sender_seq = sender_start_seq;
}
transmit_seq = sender_seq;
transmit_packet = sender_packets[sender_win_start+sender_pos];
printf("\n");
for(int i=0; i<seq_size-1; i++)
{
if(i+sender_win_start < total_size)
printf("%d ", sender_packets[i+sender_win_start]);
}
printf("\nSender sent packet %d with sequence %d.\n",transmit_packet,
transmit_seq);
sender_seq = (sender_seq+1)%seq_size;
sender_pos++;
if(rand()%sspace != 0)
{
//receive packet
printf("Receiver received %d with sequence %d.\n",transmit_packet,
transmit_seq );
if(transmit_seq != receiver_seq)
{
transmit_packet = 0;
transmit_seq = receiver_seq;
printf("Receiver discards packet.\n");
}
else
{
receiver_seq = (receiver_seq+1)%seq_size;
transmit_seq = receiver_seq;
transmit_packet = 0;
printf("Receiver sends ack with sequence %d\n", transmit_seq);
}
}
else
{
//packet lost
printf("Packet %d lost.\n", transmit_packet);
transmit_packet = -1;
transmit_seq = -1;
}
if(transmit_packet>=0)
{
if(rand()%sspace != 0)
{
//sender receives ack
printf("Sender received ACK with sequence %d.\n",
transmit_seq );
if(strcmp(code,"354") == 0)
{
printf("\nReady to send header data!\n\n");
}
else{
printf("\nError occured!\n\n");
}
//creating a mail header
char sub[150];
char content[450];
printf("\nEnter Subject : ");
scanf("%[^\n]",sub);
printf("\nEnter content : (Press Tab and Enter Key to end)\n");
scanf("%[^\t]",content);
bzero(buff,10240);
//Mail_header function declared above
strcpy(buff, Mail_Header(mail_from,mail_to,sub,content)); //assigning header to
buffer
n = write(socket_id,buff,strlen(buff));
if(n < 0)
{
printf("\nError occured while writing to socket!\n");
}
printf("\nCLIENT : ====| Mail header & content |====\n%s\n",buff); //header
content
bzero(buff,10240);
strcpy(buff,".\r\n");
n = write(socket_id,buff,strlen(buff));
if(n < 0)
{
printf("\nError occured while writing to socket!\n");
}
bzero(buff,10240);
n = read(socket_id,buff,10239);
if(n < 0)
{
printf("\nError occured while reading from socket!\n");
}
printf("SERVER : %s\n",buff); //250 OK
//checking error
code[0] = buff[0];
code[1] = buff[1];
code[2] = buff[2];
code[3] = '\0';
if(strcmp(code,"250") == 0)
{
printf("\nGo to next command...\n\n");
}
else{
printf("\nError occured!\n\n");
}
fflush(stdin);
}
else if(strcasecmp(cname,"ATTACHMENT") == 0){
bzero(buff,10240);
strcpy(buff,"Attachment");
strcat(buff,"\r\n");
n = write(socket_id,buff,strlen(buff));
if(n < 0)
{
printf("\nError occured while writing to socket!\n");
}
printf("\nCLIENT : %s",buff); //DATA
bzero(buff,10240);
n = read(socket_id,buff,10239);
if(n < 0)
{
printf("\nError occured while reading from socket!\n");
}
printf("SERVER : %s\n",buff); //420 send Attachment
code[0] = buff[0];
code[1] = buff[1];
code[2] = buff[2];
code[3] = '\0';
if(strcmp(code,"420") == 0)
{
printf("\nReady to send image!\n\n");
}
else{
printf("\nError occured!\n\n");
}
send_image(socket_id);
bzero(buff,10240);
n = read(socket_id,buff,10239);
if(n < 0)
{
printf("\nError occured while reading from socket!\n");
}
printf("SERVER : %s\n\n",buff);
}
else if(strcasecmp(cname,"QUIT") == 0)
{
bzero(buff,10240);
strcpy(buff,"QUIT");
strcat(buff,"\r\n");
n = write(socket_id,buff,strlen(buff));
if(n < 0)
{
printf("\nError occured while writing to socket!\n");
}
printf("\nCLIENT : %s",buff); //QUIT
bzero(buff,10240);
n = read(socket_id,buff,10239);
if(n < 0)
{
printf("\nError occured while reading from socket!\n");
}
printf("SERVER : %s\n",buff); //221 Bye
//checking error
code[0] = buff[0];
code[1] = buff[1];
code[2] = buff[2];
code[3] = '\0';
if(strcmp(code,"221") == 0)
{
printf("\nConnection closed successfully with SMTP Server!\n\n");
}
else{
printf("\nError occured!\n\n");
}
fflush(stdin);
}
else
{
strcpy(cname,"");
goto intake;
}
}while(strcmp(cname,"QUIT") != 0);
}
OUTPUT
Server
Client
File Transfer Protocol
Server Program (ftpsr.c)
#include <arpa/inet.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#define BUFSIZE 1024
#define PORT_ADDR 6000
#define QSIZE 5
void main()
{
struct sockaddr_in server_address, client_address;
int i, socket_descriptor_1, socket_descriptor_2, size_of_client_address, file_descriptor,
character_count;
char buffer_1[BUFSIZE], buffer_2[BUFSIZE], pid_str[10];
socket_descriptor_1 = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_port = htons(PORT_ADDR);
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
bind(socket_descriptor_1, (struct sockaddr *)&server_address, sizeof(server_address));
listen(socket_descriptor_1, QSIZE);
size_of_client_address = sizeof(client_address);
socket_descriptor_2 = accept(socket_descriptor_1, (struct sockaddr *)&client_address,
&size_of_client_address);
printf("\nRequest accepted.....\n");
close(socket_descriptor_1);
snprintf(pid_str, sizeof(pid_str), "%d", getpid());
character_count = read(socket_descriptor_2, buffer_1, BUFSIZE);
buffer_1[character_count] = '\0';
printf("\nFilename is %s", buffer_1);
if ((file_descriptor = open(buffer_1, O_RDONLY)) >= 0)
{
printf("\nFile opened.....");
character_count = read(file_descriptor, buffer_2, BUFSIZE);
while (character_count > 0)
{
printf("\nSending file.....");
write(socket_descriptor_2, buffer_2, character_count);
printf("\nPrinting content of file:\n");
for (i = 0; i < character_count; i++)
printf("%c", buffer_2[i]);
printf("\n");
if (i == character_count)
break;
}
}
else
{
printf("\nRequested file is not present....!!!\n");
write(socket_descriptor_2, "", 1); // Sending empty response to indicate file not found
}
close(file_descriptor);
write(socket_descriptor_2, pid_str, strlen(pid_str)); // Sending process ID to the client
close(socket_descriptor_2);
}
Client
Leaky Bucket Algorithm
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define NOF_PACKETS 10
int my_rand(int a) {
int rn = (rand() % 10) % a;
return rn == 0 ? 1 : rn;
}
int main() {
int packet_sz[NOF_PACKETS], i, clk, b_size, o_rate, p_sz_rm = 0, p_sz, p_time, op;
for (i = 0; i < NOF_PACKETS; ++i)
packet_sz[i] = my_rand(6) * 10;
for (i = 0; i < NOF_PACKETS; ++i)
printf("\npacket[%d]: %d bytes\t", i, packet_sz[i]);
printf("\nEnter the Output rate: ");
scanf("%d", &o_rate);
printf("Enter the Bucket Size: ");
scanf("%d", &b_size);
for (i = 0; i < NOF_PACKETS; ++i) {
if ((packet_sz[i] + p_sz_rm) > b_size) {
if (packet_sz[i] > b_size)
printf("\n\nIncoming packet size (%d bytes) is greater than bucket capacity (%d
bytes) - PACKET REJECTED", packet_sz[i], b_size);
else
printf("\n\nBucket capacity exceeded - PACKETS REJECTED!!");
} else {
p_sz_rm += packet_sz[i];
printf("\n\nIncoming Packet size: %d", packet_sz[i]);
printf("\nBytes remaining to transmit: %d", p_sz_rm);
p_time = my_rand(4) * 10;
printf("\nTime left for transmission: %d units", p_time);
for (clk = 10; clk <= p_time; clk += 10) {
sleep(1);
if (p_sz_rm) {
if (p_sz_rm <= o_rate)
op = p_sz_rm, p_sz_rm = 0;
else
op = o_rate, p_sz_rm -= o_rate;
printf("\nPacket of size %d transmitted", op);
printf(" ---- Bytes remaining to transmit: %d", p_sz_rm);
} else {
printf("\nTime left for transmission: %d units", p_time - clk);
printf("\nNo packets to transmit!!");
}
}
}}
return 0;
}
OUTPUT
UDP header has a length of 8bytes. The payload of the UDP datagram is therefore 705
bytes whose hexadecimal values are given in the trace.
OUTPUT