#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; }