From dc2c840353a75d5c5b45ffc7e317bb298aa5db9a Mon Sep 17 00:00:00 2001 From: xgiovio Date: Mon, 9 Jun 2014 03:50:43 +0200 Subject: [PATCH] Implementato esercizio con UDP connessi. --- .../archivio.txt | 8 + .../archivio.txt~ | 8 + .../client | Bin 0 -> 13872 bytes .../daytimecli.c | 148 +++++++++++++ .../daytimecli.c~ | 31 +++ .../daytimecli.o | Bin 0 -> 6336 bytes .../daytimesrv.c | 207 ++++++++++++++++++ .../daytimesrv.c~ | 41 ++++ .../daytimesrv.o | Bin 0 -> 7488 bytes .../makefile | 14 ++ .../makefile~ | 14 ++ .../readme | 16 ++ .../readme~ | 16 ++ .../server | Bin 0 -> 13981 bytes 14 files changed, 503 insertions(+) create mode 100755 11.UPD.client-server-exam-database (COMPLETE)/archivio.txt create mode 100755 11.UPD.client-server-exam-database (COMPLETE)/archivio.txt~ create mode 100755 11.UPD.client-server-exam-database (COMPLETE)/client create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c~ create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/daytimecli.o create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c~ create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.o create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/makefile create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/makefile~ create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/readme create mode 100644 11.UPD.client-server-exam-database (COMPLETE)/readme~ create mode 100755 11.UPD.client-server-exam-database (COMPLETE)/server diff --git a/11.UPD.client-server-exam-database (COMPLETE)/archivio.txt b/11.UPD.client-server-exam-database (COMPLETE)/archivio.txt new file mode 100755 index 0000000..abdac7e --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/archivio.txt @@ -0,0 +1,8 @@ +MARIO 30 127.0.0.1:37968 +FONZO 15 127.0.0.1:37968 +CARLO 14 127.0.0.1:37981 +MARIO 1950 127.0.0.1:38094 +ARTUR 150 127.0.0.1:38099 +KOMBAT 150 127.0.0.1:38099 +CAZZO 70 127.0.0.1:43589 +MARIOPANE 42 127.0.0.1:43589 diff --git a/11.UPD.client-server-exam-database (COMPLETE)/archivio.txt~ b/11.UPD.client-server-exam-database (COMPLETE)/archivio.txt~ new file mode 100755 index 0000000..0f37b98 --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/archivio.txt~ @@ -0,0 +1,8 @@ +MARIO 30 127.0.0.1:37968 +FONZO 15 127.0.0.1:37968 +CARLO 14 127.0.0.1:37981 +MARIO 1950 127.0.0.1:38094 +ARTUR 150 127.0.0.1:38099 +KOMBAT 150 127.0.0.1:38099 + +CAZZO 70 127.0.0.1:43589 diff --git a/11.UPD.client-server-exam-database (COMPLETE)/client b/11.UPD.client-server-exam-database (COMPLETE)/client new file mode 100755 index 0000000000000000000000000000000000000000..32fd58102b2272335ac383f2b1e83fb5fa1bfeac GIT binary patch literal 13872 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 literal 0 HcmV?d00001 diff --git a/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c b/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c new file mode 100644 index 0000000..c72d250 --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c @@ -0,0 +1,148 @@ +#include "../basic.h" +#include + +void sigpipeaction (int signal){ + + + //fprintf(stderr, "Sigpipe catturato\n"); + + +} + + +typedef struct message { + char data [50]; + char nome [50]; + char voto [50]; + struct sockaddr_in addresses; + unsigned int addresses_len; +}t_message; + +int main(int argc, char **argv) { + + + + struct sigaction sigpipestructure; + sigpipestructure.sa_handler = sigpipeaction; + sigpipestructure.sa_flags = 0; + + sigaction (SIGPIPE, &sigpipestructure, NULL); + + + + + + int sockfd; + struct sockaddr_in servaddr; + + if (argc != 3){ + printf("usage: daytimecli \n"); + exit(0); +} + if( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ){ + printf("socket error\n"); + exit(0); +} + bzero(&servaddr, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_port = htons(atoi(argv[2])); /* server port */ + + if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){ + printf("inet_pton error for %s\n", argv[1]); + exit(0); +} + if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){ + printf("connect error\n"); + exit(0); + } + + + int ridden; + int written; + t_message m; + m.addresses_len = sizeof (m.addresses); + + // get local address after connect + getsockname(sockfd, (struct sockaddr *) &(m.addresses) , &(m.addresses_len) ); + // getpeername per ottenere invece informazioni dall'altro lato di una connessione + + // send local address to the server + for (written = write (sockfd, &m, sizeof (m) ); written == -1; written = write (sockfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + + + + //// welcome from server - first message + for (ridden = read (sockfd,&m,sizeof(m)); ridden <= 0;ridden = read (sockfd,&m,sizeof(m))){ + if (errno == EINTR){continue;} else {exit(0);} + } + fprintf(stdout,"Server: %s\n",m.data);// answer from server + + char line [1000]; + char line_data [50]; + char line_nome [50]; + char line_voto [50]; + for(; ;){ + fprintf(stdout, "Inserisci comando: "); + fscanf (stdin,"%999[^\n]%*c",line); + sscanf (line, "%s", line_data); + if (strcmp("AGGIUNGI",line_data) == 0 || strcmp("VERIFICA",line_data) == 0){ + + if (strcmp("AGGIUNGI",line_data) == 0 ){ + sprintf(m.data,"AGGIUNGI"); + sprintf(line_nome,"def"); + sprintf(line_voto,"def"); + + sscanf (line, "%*s %s %s", line_nome,line_voto); + if (strcmp(line_nome,"def") == 0 || strcmp(line_voto,"def") == 0){ + fprintf(stdout,"Comando invalido\n"); + continue; + }else{ + sprintf(m.nome,"%s",line_nome); + sprintf(m.voto,"%s",line_voto); + } + + } else { + sprintf(m.data,"VERIFICA"); + sprintf(line_nome,"def"); + sscanf (line, "%*s %s ", line_nome); + if (strcmp(line_nome,"def") == 0 ){ + fprintf(stdout,"Comando invalido\n"); + continue; + }else{ + sprintf(m.nome,"%s",line_nome); + } + + } + + for (written = write (sockfd, &m, sizeof (m) ); written == -1; written = write (sockfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + for (ridden = read (sockfd,&m,sizeof(m)); ridden <= 0;ridden = read (sockfd,&m,sizeof(m))){ + if (errno == EINTR){continue;} else {exit(0);} + } + fprintf(stdout,"Server: %s\n",m.data);// answer from server + + + } else { + sprintf(m.data,"Bye"); + + for (written = write (sockfd, &m, sizeof (m) ); written == -1; written = write (sockfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + + for (ridden = read (sockfd,&m,sizeof(m)); ridden <= 0;ridden = read (sockfd,&m,sizeof(m))){ + if (errno == EINTR){continue;} else {exit(0);} + } + + fprintf(stdout,"Server: %s\n",m.data);// answer from server + break; + + } + } + + + + exit(0); +} diff --git a/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c~ b/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c~ new file mode 100644 index 0000000..239a866 --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.c~ @@ -0,0 +1,31 @@ +/* Client che interroga un daytime server */ + +#include "../basic.h" + +int main(int argc, char **argv) { + int sockfd, n; + char recvline[MAXLINE + 1]; + struct sockaddr_in servaddr; + + if (argc != 3){ + printf("usage: daytimecli \n"); + exit(0); +} + if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ){ + printf("socket error\n"); + exit(0); +} + bzero(&servaddr, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_port = htons(atoi(argv[2])); /* server port */ + + if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){ + printf("inet_pton error for %s\n", argv[1]); + exit(0); +} + if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){ + printf("connect error\n"); + exit(0); + } + exit(0); +} diff --git a/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.o b/11.UPD.client-server-exam-database (COMPLETE)/daytimecli.o new file mode 100644 index 0000000000000000000000000000000000000000..2546125e2deb87f8e6a2913484d3d233a94afa48 GIT binary patch literal 6336 zcmd^@ZEO@p7{{kCO07UEq9QMP7;9RD6GSkr1Y2t9HUR<{6jVHxyFI$n?p}7cKnV(@ zo?&e+Rw98fA{s+XAcha9yrghcp%@9u2lbPNXbd#?1xXAlp+3*-Oz*kzwxZ#aPPpBf z-~8v9XP$Z6vbkx&{Nkb_CQ}ic%W@@28B5)k%h&U4JsZW!*)q-l$$$CU%1<$)ZT-3a zR>u6^GrtWEYW_!AcqO#%(yD4`q4`Z$XJobh^jAR9LVtSs??Fz>aCii%=ASw~3f>p7 z(8Vp4cw>)aiKASO%a0X9#c_P_T0gxBYX5z8|ZNHS?&m)Q}4QK}LMJYv2e593DB z_+($%Td}jRVtdvBMVGRckIYx z(b>_N(`IyVIIAWo;}ONi@+V_O8<(=84V6U`Mvf@!fmJdQIQ}s4PnCwzm9G^yj=J?J z5CFrvIamqlr4jIu^_;*X>UOq!`f7N45IB6d%A8}g=~2(v;IU{z_jDFr?Yb=L*g*l} z(r#E#XW5<+ZC_nkGO& zWmw;epA(R(F<6jphadJMifkN0NDsjeIowQn>7dfDtW^7&3KeMc-?pCtZLxp+;-l%1 z=>KyHAus)xxE3YD`huBPK|W3+E5p%Jy>p@LE-44~UhC?|U5!B&q%v@*U*|Mh1;8ih*GfO{)DP zE7bq4ilF@$!E5NL_CHjiWKdViE)Oc07fXg_FTb{=peN{Gp$H@ApPTtcpj5&NFaDCD z(dRcQ`OEHQY&1y55I@Cq@N)~fEc3Gqw3Fc{wrrkpT)%}lu8Tr^RtU$lvXH(Zgg1xq zB_SNwc_I6&LU>yUcS3kq2;UaM-w5G5L-_6x{(cBQ7{Wgb;VgHvN8`*j*QCspp~pSb zwphDvT8Kn3)#16!*kF3%u4lSuo2(UXc{g|Avy@|6UQ*ulY>naJmw|;>(|X7B3>J&Q zH-cry+U&T_yKxLX!CWt4cX%u*nkNG-P;em@Gr>k}Z7k`=bt{=GyFnT5&v>d61_hJ;rD@7#`C=p zzF)B~<9Sly($B9I-YfjMLhMf>{T7QuQyp)O;Ocm1D0(^G`9x30+e$bc@2iBzPWS00!s))gN;tJYLHwbFSL~b= z^YuE>)A8;koce!+aH>B;IQ9QB;dH#$38(fai%(ZIJ~IiY_8SCO-w#WF(j05Pt$PEGHEJ literal 0 HcmV?d00001 diff --git a/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c b/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c new file mode 100644 index 0000000..bd4c1a1 --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c @@ -0,0 +1,207 @@ + + +#include "../basic.h" +#include + + + + + + +void sigpipeaction (int signal){ + + //fprintf(stderr, "Sigpipe catturato\n"); + +} + + + + +typedef struct message { + char data [50]; + char nome [50]; + char voto [50]; + struct sockaddr_in addresses; + unsigned int addresses_len; +}t_message; + +int main(int argc, char **argv) { + +//////////////////////////////////////////////////////////// SIGNALS + +///////SIGPIPE +struct sigaction sigpipestructure; + sigpipestructure.sa_handler = sigpipeaction; + sigpipestructure.sa_flags = 0; + +sigaction (SIGPIPE, &sigpipestructure, NULL); +//////////////////////////////////////////////////////////// END SIGNALS + + + int listenfd,n; + struct sockaddr_in servaddr; + char buff[INET_ADDRSTRLEN]; // client ip grabbed redeable + short port; // client port redeable + + if (argc != 2 ){ + printf("usage: daytimesrv \n"); + exit(0); + } + if( (listenfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){ + printf("socket error\n"); + exit(0); + } + bzero(&servaddr, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* wildcard address */ + servaddr.sin_port = htons(atoi(argv[1])); /* server port */ + + if( (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0){ + printf("bind error\n"); exit(0); + } + + + t_message m; // buffer message structure + int ridden, written; + + + for (;;){ + + + + // read address from client + for (ridden = read (listenfd,&m,sizeof(m)); ridden <= 0;ridden = read (listenfd,&m,sizeof(m))){ + if (errno == EINTR){continue;} else {exit(0);} + } + + + struct sockaddr_in client_addr; + unsigned int client_addr_len = sizeof(client_addr); + + client_addr = m.addresses; + + if (connect(listenfd, (struct sockaddr *) &client_addr, client_addr_len) < 0){ + printf("connect error\n"); + exit(0); + } + + + + + sprintf ( m.data, "Benvenuto" ); + //write with error check + for (written = write (listenfd, &m, sizeof (m) ); written == -1; written = write (listenfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + + + inet_ntop(AF_INET, &(client_addr.sin_addr), buff, INET_ADDRSTRLEN); // get client address + port = ntohs(client_addr.sin_port);// get client port + //fprintf (stdout,"%s%c%hu\n",buff,':',port); // print client address and port + + + for ( ; ; ) {// the server child reserve other requests from same client + + for (ridden = read (listenfd,&m,sizeof(m)); ridden <= 0;ridden = read (listenfd,&m,sizeof(m))){ + if (errno == EINTR){continue;} else {exit(0);} + } + + int fd; + + if (strcmp (m.data, "AGGIUNGI" ) == 0 ){ + fd = open ("archivio.txt",O_RDWR | O_APPEND); + if (fd < 0){ + fd = open ("archivio.txt", O_CREAT | O_RDWR | O_APPEND ,00700); + } + if (fd < 0){ + sprintf ( m.data, "Non posso modificare il database" ); + for (written = write (listenfd, &m, sizeof (m) ); written == -1; written = write (listenfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + } else { + + // local writes. no checks + write (fd,(m.nome), strlen ((m.nome))); + write (fd," ", 1); + write (fd,(m.voto), strlen ((m.voto)) ); + write (fd," ", 1); + write (fd,buff, strlen (buff)); + write (fd,":", 1); + + char port_char[50]; + sprintf (port_char,"%hu",port); + write (fd,port_char, strlen (port_char)); + write (fd,"\n", 1); + + + sprintf ( m.data, "AGGIUNTO" ); + for (written = write (listenfd, &m, sizeof (m) ); written == -1; written = write (listenfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + + close(fd); + } + } else { + if (strcmp (m.data, "VERIFICA" ) == 0 ){ + + fd = open ("archivio.txt",O_RDONLY); + if (fd < 0){ + sprintf ( m.data, "Non posso leggere il database" ); + for (written = write (listenfd, &m, sizeof (m) ); written == -1; written = write (listenfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + } else { + + char line [1000]; + char line_nome [50]; + char line_voto [50]; + char line_ip_port [50]; + int returned,found; + + found = 0; + FILE * fdfile = fdopen(fd,"r"); + returned = fscanf (fdfile,"%999[^\n]%*c",line); + for( ; returned > 0 ; returned = fscanf (fdfile,"%999[^\n]%*c",line) ){ + + sscanf (line, "%s %s %s", line_nome, line_voto, line_ip_port); + + if (strcmp (line_nome, m.nome) == 0){ + found = 1; + + sprintf ( m.data, "%s ha sostenuto l'esame con voto %s. Informazione fornita da %s ", line_nome, line_voto, line_ip_port ); + for (written = write (listenfd, &m, sizeof (m) ); written == -1; written = write (listenfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + + break; + } + + } + + if (found == 0){ + sprintf ( m.data, "%s non ha sostenuto l'esame", m.nome ); + for (written = write (listenfd, &m, sizeof (m) ); written == -1; written = write (listenfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + } + close(fd); + } + + } else { + + sprintf ( m.data, "Bye" ); + for (written = write (listenfd, &m, sizeof (m) ); written == -1; written = write (listenfd, &m, sizeof (m)) ){ + if (errno == EINTR){continue;} else {exit(0);} + } + m.addresses.sin_family = AF_UNSPEC; + connect(listenfd, (struct sockaddr *) &m.addresses, sizeof(m.addresses)); + break; // end requests from client + + } + } + + } + + + } +} diff --git a/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c~ b/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c~ new file mode 100644 index 0000000..5a71bf1 --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.c~ @@ -0,0 +1,41 @@ +/* stampa l'ip del client */ + +#include "../basic.h" +#include + +int main(int argc, char **argv) { + int listenfd, connfd, n; + struct sockaddr_in servaddr; + char buff[MAXLINE]; + time_t ticks; + + if (argc != 2 ){ + printf("usage: daytimesrv \n"); + exit(0); +} + if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ + printf("socket error\n"); + exit(0); +} + bzero(&servaddr, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* wildcard address */ + servaddr.sin_port = htons(atoi(argv[1])); /* server port */ + + if( (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0){ + printf("bind error\n"); exit(0); +} + if( listen(listenfd, 5) < 0 ) + { printf("listen error\n"); + exit(0); +} + for ( ; ; ) { + if( (connfd = accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0) + { printf("accept error\n"); exit(0);} else { + } + + n=read(connfd, buff, MAXLINE); + fprintf (stdout,%s\n,buff); + close(connfd); + } +} diff --git a/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.o b/11.UPD.client-server-exam-database (COMPLETE)/daytimesrv.o new file mode 100644 index 0000000000000000000000000000000000000000..60560176779173ffa70632af0007c05d5baef834 GIT binary patch literal 7488 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 literal 0 HcmV?d00001 diff --git a/11.UPD.client-server-exam-database (COMPLETE)/makefile b/11.UPD.client-server-exam-database (COMPLETE)/makefile new file mode 100644 index 0000000..a9beab6 --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/makefile @@ -0,0 +1,14 @@ +CC = gcc +CFLAGS = +all : server client + +server : daytimesrv.o ../fun-corso-reti.o + $(CC) -o server daytimesrv.o ../fun-corso-reti.o $(CFLAGS) +client : daytimecli.o ../fun-corso-reti.o + $(CC) -o client daytimecli.o ../fun-corso-reti.o $(CFLAGS) +daytimesrv.o : daytimesrv.c ../basic.h + $(CC) -c -o daytimesrv.o daytimesrv.c $(CFLAGS) +fun-corso-reti.o : ../fun-corso-reti.c ../basic.h + $(CC) -c -o ../fun-corso-reti.o ../fun-corso-reti.c $(CFLAGS) +daytimecli.o : daytimecli.c ../basic.h + $(CC) -c -o daytimecli.o daytimecli.c $(CFLAGS) diff --git a/11.UPD.client-server-exam-database (COMPLETE)/makefile~ b/11.UPD.client-server-exam-database (COMPLETE)/makefile~ new file mode 100644 index 0000000..7a44636 --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/makefile~ @@ -0,0 +1,14 @@ +CC = gcc +CFLAGS =-std=c99 +all : server client + +server : daytimesrv.o ../fun-corso-reti.o + $(CC) -o server daytimesrv.o ../fun-corso-reti.o $(CFLAGS) +client : daytimecli.o ../fun-corso-reti.o + $(CC) -o client daytimecli.o ../fun-corso-reti.o $(CFLAGS) +daytimesrv.o : daytimesrv.c ../basic.h + $(CC) -c -o daytimesrv.o daytimesrv.c $(CFLAGS) +fun-corso-reti.o : ../fun-corso-reti.c ../basic.h + $(CC) -c -o ../fun-corso-reti.o ../fun-corso-reti.c $(CFLAGS) +daytimecli.o : daytimecli.c ../basic.h + $(CC) -c -o daytimecli.o daytimecli.c $(CFLAGS) diff --git a/11.UPD.client-server-exam-database (COMPLETE)/readme b/11.UPD.client-server-exam-database (COMPLETE)/readme new file mode 100644 index 0000000..2624fed --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/readme @@ -0,0 +1,16 @@ + +SONO STATI CALCOALTI ERRORI SU READ,WRITE,CONNECT,SIGNALS +IL SERVER RISPONDE SOLO A UN CLIENT ALLA VOLTA E LE READ/WRITE SONO BLOCCANTI (SENZA SELECT) +PROTOCOLLO USATO UDP CONNESSO - 1 a 1 + +il server gestisce un file archivio.txt + +il client puo inviare: +BYE - per chiudere la connessione +AGGIUNGI - per far aggiungere un nome al server +VERIFICA - per verificare se un nome è presente nel database del server + +il server risponde: +BYE - A BYE +AGGIUNTO - AL COMANDO AGGIUNGI DEL CLIENT +EVENTUALI INFORMAZIONI SUI DATI - AL COMADNO VERIFICA diff --git a/11.UPD.client-server-exam-database (COMPLETE)/readme~ b/11.UPD.client-server-exam-database (COMPLETE)/readme~ new file mode 100644 index 0000000..8f597cb --- /dev/null +++ b/11.UPD.client-server-exam-database (COMPLETE)/readme~ @@ -0,0 +1,16 @@ + +SONO STATI CALCOALTI ERRORI SU READ,WRITE,CONNECT,SIGNALS +IL SERVER RISPONDE A SOLO UNA ISTANZA E LE READ/WRITE SONO BLOCCANTI (SENZA SELECT) +PROTOCOLLO USATO UDP CONNESSO - 1 a 1 + +il server gestisce un file archivio.txt + +il client puo inviare: +BYE - per chiudere la connessione +AGGIUNGI - per far aggiungere un nome al server +VERIFICA - per verificare se un nome è presente nel database del server + +il server risponde: +BYE - A BYE +AGGIUNTO - AL COMANDO AGGIUNGI DEL CLIENT +EVENTUALI INFORMAZIONI SUI DATI - AL COMADNO VERIFICA diff --git a/11.UPD.client-server-exam-database (COMPLETE)/server b/11.UPD.client-server-exam-database (COMPLETE)/server new file mode 100755 index 0000000000000000000000000000000000000000..eeea01ed99fa1724a6d92c06cdccd77e2917d4da GIT binary patch literal 13981 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