Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Name : Mani Madhukar

Roll No : 120CS0176

LAB – 5

Q.1 Runthe program given in UDP_Socket document (Example6.1,6.2,6.3 and 6.4)

//client
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()

{
int sid;
char c;
struct sockaddr_in server_address;
int server_addlen;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7890;
server_address.sin_port = 7890;
server_addlen = sizeof(server_address);

sid = socket(AF_INET, SOCK_DGRAM, 0);

sendto(sid, "A", 1, 0, (struct sockaddr *)&server_address, server_addlen);


recvfrom(sid, &c, 1, 0, (struct sockaddr *)&server_address, &server_addlen);
printf("character from server is %c ", c);
return (0);
}

//server
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()

{
int sid;
char c;
struct sockaddr_in server_address, client_address;
int server_addlen, cli_addlen;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7890;

server_addlen = sizeof(server_address);
cli_addlen = sizeof(client_address);

sid = socket(AF_INET, SOCK_DGRAM, 0);


bind(sid, (struct sockaddr *)&server_address, server_addlen);

while (1)
{
printf("Ready to recv datagram \n");
recvfrom(sid, &c, 1, 0, (struct sockaddr *)&client_address, &cli_addlen);

sendto(sid, &c, 1, 0, (struct sockaddr *)&client_address, cli_addlen);


}

return (0);
}

Q.2 Execute a client/server program using UDP service for adding a two integer numbers
requested by the client and evaluated at server and get back result at the client .

//client
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()

{
int sid;
int a,b,sum;
scanf("%d %d",&a,&b);
struct sockaddr_in server_address;
int server_addlen;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7890;
server_address.sin_port = 7890;
server_addlen = sizeof(server_address);

sid = socket(AF_INET, SOCK_DGRAM, 0);

sendto(sid, &a, sizeof(a), 0, (struct sockaddr *)&server_address, server_addlen);


sendto(sid, &b, sizeof(b), 0, (struct sockaddr *)&server_address, server_addlen);
recvfrom(sid, &sum, sizeof(sum), 0, (struct sockaddr *)&server_address, &server_addlen);
printf("character from server is %d", sum);
return (0);
}

//server
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()

{
int sid;
int a,b,sum;
struct sockaddr_in server_address, client_address;
int server_addlen, cli_addlen;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7890;

server_addlen = sizeof(server_address);
cli_addlen = sizeof(client_address);

sid = socket(AF_INET, SOCK_DGRAM, 0);


bind(sid, (struct sockaddr *)&server_address, server_addlen);

while (1)
{
printf("Ready to recv datagram \n");
recvfrom(sid, &a, sizeof(a), 0, (struct sockaddr *)&client_address, &cli_addlen);
recvfrom(sid, &b, sizeof(b), 0, (struct sockaddr *)&client_address, &cli_addlen);
sum=a+b;
sendto(sid, &sum, sizeof(sum), 0, (struct sockaddr *)&client_address, cli_addlen);
}

return (0);
}
Q.3 Execute a client/server program for simple calculator having following operations addition,
subtraction, multiplication, division, and detecting prime numbers. Input entered at the client
side and evaluated at server machine and get back result at the client machine.Try this
question for both TCP and UDP socket programming.

//client
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()

{
int sid;
int a,b,res,op;
struct sockaddr_in server_address;
int server_addlen;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7890;
server_address.sin_port = 7890;
server_addlen = sizeof(server_address);

sid = socket(AF_INET, SOCK_DGRAM, 0);


while(1)
{
printf("enter 1 for addtion\n");
printf("enter 2 for subtraction\n");
printf("enter 3 for multiplication\n");
printf("enter 4 for division\n");
printf("enter 5 for prime check\n");
printf("enter 6 for terminate operation\n");
scanf("%d",&op);
if(op==6)
break;
else if(op!=5)
{
scanf("%d%d",&a,&b);
sendto(sid, &op, sizeof(op), 0, (struct sockaddr *)&server_address, server_addlen);
sendto(sid, &a, sizeof(a), 0, (struct sockaddr *)&server_address, server_addlen);
sendto(sid, &b, sizeof(b), 0, (struct sockaddr *)&server_address, server_addlen);
recvfrom(sid, &res, sizeof(res), 0, (struct sockaddr *)&server_address, &server_addlen);
printf("character from server is %d\n", res);
}
else if(op==5)
{
scanf("%d",&a);
sendto(sid, &op, sizeof(op), 0, (struct sockaddr *)&server_address, server_addlen);
sendto(sid, &a, sizeof(a), 0, (struct sockaddr *)&server_address, server_addlen);
//sendto(sid, &b, sizeof(b), 0, (struct sockaddr *)&server_address, server_addlen);
recvfrom(sid, &res, sizeof(res), 0, (struct sockaddr *)&server_address, &server_addlen);
if(res==1)
printf("Prime\n");
else if(res==0)
printf("not prime\n");
}
}
return (0);
}

//server
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int prime(int a)
{
for(int i=2;i<a;i++)
{
if(a%i==0)
return 0;
}
return 1;
}
int cal(int a,int b,int op)
{
if(op==1)
return a+b;
else if(op==2)
return a-b;
else if(op==3)
return a*b;
return a/b;
}

int main()

{
int sid;
int a,b,res,op;
struct sockaddr_in server_address, client_address;
int server_addlen, cli_addlen;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 7890;

server_addlen = sizeof(server_address);
cli_addlen = sizeof(client_address);

sid = socket(AF_INET, SOCK_DGRAM, 0);


bind(sid, (struct sockaddr *)&server_address, server_addlen);

while (1)
{
printf("Ready to recv datagram \n");
recvfrom(sid, &op, sizeof(op), 0, (struct sockaddr *)&client_address, &cli_addlen);
if(op!=5)
{
recvfrom(sid, &a, sizeof(a), 0, (struct sockaddr *)&client_address, &cli_addlen);
recvfrom(sid, &b, sizeof(b), 0, (struct sockaddr *)&client_address, &cli_addlen);
res=cal(a,b,op);
sendto(sid, &res, sizeof(res), 0, (struct sockaddr *)&client_address, cli_addlen);
}
else
{
recvfrom(sid, &a, sizeof(a), 0, (struct sockaddr *)&client_address, &cli_addlen);
res=prime(a);
sendto(sid, &res, sizeof(res), 0, (struct sockaddr *)&client_address, cli_addlen);
}
}

return (0);
}

You might also like