You are on page 1of 56

CN -LAB

PROGRAMS

CONTENTS:
1.SOCKET CREATION
2.BINDING THE SOCKET
3.LISTEN SYSTEM CALL
4.ACCEPT SYSTEM CALL
5.CLIENT/SERVER CHAT APPLICATION USING
TCP
6. TCP ECHO CLIENT/SERVER
7. CLIENT/SERVER CHAT APPLICATION USING
UDP
8. UDP ECHO CLIENT/SERVER
9.BIT STUFFING AND DE-BIT STUFFING
10.CYCLIC REDUNANCY CHECK
11.SELECTIVE REPEAT PROTOCOL
12.GO BACK-N PROTOCOL
13.STOP AND WAIT PROTOCOL
14.DNS PROTOCOL
15.BORDER GATEWAY PROTOCOL
16.OSPF PROTOCOL
17.DISTANCE VECTOR ROUTING
18.MULTICASTING
3

19.DATE AND TIME


20.REMOTE COMMAND EXECUTION
21.ARP PROTOCOL

EX:1-SOCKET CREATION
PROGRAM:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main()
{
int sockfd1,sockfd2;
sockfd1=socket(AF_INET,SOCK_STREAM,0);
sockfd2=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd1==-1)
{
printf("socket1 is not created");
}
else
{
printf("socket1 is created and socket1 file descriptor value is %d\n",sockfd1);
}
if(sockfd2==-1)
{
printf("socket2 is created");
}
else
{
printf("socket2 is created and socket2 file descriptor value is %d\n",sockfd2);
}
}

OUTPUT:
[cseb332@Insat5E ~]$ cc socket.c
[cseb332@Insat5E ~]$ ./a.out
socket1 is created and socket1 file descriptor value is 3
socket2 is created and socket2 file descriptor value is 4

EX 2:BINDING THE SOCKET:


PROGRAM:
#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>
5

#include<netinet/in.h>
#define PORTNO 5990
int main()
{
int sockfd,i=PORTNO;
struct sockaddr_in myaddr;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation error");
}
else
{
printf("socket is created\n");
}
//bzero(&myaddr,sizeof (myaddr));
myaddr.sin_family=AF_INET;
myaddr.sin_port=htons(PORTNO);
myaddr.sin_addr.s_addr=INADDR_ANY;
memset(&(myaddr.sin_zero),'\0',8);
if(bind(sockfd,(struct sockaddr *)&myaddr,sizeof(struct sockaddr))!=-1)
{
printf("socket is binded at point %d\n",i);
}
else
{
printf("binding error");
}
}

OUTPUT:
[cseb332@Insat5E ~]$ cc new.c
[cseb332@Insat5E ~]$ ./a.out
socket is created
socket is binded at point 5990

EX 3:LISTEN SYSTEM CALL


PROGRAM:
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
6

#define PORT 3690


#define BACKLOG 12
main()
{
int fd;
struct sockaddr_in server;
struct sockaddr_in client;
int sin_size;
int x;
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("socket error\n");
exit(-1);
}
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=INADDR_ANY;
bzero(&(server.sin_zero),8);
if(bind(fd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1)
{
printf("bind error \n");
exit(-1);
}
x=listen(fd,BACKLOG);
if(x==-1)
{
printf("listen error");
exit(-1);
}
else
{
printf("server is in listening mode\n");
}
close(fd);
}

OUTPUT:
[cseb332@Insat5E ~]$ cc listen.c
[cseb332@Insat5E ~]$ ./a.out
server is in listening mode

EX 4- ACCEPT SYSTEM CALL


PROGRAM:
#include<arpa/inet.h>
#include<sys/types.h>
7

#include<sys/socket.h>
#include<netinet/in.h>
#define PORT 4627
#define BACKLOG 8
main() {
int fd,fd2;
struct sockaddr_in server;
struct sockaddr_in client;
int sin_size;
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1) {
printf("socket() error\n");
//exit(-1);
}
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=INADDR_ANY;
bzero(&(server.sin_zero),8);
if(bind(fd,(struct sockaddr*)&server,sizeof(struct sockaddr))!=-1)
{
printf("bind()error\n");
//exit(-1);
}
else if(listen(fd,BACKLOG)!=-1)
{
printf("listen()error\n");
//exit(-1);
}
printf("server is in accept mode \n ");
//while(1)
//{
sin_size=sizeof( struct sockaddr);
if((fd2 = accept(fd,(struct sockaddr *)&client,&sin_size))!=-1){
printf("accept() error\n");
//exit(-1);
}
else
{
printf(" Server is in accept mode");
printf(" You got a connection from %s\n" , inet_ntoa(client.sin_addr));
//close(fd2);
}
//close(fd2);

OUTPUT:
[cseb332@Insat5E ~]$ cc accccept.c
[cseb332@Insat5E ~]$ ./a.out
bind()error
server is in accept mode
Server is in accept mode You got a connection from 20.146.186.0

EX 5:CLIENT/SERVER CHAT APPLICATION


USING TCP:
SERVER PROGRAM:
#include<stdio.h>
#include<netdb.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#define MAXDATASIZE 100
int main()
{
int sd,i=0,len,l,s,sdl,si;
struct sockaddr_in ser,cli;
char msg[50],rmsg[50];
char buf[MAXDATASIZE];
if((sd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("\n\t\t error in socket");
return 0;
}
bzero(&ser,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(2107);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sd,(struct sockaddr *) &ser,sizeof(ser))<0)
{
printf("\n\t\terror in bind");
return 0;
}
if(listen(sd,3)<0)
{
printf("\n\t\terrror in listen");
//return 0;
}
si=sizeof(cli);

if((sdl=accept(sd,(struct sockaddr*)&cli,&si))<0)
{
printf("\n\t\t errore in accept");
//return 0;
}
do
{
recv(sdl,&msg,50,0);
printf("\n\t client message received:%s\n",msg);
printf("\n\t enter the server string");
scanf("%s",buf);
send(sdl,buf,50,0);
//recv(sdl,&msg,50,0);
//printf("\n\t client message received:%s\n",msg);
}while(strcmp(buf,"exit")!=0);
close(sd);
}

