Professional Documents
Culture Documents
Distributed Systems: Practical File - IT-407
Distributed Systems: Practical File - IT-407
Anumeha Bansal
710/IT/10
Contents
1. To implement Scheduling Algorithms ...................................................................................................................3
First Come First Serve CPU Scheduling .............................................................................................................3
Shortest Job First CPU Scheduling ....................................................................................................................5
2. To implement Socket Programming .....................................................................................................................9
Implement TCP Client Server ............................................................................................................................9
Implement UDP Server-Client ........................................................................................................................12
Implement TCP Server in a loop .....................................................................................................................14
Implement Multicasting .................................................................................................................................16
3. Implement FTP Server and client ........................................................................................................................18
4. Implement Inter-Process Communication Techniques .......................................................................................22
Implement Producer Consumer Problem .......................................................................................................22
Implement a Synchronized Block ...................................................................................................................24
t=t+p[i].bt;
ar=ar+t-p[i].at;
}
printf("\nAverage waiting time: %f",awt/n);
printf("\nAverage turnaround time: %f",ar/n);
}
{
temp=p[i];
p[i]=p[i+1];
p[i+1]=temp;
}
}
}
int min;
min=p[1].at;
for(i=2;i<=n;i++)
{
if(p[i].at<min)
min=p[i].at;
}
t=min;
for(i=1;i<=5;i++)
{
for(j=1;j<=n;j++)
{
if(t<p[j].at)
continue;
printf("\nProcess %d is executing\t<start time=%d>\n",p[j].id,t);
awt=awt+t-p[j].at;
t=t+p[j].bt;
ta=ta+t-p[j].at;
for(m=j;m<n;m++)
p[m]=p[m+1];
n--;
j--;
}
min=p[1].at;
for(o=j;o<=n;o++)
{
if(p[o].at<min)
min=p[o].at;
}
if(t<min)
t=min;
}
printf("\nAverage waiting time is %f",awt/l);
printf("\nAverage turn-around time is %f",ta/l);
}
void sjfp()
{
int w,i,j,k,t,min,t1,x,y;
float awt=0,tr=0;
node temp;
int z=n;
int s=0,a,b,c;
min=p[1].at;
for(i=1;i<=n;i++)
{
if(p[i].at<min)
min=p[i].at;
}
//Sort according to Burst time
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
if(p[j].bt>p[j+1].bt)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
//Sorting ends
t=min;
for(i=1;i<=5;i++)
{
for(j=1;j<=n;j++)
{
if(t<p[j].at)
continue;
printf("\nProcess %d is executing <start time = %d >",p[j].id,t);
t1=t+p[j].bt;
for(k=1;k<=n;k++)
{
if(p[k].at>t && p[k].at<t1)
{
s++;
break;
}
}
a=t;
if(s==0)
{
awt=awt+t-p[j].at;
t=t1;
tr=tr+t-p[j].at;
for(b=j;b<n;b++)
p[b]=p[b+1];
n--;
j=j-1;
}
else
{
awt=awt+t-p[j].at;
t=p[k].at;
tr=tr+t-p[j].at;
p[j].bt=p[j].bt-(t-a);
p[j].at=t;
for(x=1;x<=n;x++)
{
for(y=1;y<=n-x;y++)
{
if(p[y].bt>p[y+1].bt)
{
temp=p[y];
p[y]=p[y+1];
p[y+1]=temp;
}
}
}
j=0;
}
s=0;
t1=0;
}
min=p[1].at;
for(w=1;w<=n;w++)
{
if(p[w].at<min)
min=p[w].at;
}
if(t<min)
t=min;
}
printf("\nAverage waiting time is given by:%f",awt/z);
printf("\nAverage turn around time is :%f",tr/z);
}
//client chat
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<string.h>
#define MAX_BUFFER_SIZE 100
int main()
{
int sockid,newsockid,numbytes;
char sendbuffer[MAX_BUFFER_SIZE+1];
char recvbuffer[MAX_BUFFER_SIZE+1];
int caddrsize;
struct sockaddr_in caddr;
sockid=socket(AF_INET, SOCK_STREAM, 0);
if(sockid==-1)
{
perror("socket");
}
printf("socketid: %d\n",sockid);
memset(&caddr,0,sizeof(caddr));
caddr.sin_family=AF_INET;
caddr.sin_port=htons(8554);
caddr.sin_addr.s_addr=inet_addr("127.0.0.1");
caddrsize=sizeof(caddr);
if(connect(sockid, (struct sockaddr *)&caddr, caddrsize)==-1)
{
perror("connect");
}
/*strcpy(buffer,"connection message");
if(send(sockid,(void *) buffer, strlen(buffer), MSG_DONTWAIT)<0)
{
perror("send");
}*/
while(1)
{
numbytes=recv(sockid, recvbuffer, MAX_BUFFER_SIZE,0);
recvbuffer[numbytes]='\0';
if(numbytes<0)
{
perror("recv");
}
printf("%s\n",recvbuffer);
if(strcmp(recvbuffer,"bye")==0)
{
close(sockid);
break;
}
//printf("send data: ");
gets(sendbuffer);
int bufsize= strlen(sendbuffer);
if(send(sockid,(void *) sendbuffer, bufsize, MSG_DONTWAIT)<0)
{
perror("send");
}
if(strcmp(sendbuffer,"bye")==0)
{
close(sockid);
break;
}
}
close(sockid);
return 0;
}
//Client UDP
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define BUFLEN 512
#define NPACK 10
#define PORT 9930
#define SRV_IP "999.999.999.999"
void diep(char *s)
{
perror(s);
exit(1);
}
int main(void)
{
struct sockaddr_in si_other;
int s, i, slen=sizeof(si_other);
char buf[BUFLEN];
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
diep("socket");
memset((char *) &si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(PORT);
if (inet_aton(SRV_IP, &si_other.sin_addr)==0) {
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
for (i=0; i<NPACK; i++) {
printf("Sending packet %d\n", i);
sprintf(buf, "This is packet %d\n", i);
if (sendto(s, buf, BUFLEN, 0, &si_other, slen)==-1)
diep("sendto()");
}
close(s);
return 0;
}
while(1)
{
numbytes=recv(newsockid, recvbuffer, MAX_BUFFER_SIZE,0);
recvbuffer[numbytes]='\0';
if(numbytes<0)
{
perror("recv");
}
printf("\n%s",recvbuffer);
if(strcmp(recvbuffer,"bye")==0)
{
close(newsockid);
break;
}
gets(sendbuffer);
int bufsize= strlen(sendbuffer);
if(send(newsockid,(void *) sendbuffer, bufsize, MSG_DONTWAIT)<0)
{
perror("send");
}
if(strcmp(sendbuffer,"bye")==0)
{
close(newsockid);
break;
}
}
}
close(newsockid);
}
return 0;
}
Implement Multicasting
/* sender.c -- multicasts "hello, world!" to a multicast group once a second */
#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>
/* 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>
}//End of if3
close(connected);
close(sock);
return 0;
}
/* CLIENT */
#include "allheaders.h"
#include <string.h>
int mystrcmp(char s1[],char s2[])
{
int len1,len2;
int i;
len1 = strlen(s1);
len2 = strlen(s2);
if(len1!=len2)
return 0;
for(i=0;i<len1;i++)
{
if(s1[i]!=s2[i])
return 0;
}
return 1;
}
int main()
{
struct sockaddr_in server;
int sock;
char buf[1024],file[1024];
char res[30];
int i,len,target,k;
char username[30] = "\0",password[30] = "\0";
if((sock = socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(4433);
server.sin_addr.s_addr = INADDR_ANY;
bzero(&(server.sin_zero),8);
len = sizeof(struct sockaddr_in);
if((connect(sock,(struct sockaddr*)&server,sizeof(server)))==-1)
{
perror("Connect");
exit(-1);
}
printf("\n Enter Username : ");
fgets(username,30,stdin);
fflush(stdin);
send(sock,username,strlen(username),0);
printf("\n Enter Password : ");
fgets(password,30,stdin);
send(sock,password,strlen(password),0);
if((i = recv(sock,res,1024,0))>0)
{
res[i] = '\0';
if(mystrcmp(res,"pass"))
{
printf("\n Request the file from the server : ");
fgets(file,1024,stdin);
send(sock,file,strlen(file),0);
}
else
{
printf("\n Sorry Try again");
exit(-1);
}
}
int get;
if((get = recv(sock,buf,1024,0))>0)
{
printf("\n The CONTENT OF FILE : ");
fputs(buf,stdout);
}
close(sock);
close(target);
return 0;
}
}
main()
{
pthread_t thread_a;
pthread_t thread_b;
sem_init(&mutex,0,1);
sem_init(&full,0,0);
sem_init(&empty,0,N);
pthread_create(&thread_a,NULL,producer,NULL);
pthread_create(&thread_b,NULL,consumer,NULL);
pthread_join(thread_a,NULL);
pthread_join(thread_b,NULL);
//return 0;
}