Per il client ci stiamo lavorando
This commit is contained in:
parent
66365d8003
commit
cd2751adcc
1 changed files with 128 additions and 0 deletions
128
client.c
Normal file
128
client.c
Normal 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;
|
||||
}
|
Loading…
Reference in a new issue