CLIENT PROGRAM:
#include<stdio.h>
#include<netdb.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#define MAXDATASIZE 100
main()
{
int sd,i=0,len;
struct sockaddr_in ser;
char msg[50],rmsg[50];
char buf[MAXDATASIZE];
if((sd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("\n\terror in socket");
return 0;
}
bzero(&ser,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(2107);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(connect(sd,(struct sockaddr *) &ser,sizeof(ser))<0)
{
printf("\n\t error in connect");
10

//exit(-1);
}
do
{
printf("\n\t enter the string:\n");
scanf("%s",buf);
send(sd,buf,50,0);
recv(sd,rmsg,50,0);
printf("\n\t\t server message:%s",rmsg);
}while(strcmp(buf,"exit")!=0);
close(sd);
}

OUTPUT:
SERVER:
[cseb332@Insat5E ~]$ cc tcpser.c
[cseb332@Insat5E ~]$ ./a.out
client message received:hi
enter the server string:helllooo
client message received:gudmorn
enter the server string:yes,gudmrng
client message received:bye
enter the server string:bye
client message received:exit
enter the server string:exit

CLIENT:
[cseb332@Insat5E ~]$ ./a.out
enter the string:hi
server message:helllooo
enter the string:gudmorn
server message:yes,gudmrng
enter the string:bye
server message:bye
11

enter the string:exit


server message:exit

EX 6: TCP ECHO CLIENT/SERVER:


PROGRAM SERVER:
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#define MAXDATASIZE 100
int main()
{
int sd,i=0,len,l,s,sdl,si;
struct sockaddr_in ser,cli;
char msg[50],rmsg[50];
char buf[MAXDATASIZE];
if((sd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("\n\t\t error in socket");
return 0;
}
bzero(&ser,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(2449);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sd,(struct sockaddr *) &ser,sizeof(ser))<0)
{
printf("\n\t\terror in bind");
return 0;
}
if(listen(sd,3)<0)
{
printf("\n\t\terrror in listen");
//return 0;
}
si=sizeof(cli);
if((sdl=accept(sd,(struct sockaddr*)&cli,&si))<0)
{
printf("\n\t\t errore in accept");
//return 0;
}
do
12

{
recv(sdl,msg,50,0);
//printf("\n\t client message received:%s\n",msg);
//printf("\n\t enter the server string");
//scanf("%s",buf);
send(sdl,msg,50,0);
//recv(sdl,&msg,50,0);
//printf("\n\t client message received:%s\n",msg);
}while(strcmp(buf,"exit")!=0);
close(sd);
}

CLIENT PROGRAM:
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#define MAXDATASIZE 100
main()
{
int sd,i=0,len;
struct sockaddr_in ser;
char msg[50],rmsg[50];
char buf[MAXDATASIZE];
if((sd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("\n\terror in socket");
return 0;
}
bzero(&ser,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(2549);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(connect(sd,(struct sockaddr *) &ser,sizeof(ser))<0)
{
printf("\n\t error in connect");
//exit(-1);
}
do
{
printf("\n\t enter the string:\n");
scanf("%s",buf);
13

send(sd,buf,50,0);
recv(sd,rmsg,50,0);
printf("\n\t\t server message received from client before:%s",rmsg);
}while(strcmp(buf,"exit")!=0);
close(sd);
}

OUTPUT:
SERVER:
[cseb332@Insat5E ~]$ cc ssseeerrr.c
[cseb332@Insat5E ~]$ ./a.out
[cseb332@Insat5E ~]$

CLIENT:
[cseb332@Insat5E ~]$ cc cccllliii.c
[cseb332@Insat5E ~]$ ./a.out
enter the string:hi
server message received from client before:hi
enter the string:hello
server message received from client before:hello
enter the string:i'mfine
server message received from client before:i'm fine
enter the string:exit
server message received from client before:exit
[cseb332@Insat5E~]$

EX 7:CLIENT/SERVER CHAT APPLICATION


USING UDP:
SERVER PROGRAM:
#include<stdio.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
main()
{
14

struct sockaddr_in client,server;


int s,n;
char b1[100],b2[100];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(3874);
server.sin_addr.s_addr=htonl(INADDR_ANY);
bind(s,(struct sockaddr *)&server,sizeof(server));
printf("\nEcho Server ready,waiting for client....\n");
n=sizeof(client);
do
{
recvfrom(s,b1,sizeof(b1),0,(struct sockaddr *) &client,&n);
printf("\n client message received is%s",b1);
//if(!(strcmp(b1,"end")))
// break;
printf("\n enter the server string");
scanf("%s",b1);
sendto(s,b1,sizeof(b1),0,(struct sockaddr *) &client,n);
}while(strcmp(b1,"exit")!=0);
}

CLIENT PROGRAM:
#include<stdio.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
main()
{
struct sockaddr_in server,client;
int s,n;
char b1[100],b2[100];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(3874);
server.sin_addr.s_addr=htonl(INADDR_ANY);
printf("\nClient ready....\n");
n=sizeof(server);
do
{
15

printf("\nenter the string:");


scanf("%s",b2);
sendto(s,b2,sizeof(b2),0,(struct sockaddr *) &server,n);
//if(strcmp(b2,"end")==0)
// break;
recvfrom(s,b1,sizeof(b1),0,NULL,NULL);
printf("\nServer message received:%s",b1);
}while(strcmp(b1,"exit")!=0);
}

OUTPUT:
SERVER:
[cseb332@Insat5E ~]$ cc udpchatser.c
[cseb332@Insat5E ~]$ ./a.out
Echo Server ready,waiting for client....
client message received is:hello
enter the server string:hi
client message received is:exit
enter the server string:exit
[cseb332@Insat5E ~]$

CLIENT:
[cseb332@Insat5E ~]$ cc udpchatcliii.c
[cseb332@Insat5E ~]$ ./a.out
Client ready....
enter the string:hello
Server message received:hi
enter the string:exit
Server message received:exit
[cseb332@Insat5E ~]$

EX 8: UDP ECHO CLIENT/SERVER:


PROGRAM SERVER:
#include<stdio.h>
#include<string.h>
#include<sys/stat.h>
16

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
main()
{
struct sockaddr_in client,server;
int s,n;
char b1[100],b2[100];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(5620);
server.sin_addr.s_addr=htonl(INADDR_ANY);
bind(s,(struct sockaddr *)&server,sizeof(server));
printf("\nEcho Server ready,waiting for client....\n");
n=sizeof(client);
do
{
recvfrom(s,b1,sizeof(b1),0,(struct sockaddr *) &client,&n);
sendto(s,b1,sizeof(b1),0,(struct sockaddr *) &client,n);
}while(strcmp(b1,"end")!=0);
}

CLIENT PROGRAM:
#include<stdio.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
main()
{
struct sockaddr_in server,client;
int s,n;
char b1[100],b2[100];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(5620);
server.sin_addr.s_addr=htonl(INADDR_ANY);
printf("\nClient ready....\n");
n=sizeof(server);
do
{
17

printf("\nClient:");
gets(b2);
sendto(s,b2,sizeof(b2),0,(struct sockaddr *) &server,n);
recvfrom(s,b1,sizeof(b1),0,NULL,NULL);
printf("\nServer:%s",b1);
}while(strcmp(b2,end)!=0);
}

OUTPUT:
SERVER:
[cseb332@Insat5E ~]$ cc udpechoser.c
[cseb332@Insat5E ~]$ ./a.out
Echo Server ready,waiting for client....

CLIENT:
[cseb332@Insat5E ~]$ cc udpechocli.c
[cseb332@Insat5E ~]$ ./a.out
Client ready....
Client:hi
Server:hi
Client:hello
Server:hello
Client:fyn
Server:fyn
Client:end
Server:end
[cseb332@Insat5E ~]$

EX 9:BIT STUFFING AND DE-BIT STUFFING:


PROGRAM:
#include<stdio.h>
18

int main()
{
FILE *f1,*f2;
char c;
int count;
count=0;
f1=fopen("file1.dat","r");
f2=fopen("file2.dat","w");
while(!feof(f1))
{
c=fgetc(f1);
if(c=='1')
count++;
else
count=0;
if(count==5)
{
fputc(c,f2);
fputc('0',f2);
count=0;
}
else
fputc(c,f2);
}
fcloseall();
return 0;
}

OUTPUT:
[cseb332@Insat5E ~]$ cat>> file1.dat
1101111111110001111111100011111111
[cseb332@Insat5E ~]$ cc bitstuffing.c
[cseb332@Insat5E ~]$ ./a.out
[cseb332@Insat5E ~]$ cat file1.dat
1101111111110001111111100011111111
[cseb332@Insat5E ~]$ cat file2.dat
1101111101111000111110111000111110111

DE-BITSTUFFING:
PROGRAM:
#include<stdio.h>
int main()
{
19

FILE *f1,*f2;
char c;
int count;
count=0;
f1=fopen("file3.dat","w");
f2=fopen("file2.dat","r");
while(!feof(f2))
{
c=getc(f2);
if(c=='1')
count++;
else
count=0;
if(count==5)
{
fputc(c,f1);
c=fgetc(f2);
count=0;
}
else
fputc(c,f1);
}
fcloseall();
return 0;
}

OUTPUT:
[cseb332@Insat5E ~]$ cc debitstuffing.c
[cseb332@Insat5E ~]$ ./a.out
[cseb332@Insat5E ~]$ cat file2.dat
1101111101111000111110111000111110111
[cseb332@Insat5E ~]$ cat file3.dat
1101111111110001111111100011111111

EX:10- CYCLIC REDUNANCY CHECK:


PROGRAM:
#include<stdlib.h>
#include<stdio.h>
void main()
{
int i,j,n,g,a,arr[20],gen[20],b[20],q[20],s;
printf("Transmitter side:");
printf("\nEnter no. of data bits:");
20

scanf("%d",&n);
printf("Enter data:");
for(i=0;i< n;i++)
scanf("%d",&arr[i]);
printf("Enter size of generator:");
scanf("%d",&g);
do{
printf("Enter generator:");
for(j=0;j< g;j++)
scanf("%d",&gen[j]);
}
while(gen[0]!=1);
printf("\n\tThe generator matrix:");
for(j=0;j< g;j++)
printf("%d",gen[j]);
a=n+(g-1);
printf("\n\tThe appended matrix is:");
for(i=0;i< j;++i)
arr[n+i]=0;
for(i=0;i< a;++i)
printf("%d",arr[i]);
for(i=0;i< n;++i)
q[i]= arr[i];
for(i=0;i< n;++i)
{
if(arr[i]==0)
{
for(j=i;j< g+i;++j)
arr[j] = arr[j]^0;
}
else
{
arr[i] = arr[i]^gen[0];
arr[i+1]=arr[i+1]^gen[1];
arr[i+2]=arr[i+2]^gen[2];
arr[i+3]=arr[i+3]^gen[3];
}
}
printf("\n\tThe CRC is :");
for(i=n;i < a;++i)
printf("%d",arr[i]);
s=n+a;
for(i=n;i< s;i++)
q[i]=arr[i];
21

printf("\n");
for(i=0;i< a;i++)
printf("%d",q[i]);
}

OUTPUT:
[cseb332@Insat5E ~]$ cc crc4.c
[cseb332@Insat5E ~]$ ./a.out
Transmitter side:
Enter no. of data bits:8
Enter data:
1
0
1
0
1
0
1
0
Enter size of generator:4
Enter generator:
1
1
0
1
The generator matrix:1101
The appended matrix is:10101010000
The CRC is :110
10101010110
[cseb332@Insat5E ~]$ cc crc4.c
[cseb332@Insat5E ~]$ ./a.out
Transmitter side:
Enter no. of data bits:11
Enter data:
1
0
1
0
1
0
1
0
1
1
0
Enter size of generator:4
Enter generator:
22

1
1
0
1
The generator matrix:1101
The appended matrix is:10101010110000
The CRC is :000
10101010110000

EX:11- SELECTIVE REPEAT PROTOCOL:


SERVER PROGRAM:
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define SIZE 4
main()
{
int std, lfd, len, i, j, status, sport;
char str[20], frame[20], temp[20], ack[20];
struct sockaddr_in saddr, caddr;
printf("Enter the port address");
scanf("%d", &sport);
std = socket(AF_INET, SOCK_STREAM, 0);
if(std<0)
perror("Error");
bzero(&saddr, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
saddr.sin_port = htons(sport);
lfd = bind(std, (struct sockaddr *)&saddr, sizeof(saddr));
if(lfd)
perror("Bind Error");
listen(std, 5);
len = sizeof(&caddr);
lfd = accept(std, (struct sockaddr *)&caddr, &len);
printf("Enter the text:");
scanf("%s", str);i = 0;
while(i<strlen(str))
{
memset(frame, 0, 20);
strncpy(frame, str+i, SIZE);
printf("\nTransmitting frames:");
len = strlen(frame);
for(j=0; j<len; j++)
{
printf("%d", i+j);
23

sprintf(temp, "%d", i+j);


strcat(frame, temp);
}
write(lfd, frame, sizeof(frame));
read(lfd, ack, 20);
sscanf(ack, "%d", &status);
if(status == -1)
printf("\nTransmission successful");
else
{
printf("Received error in: %d", status);
printf("\nRetransmitting frame");
frame[0] = str[status];
frame[1] = '\0';write(lfd, frame, sizeof(frame));
}
i = i + SIZE;
}
write(lfd, "Exit", sizeof("Exit"));
printf("\nExitting!\n");
sleep(2);
close(lfd);
close(std);
}

CLIENT PROGRAM:
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
main()
{
int std, lfd, len, choice, cport;
char str[20], str1[20], err[20];
struct sockaddr_in saddr, caddr;
printf("Enter the port address:");
scanf("%d", &cport);
std = socket(AF_INET, SOCK_STREAM, 0);
if(std<0)
perror("Error");
bzero(&saddr, sizeof(saddr));
saddr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &saddr.sin_addr);
saddr.sin_port = htons(cport);
connect(std, (struct sockaddr *)&saddr, sizeof(saddr));
24

for(;;)
{
read(std, str, 20);
if(strcmp(str, "Exit") == 0)
{
printf("Exitting!\n");
break;
}
printf("Received: %s\nError?(1 - YES or 0 - NO): ", str);
scanf("%d", &choice);
if(choice == 0)write(std, "-1", sizeof("-1"));
else{printf("Enter the sequence no of the frame where error has occured");
scanf("%s", err);
write(std, err, sizeof(err));
read(std, str, 20);
printf("Received the transmitted frame: %s\n", str);
}
}
close(std);
}

OUTPUT:
SERVER SIDE:
[cseb332@Insat5E ~]$ cc selser.c
[cseb332@Insat5E ~]$ ./a.out
Enter the port address:4589
Enter the text:hello
Transmitting frames:0123
Received error in: 2
Retransmitting frame
Transmitting frames:4
Received error in: 0
Retransmitting frame
Exitting!

CLIENT SIDE:
[cseb332@Insat5E ~]$ cc selcli.c
[cseb332@Insat5E ~]$ ./a.out
Enter the port address:4589
Received: hell0123
Error?(1 - YES or 0 - NO): 1
Enter the sequence no of the frame where error has occurred:2
Received the transmitted frame: l
Received: o4
25

Error?(1 - YES or 0 - NO): 1


Enter the sequence no of the frame where error has occurred:0
Received the transmitted frame: h
Exitting!

EX:12-GO BACK N/SLIDING WINDOW


PROTOCOL:
SERVER PROGRAM:
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>
#define SIZE 4
int main()
{
int sfd,lfd,len,i,j,status;
char str[20],frame[20],temp[20],ack[20];
struct sockaddr_in saddr,caddr;
sfd=socket(AF_INET,SOCK_STREAM,0);
if(sfd<0)
perror("Error");
bzero(&saddr,sizeof(saddr));
saddr.sin_family=AF_INET;
saddr.sin_addr.s_addr=htonl(INADDR_ANY);
saddr.sin_port=htons(5465);
if(bind(sfd,(struct sockaddr*)&saddr,sizeof(saddr))<0)
perror("Bind Error");
listen(sfd,5);
len=sizeof(&caddr);
lfd=accept(sfd,(struct sockaddr*)&caddr,&len);
printf(" Enter the text : \n");
scanf("%s",str);
i=0;
while(i<strlen(str))
{
memset(frame,0,20);
strncpy(frame,str+i,SIZE);
printf(" Transmitting Frames. ");
len=strlen(frame);
for(j=0;j<len;j++)
{
printf("%d",i+j);
sprintf(temp,"%d",i+j);
strcat(frame,temp);
26

}
printf("\n");
write(lfd,frame,sizeof(frame));
read(lfd,ack,20);
sscanf(ack,"%d",&status);
if(status==-1)
printf(" Transmission is successful. \n");
else
{
printf(" Received error in %d \n\n",status);
printf("\n\n Retransmitting Frame. ");
for(j=0;;)
{
frame[j]=str[j+status];
printf("%d",j+status);
j++;
if((j+status)%4==0)
break;
}
printf("\n");
frame[j]='\0';
len=strlen(frame);
for(j=0;j<len;j++)
{
sprintf(temp,"%d",j+status);
strcat(frame,temp);
}
write(lfd,frame,sizeof(frame));
}
i+=SIZE;
}
write(lfd,"exit",sizeof("exit"));
printf("Exiting\n");
sleep(2);
close(lfd);
close(sfd);
}

CLIENT PROGRAM:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
{
int sfd,lfd,len,choice;
27

char str[20],str1[20],err[20];
if(sfd<0)
perror("FdError");
bzero(&saddr,sizeof(saddr));
saddr.sin_family=AF_INET;
saddr.sin_addr.s_addr=INADDR_ANY;
saddr.sin_port=htons(5465);
connect(sfd,(struct sockaddr*)&saddr,sizeof(saddr));
for(;;)
{
read(sfd,str,20);
if(!strcmp(str,"exit"))
{
printf("Exiting\n");
break;
}
printf("\n\nReceived%s\n\n1.Do u want to report an error(1-Yes 0-No)",str);
scanf("%d",&choice);
if(!choice)
write(sfd,"-1",sizeof("-1"));
else
{
printf("Enter the sequence no of the frame where error has occured\n");
scanf("%s",err);
write(sfd,err,sizeof(err));
read(sfd,str,20);
printf("\n\nReceived the re-transmitted frames%s\n\n",str);
}
}
}

OUTPUT:

SERVER OUTPUT:
[cseb332@Insat5E ~]$ cc goser.c
[cseb332@Insat5E ~]$ ./a.out
Enter the text :
Hellohai
Transmitting Frames. 0123
Received error in 1
Retransmitting Frame. 123
Transmitting Frames. 4567
Received error in 5
Retransmitting Frame. 567
28

Exiting!

CLIENT OUTPUT:
[cseb332@Insat5E ~]$ cc gocli.c
[cseb332@Insat5E ~]$ ./a.out
Receivedhell0123
1.Do u want to report an error(1-Yes 0-No):1
Enter the sequence no of the frame where error has occurred:
1
Received the re-transmitted frames:ell123
Received:ohai4567
1.Do u want to report an error(1-Yes 0-No):1
Enter the sequence no of the frame where error has occurred:
5
Received the re-transmitted frames:hai567
Exiting!

EX:13 STOP AND WAIT PROTOCOL:


SERVER PROGRAM:
#include "stdio.h"
#include "sys/types.h"
#include "netinet/in.h"
#include "string.h"
#include "sys/socket.h"
#include "stdlib.h"
#include "unistd.h"
main()
{
int sd,i,r,bi,nsd,port,frame,prev_frame=0,count=0;;
char ack[5],buff[30];
struct sockaddr_in ser,cli;
if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("\n Socket problem");
return 0;
}
printf("\n Socket created\n");
29

bzero((char*)&cli,sizeof(ser));
printf("ENTER PORT NO:\n");
scanf("%d",&port);
ser.sin_port=htons(port);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
bi=bind(sd,(struct sockaddr *)&ser,sizeof(ser));
if(bi==-1)
{
printf("\n bind error, port busy, plz change port in client and server");
return 0;
}
i=sizeof(cli);
listen(sd,5);
nsd = accept(sd,((struct sockaddr *)&cli),&i);
if(nsd==-1)
{
printf("\ncheck the description parameter\n");
return 0;
}
printf("\nConnection accepted.");
while(count<5)
{
ph:
printf("\nSending FRAME %d to the Receiver...\n",prev_frame);
snprintf(buff,sizeof(buff),"%d",prev_frame);
send(nsd,buff,30,0);
r = recv(nsd,ack,5,0);
if(strcmp(ack,"ack")==0 || strcmp(ack,"ACK")==0)
{ count++;
if(prev_frame==0) prev_frame=1;
else prev_frame = 0;
}
else if(strcmp(ack,"nak")==0 || strcmp(ack,"NAK")==0)
{
printf("\n NAK: So again sending the Previous frame...\n"); goto ph;
}
}
printf("\n Bye..");
send(nsd,"EOF",4,0);
close(sd);
close(nsd);
return 0;
}

CLIENT PROGRAM:
#include "stdio.h"
#include "sys/types.h"
30

#include "netinet/in.h"
#include "string.h"
#include "sys/socket.h"
#include "stdlib.h"
#include "unistd.h"
int sd,con,port,i;
char content[30],ack[3];
struct sockaddr_in cli;
if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("\n Socket problem");
return 0;
}
bzero((char*)&cli,sizeof(cli));
cli.sin_family = AF_INET;
printf("ENTER PORT NO");
scanf("%d",&port);
cli.sin_port=htons(port);
cli.sin_addr.s_addr=htonl(INADDR_ANY);
con=connect(sd,(struct sockaddr*)&cli,sizeof(cli));
if(con==-1)
{
printf("\n connection error");
return 0;
}
i=recv(sd,content,30,0);
while(strcmp(content,"EOF") != 0)
{
printf("Received from Sender: Frame %s \n",content);
ph:
printf("\n Acknowledgement(ACK/NAK) : ");
scanf("%s",ack);
if(!(strcmp(ack,"ack")==0 || strcmp(ack,"nak")==0 || strcmp(ack,"ACK")==0 || str
cmp(ack,"NAK")==0))
{
printf("\n Not a valid Acknowledgement..use ACK or NAK..\n ");
goto ph;
}
send(sd,ack,5,0);
i=recv(sd,content,30,0);
}
printf("\n\n Bye...");
close(sd);
return 0;
}

31

OUTPUT:
SERVER OUTPUT :
[cseb332@Insat5E ~]$ cc stopser.c
[cseb332@Insat5E ~]$ ./a.out
Socket created
ENTER PORT NO:
2679
Port Address is 2679
:
Connection accepted.
Sending FRAME 0 to the Receiver...
Sending FRAME 1 to the Receiver...
NAK: So again sending the Previous frame...
Sending FRAME 1 to the Receiver...
NAK: So again sending the Previous frame...
Sending FRAME 1 to the Receiver...
Sending FRAME 0 to the Receiver...
NAK: So again sending the Previous frame...
Sending FRAME 0 to the Receiver...
Sending FRAME 1 to the Receiver...
Sending FRAME 0 to the Receiver...
Bye..

CLIENT OUTPUT:
[cseb332@Insat5E ~]$ cc stopcli.c
[cseb332@Insat5E ~]$ ./a.out
ENTER PORT NO2679
Received from Sender: Frame 0
Acknowledgement(ACK/NAK) : ack
Received from Sender: Frame 1

32

Acknowledgement(ACK/NAK) : nak
Received from Sender: Frame 1
Acknowledgement(ACK/NAK) : nak
Received from Sender: Frame 1
Acknowledgement(ACK/NAK) : ack
Received from Sender: Frame 0
Acknowledgement(ACK/NAK) : nak
Received from Sender: Frame 0
Acknowledgement(ACK/NAK) : ack
Received from Sender: Frame 1
Acknowledgement(ACK/NAK) : ack
Received from Sender: Frame 0
Acknowledgement(ACK/NAK) : ack
Bye...

EX 14-DNS PROTOCOL:
SERVER PROGRAM:
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<string.h>
int main()
{
int nsd,sd,bi,port,i;
char a[10]="yahoo",b[10]="google",c[10]="rediff",e[10];
struct sockaddr_in ser,cli;
printf("Enter port no.:");
scanf("%d",&port);
if((sd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("error");
return 0;
}
printf("\nSocket Created\n");
bzero((char*)&ser,sizeof(ser));
printf("Port Address is %d",port);
33

ser.sin_family=AF_INET;
ser.sin_port=htons(port);
ser.sin_addr.s_addr=htons(INADDR_ANY);
bi=bind(sd,(struct sockaddr*)&ser,sizeof(ser));
if(bi==-1)
{
printf("\nERROR In bind");
return 0;
}
i=sizeof(cli);
listen(sd,5);
nsd=accept(sd,(struct sockaddr*)&cli,&i);
if(nsd==-1)
{
printf("Check parameter\n");
return 0;
}
printf("\nConnection accepted\n");
i=recv(nsd,e,10,0);
if(strcmp(e,a)==0)
printf("The IP address of yahoo is 127.0.0.1\n");
else if(strcmp(e,b)==0)
printf("The IP address of google is 127.0.0.2\n");
else if(strcmp(e,c)==0)
printf("\nThe IP address of rediff is 127.0.0.3\n");
close(sd);
close(nsd);
return 0;
}

CLIENT PROGRAM:
#include<stdio.h>
#include<netinet/in.h>
#include<string.h>
#include<sys/socket.h>
int main()
{
int sd,con,port,n;
char a[10]="yahoo",b[10]="google",c[10]="rediff",e[10];
struct sockaddr_in cli;
printf("Enter the port no. :\n");
scanf("%d",&port);
if((sd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("ERROR IN SOCKET");
return 0;
}
bzero((char *)&cli,sizeof(cli));
34

cli.sin_family=AF_INET;
cli.sin_port=htons(port);
cli.sin_addr.s_addr=htonl(INADDR_ANY);
con=connect(sd,(struct sockaddr*)&cli,sizeof(cli));
if(con==-1)
{
printf("ERROR IN CONNECT\n");
return 0;
}
printf("\nHost Name:\n");
printf("\n1.Yahoo\n2.Google\n3.Rediiff\n");
printf("select host:\n");
scanf("%d",&n);
if(n==1)
send(sd,a,10,0);
else if(n==2)
send(sd,b,10,0);
else if(n==3)
send(sd,c,10,0);
else
printf("Select from options:\n");
close(sd);
return 0;
}

SERVER OUTPUT:
[cseb332@Insat5E ~]$ cc dns.c
[cseb332@Insat5E ~]$ ./a.out
Enter port no.:4563
Socket Created
Port Address is 4563
Connection accepted
The IP address of google is 127.0.0.2

CLIENT OUTPUT:
[cseb332@Insat5E ~]$ cc dnscli.c
[cseb332@Insat5E ~]$ ./a.out
Enter the port no. :
4563
Host Name:
1.Yahoo
2.Google
3.Rediiff
35

select host:
2

EX:15-BORDER GATEWAY PROTOCOL:


PROGRAM:
#include<stdio.h>
#include<string.h>
struct node
{
int no;
char name[5],addr[20][30];
};
int main()
{
struct node a[10],b[10],c,d;
char sname[3][3],sname1[2][2];
int i,j,k,n,num,m=0,g=0,count=0;
printf("Enter the number of autonomus systems\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter the name of autonomus system\n");
scanf("%s",&a[i].name);
printf("Enter number of IP address in system\n");
scanf("%d",&a[i].no);
j=a[i].no;
printf("enter the address");
for(k=0;k<j;k++)
scanf("%s",&a[i].addr[k]);
}
printf("Enter the number of servers");
scanf("%d",&num);
printf("enter the name\n");
for(i=0;i<num;i++)
#include<stdio.h>
#include<string.h>
struct node
{
int no;
char name[5],addr[20][30];
};
int main()
{
struct node a[10],b[10],c,d;
char sname[3][3],sname1[2][2];
36

int i,j,k,n,num,m=0,g=0,count=0;
printf("Enter the number of autonomus systems\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter the name of autonomus system\n");
scanf("%s",&a[i].name);
printf("Enter number of IP address in system\n");
scanf("%d",&a[i].no);
j=a[i].no;
printf("enter the address");
for(k=0;k<j;k++)
scanf("%s",&a[i].addr[k]);
}
printf("Enter the number of servers");
scanf("%d",&num);
printf("enter the name\n");
for(i=0;i<num;i++)
scanf("%s",sname[i]);
for(i=0;i<n;i++)
{printf("Who is server of%s\n",a[i].name);
scanf("%s",&sname1[i]);
}k=0;
for(j=0;j<num;j++)
{if(strcmp(sname[j],sname1[k])==0)
{for(m=0;m<a[j].no;m++)
{strcpy(c.addr[g],a[j].addr[m]);
k++;g++;
}}
else
{for(m=0;m<a[j].no;m++)
{strcpy(d.addr[g],a[j].addr[m]);
g++; }}}
printf("the addr known by the main server are\n");
printf("%d\n",g);
for(i=0;i<g;i++)
{
printf("%s",c.addr[i]);
printf("\n");
}}

OUTPUT:
[cseb332@Insat5E ~]$ cc bgp.c
[cseb332@Insat5E ~]$ ./a.out
Enter the number of autonomus systems
1
Enter the name of autonomus system
37

AS1
Enter number of IP address in system
4
enter the address
180.100.102.5
180.100.102.4
180.100.102.3
180.100.102.1
Enter the number of servers1
enter the name
BGP SERVER
Who is server ofAS1
the addr known by the main server are
4

EX:16- OSPF PROTOCOL


PROGRAM:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAX 30
#define UNVISITED -1
#define INFINITY 32767
#define VISITED 1
typedef struct
{
int previous,len,status;
}node;
int searchpath(int src,int des,int pathmath[MAX],int *minlen);
void viewadjmat();
void viewpathmat(int pm[MAX],int n,int len);
int adjmat[MAX][MAX],n;
int main(int argc,char **argv)
{
char ch,s,d;
int i,src,des,j,minlen,tot,pathmat[MAX];
FILE *f1;
printf("\nEnter the no of vertices of weighted graph:");
scanf("%d",&n);
if((f1=fopen("path1.txt","r"))==NULL)
{
fprintf(stderr,"cannot open input file\n");
return;
}
for(i=1;i<=n;i++)
38

for(j=1;j<=n;j++)
fscanf(f1,"%d",&adjmat[i][j]);
fclose(f1);
printf("\nThe adjacency matrix is\n\n");
viewadjmat();
while(1)
{
scanf("%c",&s);
printf("\nEnter the source code\n");
fflush(stdin);
scanf("%c",&s);
scanf("%c",&d);
printf("\n\nEnter the destination code\n");
fflush(stdin);
scanf("%c",&d);
printf("%c %c",s,d);
src=toupper(s)-64;
des=toupper(d)-64;
tot=searchpath(src,des,pathmat,&minlen);
printf("%d",tot);
viewpathmat(pathmat,tot,minlen);
printf("\nDo U want to continue(Y/N)");
scanf("%c",ch);
if(ch!='Y' && ch!='y')
break;
}
}
void viewpathmat(int pm[MAX],int n,int len)
{
int k;
if(len!=0)
{
printf("\nminlen is:%d\n\n shortest path is:",len);
for(k=n;k>1;k--)
printf("%c->",pm[k]+64);
printf("%c\n",pm[k]+64);
printf("Distance is :
");
for(k=n;k>1;k--)
printf("%d ",adjmat[pm[k]][pm[k-1]]);
}
else
printf("\n no path from source to destination node\n");
}
void viewadjmat()
{
int i,j;
printf("\n\t");
for(i=1;i<=n;i++)
printf("%4c",i+64);
printf("\n\n");
39

for(i=1;i<=n;i++,printf("\n\n"))
for(j=1;j<=n;j++)
{
if (j == 1)
printf("%4c",i+64);
printf("%4d",adjmat[i][j]);
}
}
int searchpath(int src,int des,int pathmath[MAX],int *minlen)
{
node graph[MAX];
int i,k,min,tot=0,curvertex,newlen,v,u;
*minlen=0;
for(i=1;i<=n;i++)
{
graph[i].previous=0;
graph[i].len=INFINITY;
graph[i].status=UNVISITED;
// curvertex=src;
}
graph[src].previous=0;
graph[src].len=0;
graph[src].status=VISITED;
curvertex=src;
while(curvertex!=des)
{
for(k=1;k<=n;k++)
{
if(adjmat[curvertex][k]>0&&graph[k].status == UNVISITED)
{
newlen=graph[curvertex].len+adjmat[curvertex][k];
if(newlen<graph[k].len)
{
graph[k].previous=curvertex;
graph[k].len=newlen;
}
}
}
min=INFINITY;
curvertex=0;
for(i=1;i<=n;i++)
if(graph[i].status==UNVISITED && graph[i].len<min)
{
min=graph[i].len;
curvertex=i;
}
if(curvertex==0)
return 0;
graph[curvertex].status=VISITED;
}
40

while(curvertex!=0)
{
pathmath[++tot]=curvertex;
curvertex=graph[curvertex].previous;
}
for(i=tot;i>1;i--)
{
u=pathmath[i];
v=pathmath[i-1];
*minlen=*minlen+adjmat[u][v];
}
return tot;
}

OUTPUT:
INPUT FILE:
[cseb332@Insat5E ~]$ cat >> path.txt
0110
1011
1100
0100
[cseb332@Insat5E ~]$ cc ospf.c
[cseb332@Insat5E ~]$ ./a.out ospf.c
Enter the no of vertices of weighted graph:4
The adjacency matrix is
A B C D
A 0 1 1 0
B 1 0 1 1
C 1 1 0 0
D 0 1 0 0
Enter the source code
A

41

Enter the destination code


D
A D3
minlen is:2
shortest path is:A->B->D
Distance is :
1 1
Do U want to continue(Y/N):N

EX:17- DISTANCE VECTOR ROUTING:


PROGRAM:
#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++;
42

}
}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("\t\nnode %d via %d Distance%d",j+1,rt[i].from[j]+1,rt[i].dist[j]);
}
}
printf("\n\n");
}

