From cd2751adcc79f226cf473aa3c757541443741ac4 Mon Sep 17 00:00:00 2001 From: Davide Fiori Date: Wed, 3 Jan 2018 11:36:45 +0100 Subject: [PATCH] Per il client ci stiamo lavorando --- client.c | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 client.c diff --git a/client.c b/client.c new file mode 100644 index 0000000..c5b80a8 --- /dev/null +++ b/client.c @@ -0,0 +1,128 @@ +#include // prova adesso lezione lab 10 UA3 +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define SOCKET_ERROR ((int)-1) +#define SERVER_PORT 1313 // numero di porta del server +#define MAXSIZE 10 + +static int menu(); + +int main(int argc, char *argv[]) +{ + int scelta=0; + char buffer[MAXSIZE]; + char indirizzoServer[]="127.0.0.1"; // indirizzo del server + char messaggio[]; // messaggio da inviare + struct sockaddr_in locale, remoto; + int socketfd; // identificatore della socket + int msglen, ris; + int n, nread, nwrite, len; + double prezzo; + int bitto,farina; + + /* impostazione del transport endpoint */ + printf ("Connessione col server\n"); + socketfd = socket(AF_INET, SOCK_STREAM, 0); + if (socketfd == SOCKET_ERROR) { + printf ("ERRORE\n"); + return(1); + } + memset ( &locale, 0, sizeof(locale) ); + locale.sin_family = AF_INET; + locale.sin_addr.s_addr = htonl(INADDR_ANY); + locale.sin_port = htons(0); + ris = bind(socketfd, (struct sockaddr*) &locale, sizeof(locale)); + if (ris == SOCKET_ERROR) { + printf ("ERRORE\n"); + return(3); + } + + /* assegnazione parametri del server */ + memset ( &remoto, 0, sizeof(remoto) ); + remoto.sin_family = AF_INET; + remoto.sin_addr.s_addr = inet_addr(indirizzoServer); + remoto.sin_port = htons(SERVER_PORT); + //connessione + ris = connect(socketfd, (struct sockaddr*) &remoto, sizeof(remoto)); + if (ris == SOCKET_ERROR) { + perror("fallimento di connect(): "); + printf ("fallimento nella connect() failed, errore: %d \"%s\"\n",errno,strerror(errno)); + fflush(stdout); //forza la scrittura dei dati bufferizzati sullo stream + return(4); + } + fflush(stdout); + scelta=menu(); + if(scelta==0) + messaggio="make\n"; + if(scelta==1) + messaggio="sell\n"; + if(scelta==2){ + scanf("%lf",&prezzo); + messaggio="set price"+prezzo+"\n"; + } + if(scelta==3){ + scanf("%u",&bitto); + messaggio="buy bitto"+bitto; + } + if(scelta==4){ + scanf("%u",&farina); + messaggio="buy flour"+farina; + } +} + + /* scrittura => invio del messaggio al server */ + len = strlen(messaggio)+1; + nwrite=0; + printf ("lunghezza messaggio %d write()\n", len); + fflush(stdout); + while( (n=write(socketfd, &(messaggio[nwrite]), len-nwrite)) >0 ) + nwrite+=n; + if(n<0) { + char msgerror[1024]; + sprintf(msgerror,"errore operazione di write()[err %d] ",errno); + perror(msgerror); + return(5); + } + + printf("stringa spedita: %s\n", messaggio); + fflush(stdout); //forza la scrittura dei dati bufferizzati sullo stream + + /* lettura della risposta */ + nread=0; + printf ("read()\n"); + while( (len>nread) && ((n=read(socketfd, &(buffer[nread]), len-nread )) >0)) + { + nread+=n; // aggiorna il numero di byte letti + printf("read effettuata, risultato n=%d len=%d nread=%d \n", n, len, nread); + } + if(n<0) // si e' verificato un errore + { + char msgerror[1024]; + sprintf(msgerror,"errore in lettura read() [err %d] ",errno); + perror(msgerror); // visualizza la descrizione dell'errore + return(6); + } + + /* stampa risultato */ + printf("stringa ricevuta: %s\n", buffer); + fflush(stdout); //forza la scrittura dei dati bufferizzati sullo stream + + /* chiusura socket */ + close(socketfd); + + return(0); +} +static int menu(){ + int i=0; + //fare menu + return i; +}