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

Modified

parent 7e1eaeec
CFLAGS = -w
all: clean all: clean
g++ -w -o server_s server.cpp cache.cpp persistentStorage.cpp -lpthread -lrt 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: server:
......
...@@ -2,25 +2,20 @@ ...@@ -2,25 +2,20 @@
#include "client.h" #include "client.h"
#include <sys/socket.h> #include <sys/socket.h>
#include <netdb.h> #include <netdb.h>
#include <string.h> #include <cstring>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h>
#include <sys/time.h>
void padding(char* str, char* key, int padTo) { #include <time.h>
int n = strlen(str); #include <iostream>
for(int i = n + 1; i < padTo; i++) { using namespace std;
key[i] = ' ';
}
}
int connectToServer(char *addr, char *portNo) { int connectToServer(char *addr, char *portNo) {
int sockfd = socket(AF_INET, SOCK_STREAM, 0); int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct addrinfo hints, *result; struct addrinfo hints, *result;
memset(&hints, 0, sizeof(struct addrinfo)); memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET; hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
// getaddrinfo return getaddr objects by searching using the provided hints, name, service // getaddrinfo return getaddr objects by searching using the provided hints, name, service
int s = getaddrinfo(addr, portNo, &hints, &result); int s = getaddrinfo(addr, portNo, &hints, &result);
if(s != 0) { if(s != 0) {
...@@ -28,68 +23,102 @@ int connectToServer(char *addr, char *portNo) { ...@@ -28,68 +23,102 @@ int connectToServer(char *addr, char *portNo) {
return -1; return -1;
} }
connect(sockfd, result->ai_addr, result->ai_addrlen); connect(sockfd, result->ai_addr, result->ai_addrlen);
cout << GET("ABC", sockfd) << endl; sendToServer(sockfd);
return 0; return 0;
} }
void sendToServer(int sockfd) {
int GET(char* key, int sockfd) { printf("Enter the index no to choose an option...\n");
int padTo = 513; printf("------OPTIONS------\n1. GET\n2. PUT\n3. DELETE\n4. EXIT\n");
char *buffer = (char *)malloc(padTo + 1); int choice;
strncpy(&buffer[1], key, strlen(key)); char *buffer = (char *)malloc(513*sizeof(char));
padding(key, buffer, padTo); double secs = 0;
buffer[padTo] = '\0'; int number_of_requests = 0;
buffer[0] = '1'; struct timeval start, stop;
write(sockfd, buffer, strlen(buffer)); gettimeofday(&start, NULL);
char recvBuffer[padTo]; while(1) {
int len = read(sockfd, recvBuffer, padTo); printf("Enter choice: ");
if(recvBuffer[0] == 200) { scanf("%d", &choice);
printf("Value : %s\n", recvBuffer[1]); char key[257], value[257];
return 1; 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;
} }
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)); write(sockfd, buffer, strlen(buffer));
char recvBuffer[padTo]; char recvBuffer[514];
int len = read(sockfd, recvBuffer, padTo); int len = read(sockfd, recvBuffer, 513);
if(recvBuffer[0] == 200) { recvBuffer[len] = '\0';
printf("Success\n"); if(recvBuffer[0] == (char)200) {
return 1; cout << "Operation Successful" << endl;
} }
else { else {
printf("Failure\n"); cout << "Operation Unsuccessful" << endl;
return 0;
} }
} printf("%s\n", &recvBuffer[1]);
int DEL(char* key, int sockfd) { if(choice==4)
int padTo = 513; {
char *buffer = (char *)malloc(padTo + 1); gettimeofday(&stop, NULL);
strncpy(&buffer[1], key, strlen(key)); double secs = (double)(stop.tv_usec - start.tv_usec) / 1000000 + (double)(stop.tv_sec - start.tv_sec);
padding(key, buffer, padTo); printf("Throughput : %f\n", (double)number_of_requests / (double)secs);
buffer[padTo] = '\0'; float tput;
buffer[0] = '3'; FILE *ptr = fopen("client.txt", "r");
write(sockfd, buffer, strlen(buffer)); if(!ptr) {
char recvBuffer[padTo]; ptr = fopen("client.txt", "w");
int len = read(sockfd, recvBuffer, padTo); tput = 0.0;
if(recvBuffer[0] == 200) { }
printf("Value : %s\n", recvBuffer[1]); else {
return 1; 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 GET(char* key, char *request) {
memset(request, '0', 513);
request[0] = '1';
memcpy(request+257-strlen(key), key, strlen(key));
}
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) { int main(int argc, char **argv) {
printf("IP = %s, Port = %s\n", argv[1], argv[2]); printf("IP = %s, Port = %s\n", argv[1], argv[2]);
connectToServer(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