Per il client ci stiamo lavorando

This commit is contained in:
Davide Fiori 2018-01-03 11:36:45 +01:00
parent 66365d8003
commit cd2751adcc
1 changed files with 128 additions and 0 deletions

128
client.c Normal file
View File

@ -0,0 +1,128 @@
#include <stdio.h> // prova adesso lezione lab 10 UA3
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <ctype.h>
#include <arpa/inet.h>
#include <errno.h>
#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;
}