|
Vagabond |
.primate.
Registered: Apr 2013
Posts: 74 (0.02 al dì)
Location:
Corso: F1X
Anno:
Time Online: 11:57:29 [...]
Status: Offline
Edit | Report | IP: Logged |
Soluzione lab client server febbraio 2014
Posto qui un mio tentativo di soluzione di questo tema d'esame. Premetto che è il primo tentativo di soluzione che ho fatto, è incompleto e probabilmente sbagliato. Se qualcuno ha voglia di dargli un'occhiata ci si può ragionare insieme e capire cosa va e cosa non va. Sono bene accetti commenti sia da parte di chi sa farlo e vuole dare una mano, sia da parte di chi, come me, sta cercando di fare l'esame ed è in difficoltà.
La parte della codifica non l'ho implementata perchè non ho ben capito cosa si dovesse fare e perchè non è quella la parte che mi interessava, ma quello che voglio capire è se la struttura della gestione client server va fatta così.
Parte Server C:
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#define MYPORT "55555"
#define BACKLOG 10
int main(){
int distr = 1;
int prezzo = 9999;
struct sockaddr_storage theiraddr;
socklen_t addr_size;
struct addrinfo hints, *res;
int sk_fd, newfd, pid;
memset(&hints, 0, sizeof hints);
hints.ai_flags = AI_PASSIVE;
hints.ai_family = AI_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo(NULL, MYPORT, &hints, &res);
sk_fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
bind(sk_fd, res->ai_addr, res->ai_addrlen);
listen(sk_fd, BACKLOG);
addr_size = sizeof(theiraddr);
for(;;){
newfd = accept(sk_fd, (struct sockaddr*) &theiraddr, &addr_size);
pid=fork();
if(pid != 0){
pid = waitpid(0,&rs,NULL);
result = WEXITSTATUS(rs);
//manca la decodifica e l'aggiornamento delle variabili
close(newfd);
}
else{
close(sk_fd);
int bytes;
char[6] msg;
char[0]=distr;
char[2]=prezzo;
bytes = send(newfd, msg, sizeof(msg),0);
while(true){
char[6] rec;
int rs;
int rbytes = recv(newfd, rec, sizeof(rec), 0);
if(rec == "exit"){
close(newfd);
exit(rs);
}
rs = strtol(rec);
//manca la codifica e l'aggiornamento delle variabili
}
}
}
return 0;
}
Attachment: serverbenzina.c
This has been downloaded 8 time(s).
|