Startpunkten

This commit is contained in:
2026-03-05 13:31:50 +01:00
commit 86a20ae0e1
16 changed files with 1305 additions and 0 deletions

146
Lab4/dbclient.c Normal file
View 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);
}