OUTPUT:
[cseb332@Insat5E ~]$ cc dst.c
[cseb332@Insat5E ~]$ ./a.out
Enter the number of nodes : 4
Enter the cost matrix :
0 3 5 99
3 0 99 1
5402
99 1 2 0
State value for router 1 is
node 1 via 1 Distance0
node 2 via 2 Distance3
node 3 via 3 Distance5
node 4 via 2 Distance4
State value for router 2 is
node 1 via 1 Distance3
node 2 via 2 Distance0
node 3 via 4 Distance3
node 4 via 4 Distance1
State value for router 3 is
node 1 via 1 Distance5
node 2 via 4 Distance3
node 3 via 3 Distance0
43

node 4 via 4 Distance2


State value for router 4 is
node 1 via 2 Distance4
node 2 via 2 Distance1
node 3 via 3 Distance2
node 4 via 4 Distance0

EX:18 MULTICASTING PROTOCOL


SERVER PROGRAM:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#define HELLO_PORT 12345
#define HELLO_GROUP "225.0.0.37"
main(int argc, char *argv[])
{
struct sockaddr_in addr;
int fd, cnt;
struct ip_mreq mreq;
char *message="Hai";
/* create what looks like an ordinary UDP socket */
if ((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) {
perror("socket");
exit(1);
}
/* set up destination address */
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr(HELLO_GROUP);
addr.sin_port=htons(HELLO_PORT);
/* now just sendto() our destination! */
44

while (1) {
if (sendto(fd,message,sizeof(message),0,(struct sockaddr *) &addr,
sizeof(addr)) < 0) {
perror("sendto");
exit(1);
}
sleep(1);
}
}

LISTENER PROGRAM:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#define HELLO_PORT 12345
#define HELLO_GROUP "225.0.0.37"
#define MSGBUFSIZE 256
main(int argc, char *argv[])
{
struct sockaddr_in addr;
int fd, nbytes,addrlen;
struct ip_mreq mreq;
char msgbuf[MSGBUFSIZE];
u_int yes=1; /*** MODIFICATION TO ORIGINAL */
/* create what looks like an ordinary UDP socket */
if ((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
perror("socket");
exit(1);
}
/**** MODIFICATION TO ORIGINAL */
/* allow multiple sockets to use the same PORT number */
if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {
perror("Reusing ADDR failed");
exit(1);
}
/*** END OF MODIFICATION TO ORIGINAL */
/* set up destination address */
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY); /* N.B.: differs from sender */
addr.sin_port=htons(HELLO_PORT);
/* bind to receive address */
if (bind(fd,(struct sockaddr *) &addr,sizeof(addr)) < 0) {
45

perror("bind");
exit(1);
}
/* use setsockopt() to request that the kernel join a multicast group */
mreq.imr_multiaddr.s_addr=inet_addr(HELLO_GROUP);
mreq.imr_interface.s_addr=htonl(INADDR_ANY);
if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {
perror("setsockopt");
exit(1);
}
/* now just enter a read-print loop */
while (1) {
addrlen=sizeof(addr);
if ((nbytes=recvfrom(fd,msgbuf,MSGBUFSIZE,0,
(struct sockaddr *) &addr,&addrlen)) < 0) {
perror("recvfrom");
exit(1);
}
puts(msgbuf);
}
}

OUTPUT:
SERVER OUTPUT:
[cseb332@Insat5E ~]$ cc mulser.c
[cseb332@Insat5E ~]$ ./a.out

CLIENT1 OUTPUT:
[cseb332@Insat5E ~]$ cc mullis.c
[cseb332@Insat5E ~]$ ./a.out
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
46

Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
[3]+ Stopped

./a.out

CLIENT2 OUTPUT:
[cseb332@Insat5E ~]$ cc mullis.c
[cseb332@Insat5E ~]$ ./a.out
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
[3]+ Stopped

./a.out
47

CLIENT3 OUTPUT:
[cseb332@Insat5E ~]$ cc mullis.c
[cseb332@Insat5E ~]$ ./a.out
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
Hai
[3]+ Stopped

./a.out

EX:19- DATE AND TIME


SERVER PROGRAM:
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<string.h>
#include<time.h>
48

main()
{
int sd,sd2,nsd,clilen,sport,len;
char sendmsg[20],rcvmsg[20];
time_t t; struct sockaddr_in servaddr,cliaddr;
printf("Enter the Port no\n");
scanf("%d",&sport);
sd=socket(AF_INET,SOCK_STREAM,0);
time(&t);
strcpy(sendmsg,ctime(&t));
printf("%s",sendmsg);
if(sd<0)
printf("Can't Create \n");
else
printf("Socket is Created\n");
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(sport);
sd2=bind(sd,(struct sockaddr*)&servaddr,sizeof(servaddr));
if(sd2<0)
printf(" Can't Bind\n");
else printf("\n Binded \n");
listen(sd,5);
clilen=sizeof(cliaddr);
nsd=accept(sd,(struct sockaddr*)&cliaddr,&clilen);
if(nsd<0)
printf("Can't Accept\n");
else
printf("Accepted\n");
send(nsd,sendmsg,100,0);
}

CLIENT PROGRAM:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
main()
{
int csd,cport,len;
char revmsg[100];
struct sockaddr_in servaddr;
printf("Enter the port\n");
scanf("%d",&cport);
csd=socket(AF_INET,SOCK_STREAM,0);
if(csd<0)
49

printf("Can't Create\n");
else
printf("Socket is Created\n");
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(cport);
if(connect(csd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
printf("Connection error\n");
recv(csd,revmsg,100,0);
printf("%s\n",revmsg);
}

OUTPUT:
SERVER OUTPUT:
[cseb332@Insat5E ~]$ cc dateser.c
[cseb332@Insat5E ~]$ ./a.out
Enter the Port no
1268
Sat Oct 20 16:33:59 2012
Socket is Created
Binded
Accepted
[cseb332@Insat5E ~]$

CLIENT OUTPUT:
[cseb332@Insat5E ~]$ cc datecli.c
[cseb332@Insat5E ~]$ ./a.out
Enter the port
1268
Socket is Created
Sat Oct 20 16:33:59 2012

EX 20- REMOTE COMMAND EXECUTION:


SERVER PROGRAM:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<netinet/in.h>
50

#include<string.h>
#include<sys/socket.h>
int main()
{
int sd,nsd,i=0,port=3468;
char content[80]="\0";
struct sockaddr_in ser,cli;
if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("\nError in socket creation");
return 0;
}
bzero((char*)&ser,sizeof(ser));
printf("\nThe port address is %d\n",port);
ser.sin_family=AF_INET;
ser.sin_port=htons(port);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sd,(struct sockaddr*)&ser,sizeof(ser))==-1)
{
printf("\nError Binding problem");
return 0;
}
i=sizeof(cli);
listen(sd,1);
printf("\nServer Module\n");
nsd=accept(sd,(struct sockaddr*)&cli,&i);
if(nsd==-1)
{
printf("\nError:Client Accepted Problem");
return 0;
}
printf("\nClient Accepted");
i=0;
while(1)
{
printf("[The Command #]");
recv(nsd,&content,80,0);
printf("%s\n",content);
if(!strcmp(content,"exit"))
{
printf("client & server exited\n");
return 0;
}
system(content);
}
close(sd);
close(nsd);
return 0;
}

