Commit 013ac826 authored by Nilesh Jagdish's avatar Nilesh Jagdish

Modified

parent 7e1eaeec
CFLAGS = -w
all: clean
g++ -w -o server_s server.cpp cache.cpp persistentStorage.cpp -lpthread -lrt
$(CC) $(CFLAGS) -o client_c client.c
g++ -w -o client_c client.cpp -lrt
server:
......@@ -15,4 +14,4 @@ client:
clean:
$(RM) client_c
$(RM) server_s
$(RM) *.o
\ No newline at end of file
$(RM) *.o
......@@ -2,25 +2,20 @@
#include "client.h"
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <cstring>
#include <unistd.h>
void padding(char* str, char* key, int padTo) {
int n = strlen(str);
for(int i = n + 1; i < padTo; i++) {
key[i] = ' ';
}
}
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include <iostream>
using namespace std;
int connectToServer(char *addr, char *portNo) {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct addrinfo hints, *result;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
// getaddrinfo return getaddr objects by searching using the provided hints, name, service
int s = getaddrinfo(addr, portNo, &hints, &result);
if(s != 0) {
......@@ -28,68 +23,102 @@ int connectToServer(char *addr, char *portNo) {
return -1;
}
connect(sockfd, result->ai_addr, result->ai_addrlen);
cout << GET("ABC", sockfd) << endl;
sendToServer(sockfd);
return 0;
}
void sendToServer(int sockfd) {
printf("Enter the index no to choose an option...\n");
printf("------OPTIONS------\n1. GET\n2. PUT\n3. DELETE\n4. EXIT\n");
int choice;
char *buffer = (char *)malloc(513*sizeof(char));
double secs = 0;
int number_of_requests = 0;
struct timeval start, stop;
gettimeofday(&start, NULL);
while(1) {
printf("Enter choice: ");
scanf("%d", &choice);
char key[257], value[257];
switch(choice) {
case 1:
cout << "Key : ";
scanf("%s", key);
GET(key, buffer);
break;
case 2:
cout << "Key : ";
scanf("%s", key);
cout << "Value : ";
scanf("%s", value);
PUT(key, value, buffer);
break;
case 3:
cout << "Key : ";
scanf("%s", key);
DELETE(key, buffer);
break;
case 4:
printf("Requested for connection termination\n");
terminateConnection(buffer);
break;
}
write(sockfd, buffer, strlen(buffer));
char recvBuffer[514];
int len = read(sockfd, recvBuffer, 513);
recvBuffer[len] = '\0';
if(recvBuffer[0] == (char)200) {
cout << "Operation Successful" << endl;
}
else {
cout << "Operation Unsuccessful" << endl;
}
printf("%s\n", &recvBuffer[1]);
int GET(char* key, int sockfd) {
int padTo = 513;
char *buffer = (char *)malloc(padTo + 1);
strncpy(&buffer[1], key, strlen(key));
padding(key, buffer, padTo);
buffer[padTo] = '\0';
buffer[0] = '1';
write(sockfd, buffer, strlen(buffer));
char recvBuffer[padTo];
int len = read(sockfd, recvBuffer, padTo);
if(recvBuffer[0] == 200) {
printf("Value : %s\n", recvBuffer[1]);
return 1;
if(choice==4)
{
gettimeofday(&stop, NULL);
double secs = (double)(stop.tv_usec - start.tv_usec) / 1000000 + (double)(stop.tv_sec - start.tv_sec);
printf("Throughput : %f\n", (double)number_of_requests / (double)secs);
float tput;
FILE *ptr = fopen("client.txt", "r");
if(!ptr) {
ptr = fopen("client.txt", "w");
tput = 0.0;
}
else {
fscanf(ptr, "%f", &tput);
fclose(ptr);
ptr = fopen("client.txt", "w");
}
tput += ((float)number_of_requests / (float)secs);
fprintf(ptr, "%f", tput);
fclose(ptr);
return ;
}
number_of_requests++;
}
else
return 0;
}
int PUT(char* key, char* value, int sockfd) {
int padTo = 257;
char *buffer = (char *)malloc(2 * padTo - 1);
strncpy(&buffer[1], key, strlen(key));
padding(key, buffer, padTo);
strncpy(&buffer[padTo], value, strlen(value));
padding(value, &buffer[padTo], padTo);
buffer[0] = '2';
write(sockfd, buffer, strlen(buffer));
char recvBuffer[padTo];
int len = read(sockfd, recvBuffer, padTo);
if(recvBuffer[0] == 200) {
printf("Success\n");
return 1;
}
else {
printf("Failure\n");
return 0;
}
int GET(char* key, char *request) {
memset(request, '0', 513);
request[0] = '1';
memcpy(request+257-strlen(key), key, strlen(key));
}
int DEL(char* key, int sockfd) {
int padTo = 513;
char *buffer = (char *)malloc(padTo + 1);
strncpy(&buffer[1], key, strlen(key));
padding(key, buffer, padTo);
buffer[padTo] = '\0';
buffer[0] = '3';
write(sockfd, buffer, strlen(buffer));
char recvBuffer[padTo];
int len = read(sockfd, recvBuffer, padTo);
if(recvBuffer[0] == 200) {
printf("Value : %s\n", recvBuffer[1]);
return 1;
}
else
return 0;
int PUT(char* key, char* value, char *request) {
memset(request, '0', 513);
request[0] = '2';
memcpy(request+257-strlen(key), key, strlen(key));
memcpy(request+513-strlen(value), value, strlen(value));
}
int DELETE(char* key, char *request) {
memset(request, '0', 513);
request[0] = '3';
memcpy(request+257-strlen(key), key, strlen(key));
}
void terminateConnection(char *request) {
memset(request, '0', 513);
request[0]='4';
request[512]='\0';
}
int main(int argc, char **argv) {
printf("IP = %s, Port = %s\n", argv[1], argv[2]);
connectToServer(argv[1], argv[2]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment