From b3b8f283063bcea70855e9c46bd4c2e4201e7a83 Mon Sep 17 00:00:00 2001 From: "zmiguel.alves@gmail.com" Date: Wed, 13 Nov 2019 19:03:13 +0000 Subject: [PATCH] =?UTF-8?q?comunica=C3=A7=C3=A3o=20entre=20servidor=20e=20?= =?UTF-8?q?v=C3=A1rios=20clientes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client | Bin 17304 -> 17456 bytes client.c | 57 +++++++++++++++++++++++++++++++++++++++++++++---------- server | Bin 17216 -> 17408 bytes server.c | 32 +++++++++++++++++++++++++------ util.h | 53 ++++++++++++++++++++++++++++++++++++++++----------- 5 files changed, 115 insertions(+), 27 deletions(-) diff --git a/client b/client index cdc5d8388771c8b0074ea9c0f43aa6518a545d0f..54fadff577e95369abc5438b87f422145dac4416 100644 GIT binary patch delta 3325 zcmZ`*3s98T6~1?0?DE_N)@7Se{$)(W81?~dk=SK_9*aLI(*i+_T9eSQ0+sSuFtrbh z2t>A&WX-V|`f!Sq#2P2lt}>m8IwH{&l9|>veI{u;qZyqpBihw5EwmW?z z-gD16-+A48F8>`rK%*lxl4Gg25I#hOkm$j+KTj4+3MZHje&|d-Y*4tv2FRq&WVc3P z-5PkDI!*7W?E5f44_M{}MY%-5uKC-BUz+yr&&^5Nynl70|AphHT0i{BI}$Tng+Gcv zCBPA~PnFq_z8Adsjn+-gaM_au^%?`1^*U(LX46-pL1%+!v~Kzm4Cq|Yrptl%wK=o_ znzc4s$7YBi@8|rt_#EQ%G_#~z_<9%I)Vd(5bJO23ss5`NF&`>4S*CTkvJg9of?Z#1 z*xlLD-nk3Dq|Z+d1)E#QvmIT%LFmxGOf^6aHpn)V*vHX=jhIiNMuiYJG#hO8xVpi| z#Cx^J;GiMPu5KPzUGggkwi_vM7Hu;W0iWZ`v{tx|TDE(M5fzn{9*GTdlWdfNH|a%t zA{VBu7uifm68=o^k0cxXJt;Nq8Ij2pX)2@{ZIEhAP3so9kYm%qXWZZ$StiL;lzfgX zlV>fHk1vyFPxctE8BUrrX@AH?NLxDM=7@~rp|3NZ)j1dcl<{9h} z^;xA+eK`W8;psk;d?_PuAM<=crRZakDaX9GobUt71Jza)YLqYS;5ClQutRQlG(r=7I`*s z8&UEUTVwPiX=r>1OULw9CHOymBFpF4MTs3pP3$VN;q%hi@Wdi|8}lAT8!0^dCUX(n zg9ueMwGVAj5nKJK+%Hct2k22mv;zG+Lc@W0!qMP#n{+A^Y;EuD3x=eyaYi&EevAbf z4a86Xlta@Cnw>B+ULa0}aOLOtn6OyT8CIV7f8yc}#;r)-cE6^P_HBAD+$_I>Szc3)sPJQseExln|POwQpoQ z5&Iu+4|ZU4;d?B~RErwLV)L@InKaxRPbIO{^hglQdSy=o58ouS$dS#@H*1lPTG+nO+idX(Qwc?tVhHSJl-9 zzTC7!sOo4BcJ>7YfwTo_6Vlq7vivsE>W^jl3es1RK1$(bA)gxIl;AQPyCKU0g&RWt zV-x6O`Df}u#Iw)wUi5WKi;IeM^YfajG=uiKHZ{pes!{Y^{5^Ra9(UB}yYb&Aojl^W zkYaMH-=#R*EOcoOt%7{#Q?wffoOyH(jyU~v94PCrHUaT`0;k1L)Q%+8{Gy29;?M}`z142bF&RSHyH+a1BW(aX5(h zH{tbS7j?r2#ZPM<&4X!q>~^tXg$A!pvzCIt$eKdfvqK;` zWI}{W@56K}Q`&bSmOp$%Zb1@f@;#=7s8^LdKTf8g^!+5EXhv|?qf^rqLcG7TgT8=t*LvnNgKv#C*ehKeHmLSF!7 zW#6&!cc>_CtgEf8db-G27YCjl-$(exraV&jwsBx4{;_#U!eY zD?*RIG&8Z030k3t(|%`iqEGNn-1668@0N)!)4aevk$LD5OOp#63RmEmJSo;tyeNwm xF4KglNGHHki3zG4CRpjmOLU^rZ~DDkL5#y9BHGyhDjXZ2tg4j00zFl0{tuD94!8gS delta 2436 zcmZWrdu&rx7(b_vt+z1NcI$2{;MzrDgRGBrv*WR?W9zshOgfY>QGrEXF@ZP*v#7Am zFlT9I`gW!LGToWYMjTnyjJ=zg_xs_{ciSEh?EBEqMzT!i zN?8bjfi&LUuavGk@UXWV#?!LwN|hwnScQyW`!vAZblyHwHb^w}fY$~9 z=3ZuQwPdPvGp1k6*rJJ@R-sG31N}lr|4vRE%gk+MxxZC7rZ7wR5+h>;_hG=CQyolIeVoFww>F{RvjJ`!lTL8Cs|a4Il6+WuVbvZ z;ft8|O>~5VlfPfVN^NmLe$E^|RY1rZAyUZrQ!5K@2<^8F$-93ip3V7?OL(}D=73`^ zJnHb&mOF?;njL%0Z0(YzI32rx=WmN*C-T!NQH(Pkc?0s##zpZw^3J<>+Q^g0J?zK` z%yZ_^ZBXlUrFOPw3UaOYFG$&EZhhgt> zY65c+PaR0Dx=eyASytqt4bX(fC{imNDSC}|0`*z7tZ#aK%grIB532Lbf+imiF`r?o zL#iG>3KaY8$1vb?W1k)OZO|NY!s_Bzaf;#M`BZ@M;@s>2>;Do|=2k2x&YkrL8AHiI zY@{%*kf>4j>MTVfe;bh6|LK9|)PRo#qaTX2Rv6@rnQ7P_y z7fnH}@srli5%0XE9f zZXvVCnDQlfUN)0&kejf8@ql7b*mbsg#5a#5^Xl(Eh*eu2Uw^TV$m4#-g}E z+GvwRJ0$v^L{Bg}r=Kksw=unV-=m#vR8M|oQhjk&Vryv*g`P$4Ch8U+(fABFmIw^{iIQ2zx8e&oyDoJYAm9vCk7b0I|w0axLlx(w>22tj>C3r&H! ziic!{jWa2=Faa0vThz*^+^L1t0hdudZhX=A2WseA7zwz!|9)P$O20AckV_PGBvw?` zP<;7&mbp3g+&f`-nV*XV6bx`x6?jo|QD3vu0j8yrl5xDC4{{qt9 Bcv}Df diff --git a/client.c b/client.c index e39bc62..4359760 100644 --- a/client.c +++ b/client.c @@ -17,21 +17,39 @@ int main(int argc, char *argv[]){ char str[80], *palavra[10]; int i; - msg mensagem; + cl2sv msg2sv; + sv2cl svResp; 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"); + printf("[ERROR] 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 + sprintf(msg2sv.fifostr, "CPcliente_%d", getpid()); + mkfifo(msg2sv.fifostr, 0600); //0600 READ && WRITE /* ABRIR "CP" DO SERVIDOR (open - O_WRONLY) */ fd_servidor = open("CPservidor", O_WRONLY); + //registar cliente no servidor + strcpy(msg2sv.cmd,"register"); + write(fd_servidor, &msg2sv, sizeof(msg2sv)); + fd_cliente = open(msg2sv.fifostr,O_RDONLY); + read(fd_cliente,&svResp,sizeof(svResp)); + close(fd_cliente); + if(svResp.code==1){ + printf("[CLIENT] Cliente registado no servidor!\n"); + }else{ + printf("[ERROR] Resposta inesperado do servdor.\n"); + /* FECHAR "CP" DO SERVIDOR (close) */ + close(fd_servidor); + /* REMOVER "cp" DO CLIENTE - EU (UNLINK) */ + unlink(msg2sv.fifostr); + exit(1); + } + do{ printf("> "); fgets(str, 80, stdin); @@ -43,18 +61,37 @@ int main(int argc, char *argv[]){ palavra[i] = strtok(NULL," "); } if(palavra[0]!=NULL){ - if(strcmp(palavra[0],"send")==0){ - strcpy(mensagem.titulo, "send"); - strcpy(mensagem.corpo, palavra[1]); + if(strcmp(palavra[0],"sair")==0){ + printf("[CLIENT] A sair!\n"); + sair = 1; + }else if(strcmp(palavra[0],"send")==0){ + strcpy(msg2sv.cmd, "send"); + strcpy(msg2sv.opts, palavra[1]); /* ENVIAR PEDIDO PARA "CP" DO SERVIDOR (write) */ - i = write(fd_servidor, &mensagem, sizeof(mensagem)); + i = write(fd_servidor, &msg2sv, sizeof(msg2sv)); + }else if(strcmp(palavra[0],"desligar")==0){ + printf("[CLIENT] A Desligar servidor!\n"); + strcpy(msg2sv.cmd, "DESLIGAR"); + write(fd_servidor, &msg2sv, sizeof(msg2sv)); + printf("[CLIENT] A sair!\n"); + sair = 1; + }else if(strcmp(palavra[0],"ping")==0){ + strcpy(msg2sv.cmd, "ping"); + /* ENVIAR PEDIDO PARA "CP" DO SERVIDOR (write) */ + i = write(fd_servidor, &msg2sv, sizeof(msg2sv)); + //ler resposta do servidor + fd_cliente = open(msg2sv.fifostr,O_RDONLY); + read(fd_cliente,&svResp,sizeof(svResp)); + close(fd_cliente); + //processar resposta + printf(svResp.resp); } } - }while(true); + }while(sair==0); /* FECHAR "CP" DO SERVIDOR (close) */ close(fd_servidor); /* REMOVER "cp" DO CLIENTE - EU (UNLINK) */ - unlink(mensagem.addrss); + unlink(msg2sv.fifostr); } \ No newline at end of file diff --git a/server b/server index df9f949bf9a4a2c58e250a2555dd4becf5753fc9..c3b46a89334e694833189af380ea40a78b77ffcb 100644 GIT binary patch delta 3314 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 Aga7~l diff --git a/server.c b/server.c index 234b29e..d959ba2 100644 --- a/server.c +++ b/server.c @@ -15,10 +15,11 @@ int main(int argc, char *argv[]){ int sair=0, mopt=-1, n; - msg mensagem; + sv2cl msg2cl; + cl2sv clResp; srand(time(NULL)); - int fd_servidor; + int fd_servidor, fd_cliente; /* VERIFICAR SE EXISTE "CP" DO SERVIDOR (access) -- APENAS UM!!!*/ if(access("CPservidor", F_OK)==0){ printf("[SERVIDOR] Ja existe um servidor!\n"); @@ -34,18 +35,37 @@ int main(int argc, char *argv[]){ /* Fazer coisas aqui! */ do{ - n = read(fd_servidor,&mensagem, sizeof(mensagem)); + n = read(fd_servidor,&clResp, sizeof(clResp)); if(n == 0){ printf("[SERVER] deu merda!\n"); sleep(1); continue; - }else if(strcmp(mensagem.titulo,"send")==0){ + }else if(strcmp(clResp.cmd,"DESLIGAR")==0){ + printf("[SERVER] O servidor vai desligar\n"); + //implementar desligar outros clientes! + sair = 1; + }else if(strcmp(clResp.cmd,"send")==0){ printf("funciona!\n"); - printf("%s\n",mensagem.corpo); + printf("%s\n",clResp.opts); + }else if(strcmp(clResp.cmd,"register")==0){ + msg2cl.code=1; + //responde + fd_cliente = open(clResp.fifostr,O_WRONLY); + write(fd_cliente,&msg2cl,sizeof(msg2cl)); + close(fd_cliente); + //fim resposta + }else if(strcmp(clResp.cmd,"ping")==0){ + sprintf(msg2cl.resp,"[SV] Olá %s\n",clResp.fifostr); + printf("[SERVER] A responder ao Cliente %s",clResp.fifostr); + //responde + fd_cliente = open(clResp.fifostr,O_WRONLY); + write(fd_cliente,&msg2cl,sizeof(msg2cl)); + close(fd_cliente); + //fim da resposta } - }while(true); + }while(sair==0); printf("[SERVER] SERVIDOR DESLIGADO\n"); diff --git a/util.h b/util.h index 9f5d8af..43aaad8 100644 --- a/util.h +++ b/util.h @@ -1,25 +1,56 @@ #define TAM_TITULO 128 #define TAM_CORPO 1001 #define TAM_NOME 100 +//tamanhos comunicacao cl<>sv +#define TAM_CMD 64 +#define TAM_OPTS 128 +#define TAM_RESP 512 -typedef struct msgdef -{ +typedef struct{ int id; char titulo[TAM_TITULO]; char corpo[TAM_CORPO]; int duracao; int time_added; - char addrss[20]; + struct topic * topico; + struct mensagem * prox; +}mensagem; - struct topicdef * topico; - struct msgdef * prox; -}msg; - -typedef struct topicdef -{ +typedef struct{ int id; char nome[TAM_NOME]; - struct msgdef * mensg; - struct topicdef * prox; + struct mensagem * mensg; + struct topic * prox; }topic; +//guardar clientes +typedef struct{ + int pid; + char nome[TAM_NOME]; + char fifostr[TAM_NOME]; +}clients; + +//estructura dados de cliente --> servidor +struct clmsg{ + char titulo[TAM_TITULO]; + char corpo[TAM_CORPO]; + int duracao; +}; +typedef struct{ + char fifostr[TAM_NOME]; + //base + int pid; + char cmd[TAM_CMD]; + char opts[TAM_OPTS]; + int nopt; + //mensagem + struct clmsg msg; +}cl2sv; + +//estructura de dados servidor --> cliente +typedef struct +{ + int code; + char type[TAM_CMD]; + char resp[TAM_RESP]; +}sv2cl;