51

CLIENT PROGRAM:
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
int main()
{
int sd,i=0,port=3468;
char content[80]="\0";
struct sockaddr_in ser;
if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("socket creation problem\n");
return 0;
}
bzero((char *)&ser,sizeof(ser));
printf("\nPort address is %d",port);
ser.sin_family=AF_INET;
ser.sin_port=htons(port);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(connect(sd,(struct sockaddr *)&ser,sizeof(ser))==-1)
{
printf("Connecting problem");
return 0;
}
printf("\nClient module\n");
printf("************\n");
while(1)
{
while(i<79)
{
scanf("%c",&content[i]);
if(content[i++]=='\n')
break;
}
if(i!=79)
i--;
content[i]='\0';
i=0;
send(sd,content,80,0);
if(!strcmp(content,"exit"))
{
printf("EXIT_U can't execute in server\n");
break;
}
}
close(sd);
52

return 0;
}

OUTPUT:
SERVER:
[cseb332@Insat5E ~]$ cc rceser.c
[cseb332@Insat5E ~]$ ./a.out
The port address is 3468
Server Module
Client Accepted[The Command #]
[The Command #]
[The Command #]ls
\
distvect.c
msg_server
serrr.c
accccept.c
dns.c
msg_server.c server.c
accept.c
dnscli.c
msg_svc.c
simpclient.c
acceptt.c
dnsser.c
msg.x
simp.h
a.out
dst.c
mul.c
simpservice.c
arp.c
dup.c
mullis.c
simpservice.cwq
arpcli.c
eof.c
mulser.c
simp.x
arpp.c
ex1.c
multicli
slidecli.c
arppp.c
fifo
multicli.c
slideser.c
arpser.c
file1.dat
multiser
slidewindowcli.c
bgp.c
file2.dat
multiser.c
slidewindowser.c
binding.c
file3.dat
namedpipe.c
slidingwindow.c
bitstuffing.c fname
new.c
slidiser.c

CLIENT:
[cseb332@Insat5E ~]$ cc rcecli.c
[cseb332@Insat5E ~]$ ./a.out
Port address is 3468
Client module
************
ls

53

EX: 21-ARP PROTOCOL:


PROGRAM:
#include<string.h>
#include<sys/types.h>
#include<fcntl.h>
#include<netinet/in.h>
#include<stdio.h>
main()
{
int sd,len=0,sz,i,k=0,port1,port2,port3;
struct sockaddr_in s1,s2,s3;
char str[30]="",string[30]="",addr[30]="",status[10]="";
char ip[10][20]={"127.0.0.1","127.0.0.2","127.0.0.3","127.0.0.4",
"127.0.0.5","127.0.0.6","127.0.0.7","127.0.0.8",
"127.0.0.9","127.0.0.10"};
char eth[10][20]={"12.32.45.0.0.1","12.32.45.0.0.2","12.32.45.0.0
"12.32.45.0.0.4","12.32.45.0.0.5","12.32.45.0.0.6",
"12.32.45.0.0.7","12.32.45.0.0.8","12.32.45.0.0.9",
"12.32.45.0.0.10"};
sd = socket(AF_INET,SOCK_DGRAM,0);
printf("First Port\n");
scanf("%d",&port1);
s1.sin_port=htons(port1);
s1.sin_family=s2.sin_family=s3.sin_family=AF_INET;
s1.sin_addr.s_addr=inet_addr("180.100.102.5");
s2.sin_addr.s_addr=s3.sin_addr.s_addr=inet_addr("180.100.102.5");
printf("Second Port\n");
scanf("%d",&port2);
s2.sin_port=htons(port2);
printf("Third Port\n");
scanf("%d",&port3);
s3.sin_port=htons(port3);
if(bind(sd,(struct sockaddr *)&s1,sizeof(s1))<0)
{
printf("Bind Error");
return(0);
}
sz=sizeof(s2);
if(fork()==0)
while(1)
{
fcntl(sd,F_SETFL,O_NONBLOCK);
recvfrom(sd,&str,30,0,(struct sockaddr *)&s2,&sz);
if(strcmp(str,"\0"))
54

{
k=2;
goto s;
}
sz=sizeof(s3);
recvfrom(sd,&str,30,0,(struct sockaddr *)&s3,&sz);
k=3;
s: if(strcmp(str,"\0"))
{
printf("%s\n",str);
for(i=0;i<10;i++)
{
if(!strcmp(str,ip[i]))
{
strcpy(string,"Reply from system 1 ");
strcat(string,eth[i]);
if(k==2)
sendto(sd,&string,30,0,(struct sockaddr *)&s2,sizeof(s2));
else
sendto(sd,&string,30,0,(struct sockaddr *)&s3,sizeof(s3));
break;
}
if(!strcmp(str,eth[i]))
{
strcpy(string,"Reply from system 1 ");
strcat(string,ip[i]);
if(k==2)
sendto(sd,&string,30,0,(struct sockaddr *)&s2,sizeof(s2));
break;
}
}
}
strcpy(str,"\0");
k=0;
}
else
while(1)
{
int flg=0;
scanf("%s",str);
for(i=0;i<10;i++)
{
if(!strcmp(str,ip[i]))
{
printf("Records found \n");
printf("Ethernet Address : %s\n",et
flg=1;
}
if(!strcmp(str,eth[i]))
{
55

printf("Records found \n");


printf("IP Address : %s\n",ip[i]);
flg=1;
}
}
if(flg)
continue;
sendto(sd,&str,30,0,(struct sockaddr *)&s2,sizeof(s2));
sendto(sd,&str,30,0,(struct sockaddr *)&s3,sizeof(s3));
}
close(sd);
}

OUTPUT:
[cseb309@Insat5E ~]$ cc arp.c
[cseb309@Insat5E ~]$ ./a.out
First Port
8888
Second Port
6666
Third Port
5555
127.0.0.5
Records found
Ethernet Address : 12.32.45.0.0.5
12.32.45.0.0.6
Records found
IP Address : 127.0.0.6

56

You might also like