Startpunkten
This commit is contained in:
146
Lab4/dbclient.c
Normal file
146
Lab4/dbclient.c
Normal file
@@ -0,0 +1,146 @@
|
||||
|
||||
#include "db.h"
|
||||
|
||||
void addNumber(msg *myMsg){
|
||||
char nr[NRSIZE], name[NAMESIZE];
|
||||
printf("ADD \n============\n");
|
||||
printf("Enter number: "); gets(nr);
|
||||
printf("Enter name: "); gets(name);
|
||||
myMsg->op = ADD;
|
||||
strcpy(myMsg->nr, nr);
|
||||
strcpy(myMsg->name, name);
|
||||
}
|
||||
|
||||
void delNumber(msg *myMsg) {
|
||||
char nr[NRSIZE];
|
||||
printf("Delete \n=============\n");
|
||||
printf("Enter number: "); gets(nr);
|
||||
myMsg->op = DEL;
|
||||
strcpy(myMsg->nr, nr);
|
||||
strcpy(myMsg->name, "");
|
||||
}
|
||||
|
||||
void findNumber(msg *myMsg) {
|
||||
char name[NAMESIZE];
|
||||
printf("Find \n=============\n");
|
||||
printf("Enter name: "); gets(name);
|
||||
myMsg->op = NR;
|
||||
strcpy(myMsg->nr, "");
|
||||
strcpy(myMsg->name, name);
|
||||
}
|
||||
|
||||
void findName(msg *myMsg) {
|
||||
char nr[NRSIZE];
|
||||
printf("Find \n=============\n");
|
||||
printf("Enter number: "); gets(nr);
|
||||
myMsg->op = NAME;
|
||||
strcpy(myMsg->nr, nr);
|
||||
strcpy(myMsg->name, "");
|
||||
}
|
||||
|
||||
void getOut(msg *myMsg, int sock) {
|
||||
printf("Quitting...\n===============\n");
|
||||
myMsg->op = EXIT;
|
||||
write(sock, myMsg, sizeof(myMsg));
|
||||
close(sock);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void printMsg(msg myMsg) {
|
||||
printf("myMsg.nr = %s\n", myMsg.nr);
|
||||
printf("myMsg.name = %s\n", myMsg.name);
|
||||
sleep(2);
|
||||
}
|
||||
|
||||
void menu(msg *myMsg, int sock) {
|
||||
char choice[5];
|
||||
char val;
|
||||
|
||||
system("clear");
|
||||
|
||||
puts("\nWelcome to IPC, InternalPhonenumberCatalogue");
|
||||
puts("============================================\n\n");
|
||||
|
||||
puts("1 - Add a number\n");
|
||||
puts("2 - Delete a number\n");
|
||||
puts("3 - Find a number\n");
|
||||
puts("4 - Find a name\n");
|
||||
puts("5 - Exit\n\n");
|
||||
puts("Enter your choice: ");
|
||||
|
||||
fgets(choice, sizeof(choice), stdin);
|
||||
|
||||
switch(choice[0]){
|
||||
case '1': addNumber(myMsg);
|
||||
break;
|
||||
case '2': delNumber(myMsg);
|
||||
break;
|
||||
case '3': findNumber(myMsg);
|
||||
break;
|
||||
case '4': findName(myMsg);
|
||||
break;
|
||||
case '5': getOut(myMsg, sock);
|
||||
break;
|
||||
|
||||
default : puts("Try again <1-4 or 5>\n\n");
|
||||
sleep(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
main(int argc, char *argv[]) {
|
||||
char *remhost;
|
||||
u_short remport;
|
||||
int sock;
|
||||
struct sockaddr_in remote;
|
||||
struct hostent *h;
|
||||
msg myMsg;
|
||||
|
||||
if (argc != 3) {
|
||||
fprintf(stderr,"Usage: dbclient <host> <port>\n");
|
||||
exit(1);
|
||||
}
|
||||
remhost = argv[1];
|
||||
remport = atoi(argv[2]);
|
||||
|
||||
/* Create the socket. */
|
||||
if((sock = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) {
|
||||
perror("dbclient:socket");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
bzero((char *) &remote, sizeof(remote));
|
||||
remote.sin_family = AF_INET;
|
||||
if((h = gethostbyname(remhost)) == NULL) {
|
||||
perror("dbclient:gethostbyname");
|
||||
exit(1);
|
||||
}
|
||||
bcopy((char *)h->h_addr, (char *)&remote.sin_addr, h->h_length);
|
||||
remote.sin_port = htons(remport);
|
||||
|
||||
if(connect(sock, (struct sockaddr *)&remote, sizeof(remote)) < 0) {
|
||||
perror("dbclient:connect");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for(;;) {
|
||||
menu(&myMsg, sock);
|
||||
write(sock, &myMsg, sizeof(myMsg));
|
||||
read(sock, &myMsg, sizeof(myMsg));/*lyssna efter svar från servern*/
|
||||
|
||||
if(myMsg.op == NACK) {
|
||||
puts("Could not execute your request, please try again");
|
||||
}
|
||||
else if(myMsg.op == ACK) {
|
||||
printf("Operation executed.\n");
|
||||
}
|
||||
else if(myMsg.op == PRN) {
|
||||
printMsg(myMsg);
|
||||
}
|
||||
sleep(2);
|
||||
}
|
||||
close(sock);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user