From d12476b298183e8ce5371edad98a64c640407b51 Mon Sep 17 00:00:00 2001 From: "zmiguel.alves@gmail.com" Date: Mon, 11 Nov 2019 17:58:27 +0000 Subject: [PATCH] cliente<>server comms --- client | Bin 0 -> 17304 bytes client.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ dec.h | 1 + makefile | 7 +++++- server | Bin 0 -> 17216 bytes server.c | 25 +++++++++++++++++++++- util.h | 2 ++ verificador | Bin 0 -> 17328 bytes 8 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 client create mode 100644 client.c create mode 100644 server create mode 100644 verificador diff --git a/client b/client new file mode 100644 index 0000000000000000000000000000000000000000..cdc5d8388771c8b0074ea9c0f43aa6518a545d0f GIT binary patch literal 17304 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 M3yoP00|(3g0js9+i2wiq literal 0 HcmV?d00001 diff --git a/client.c b/client.c new file mode 100644 index 0000000..e39bc62 --- /dev/null +++ b/client.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//declaraao de funcoes +#include "dec.h" +//estructuras e outras coisas uteis +#include "util.h" + +int main(int argc, char *argv[]){ + int sair=0, test=-1; + char str[80], *palavra[10]; + int i; + + msg mensagem; + + int fd_servidor, fd_cliente; + + /* VERIFICAR SE EXISTE "CP" NO SERVIDOR(access) */ + if(access("CPservidor", F_OK)!=0){ + printf("[ERRO] O servidor nao esta em execucao!\n"); + exit(1); + }; + /* CRIAR "CP" DO CLIENTE - MINHA (mkfifo) */ + sprintf(mensagem.addrss, "CPcliente_%d", getpid()); + mkfifo(mensagem.addrss, 0600); //0600 READ && WRITE + /* ABRIR "CP" DO SERVIDOR (open - O_WRONLY) */ + fd_servidor = open("CPservidor", O_WRONLY); + + do{ + printf("> "); + fgets(str, 80, stdin); + str[strlen(str)-1]='\0'; + i = 0; + palavra[i]=strtok(str, " "); + while(palavra[i]!=NULL){ + i++; + palavra[i] = strtok(NULL," "); + } + if(palavra[0]!=NULL){ + if(strcmp(palavra[0],"send")==0){ + strcpy(mensagem.titulo, "send"); + strcpy(mensagem.corpo, palavra[1]); + /* ENVIAR PEDIDO PARA "CP" DO SERVIDOR (write) */ + i = write(fd_servidor, &mensagem, sizeof(mensagem)); + } + } + + }while(true); + + /* FECHAR "CP" DO SERVIDOR (close) */ + close(fd_servidor); + /* REMOVER "cp" DO CLIENTE - EU (UNLINK) */ + unlink(mensagem.addrss); +} \ No newline at end of file diff --git a/dec.h b/dec.h index bc1af6a..e3ffbd0 100644 --- a/dec.h +++ b/dec.h @@ -1 +1,2 @@ +void printMenu(void); int obtem_rand(int min, int max); \ No newline at end of file diff --git a/makefile b/makefile index 801ee2d..0db643a 100644 --- a/makefile +++ b/makefile @@ -12,7 +12,11 @@ LINKERFLAG = -lm SRCS := $(wildcard *.c) BINS := $(SRCS:%.c=%) +install: + cp ${BINS} /home/zmiguel/TP + all: ${BINS} + cp ${BINS} /home/zmiguel/TP %: %.o @echo "Checking.." @@ -24,4 +28,5 @@ all: ${BINS} clean: @echo "Cleaning up..." - rm -rvf *.o ${BINS} \ No newline at end of file + rm -rvf *.o ${BINS} + \ No newline at end of file diff --git a/server b/server new file mode 100644 index 0000000000000000000000000000000000000000..df9f949bf9a4a2c58e250a2555dd4becf5753fc9 GIT binary patch literal 17216 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 literal 0 HcmV?d00001 diff --git a/server.c b/server.c index c2f17b2..234b29e 100644 --- a/server.c +++ b/server.c @@ -13,7 +13,11 @@ #include "util.h" int main(int argc, char *argv[]){ + int sair=0, mopt=-1, n; + msg mensagem; + + srand(time(NULL)); int fd_servidor; /* VERIFICAR SE EXISTE "CP" DO SERVIDOR (access) -- APENAS UM!!!*/ if(access("CPservidor", F_OK)==0){ @@ -30,9 +34,20 @@ int main(int argc, char *argv[]){ /* Fazer coisas aqui! */ do{ + n = read(fd_servidor,&mensagem, sizeof(mensagem)); + + if(n == 0){ + printf("[SERVER] deu merda!\n"); + sleep(1); + continue; + }else if(strcmp(mensagem.titulo,"send")==0){ + printf("funciona!\n"); + printf("%s\n",mensagem.corpo); + } + }while(true); - printf("[SERVIDOR] SERVIDOR DESLIGADO\n"); + printf("[SERVER] SERVIDOR DESLIGADO\n"); /* FECHAR "CP" DO SERVIDOR - MINHA (close) */ close(fd_servidor); @@ -41,6 +56,14 @@ int main(int argc, char *argv[]){ exit(0); } +void printMenu(void){ + printf("[SERVER] Menu:\n"); + printf("\t1 - coisas\n"); + printf("\t0 - SAIR\n"); + + printf("> "); +} + int obtem_rand(int min, int max){ int random; random = min + (rand() % (max - min + 1)); diff --git a/util.h b/util.h index 6321896..9f5d8af 100644 --- a/util.h +++ b/util.h @@ -10,6 +10,8 @@ typedef struct msgdef int duracao; int time_added; + char addrss[20]; + struct topicdef * topico; struct msgdef * prox; }msg; diff --git a/verificador b/verificador new file mode 100644 index 0000000000000000000000000000000000000000..f5b68c70779cdef78a007d60b4bea465c93bb482 GIT binary patch literal 17328 zcmeHOdvH|M89$o^2?(2jpb@led01%85XpMrp@k96NQe9j�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 literal 0 HcmV?d00001