|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
[C] - Invio tizio... Arriva caio
Includo questi due spezzoni di codice
Proceso Server Codice:
bzero(buffer, MAX_BUFFER);
//lettura della richiesta
letti = read(sock_ds, buffer, MAX_BUFFER);
if(letti == -1){
bzero(buffer, MAX_BUFFER);
sprintf(buffer, "Errore di lettura da client %s", ip);
perror(buffer);
free((void*)buffer);
exit(-1);
}
//conterrà il comando da eseguire
char command = request(buffer);
//solo per il debugging
printf("Letto %d\n", command);
if(write(sock_ds, &command, sizeof(char)) == -1){
bzero(buffer, MAX_BUFFER);
sprintf(buffer, "Errore invio messaggio a %s", ip);
perror(buffer);
free((void*)buffer);
exit(-1);
}
Codice:
bzero(buffer, MAX_BUFFER);
printf("Inserisci richiesta: ");
fgets(buffer, MAX_BUFFER, stdin);
if(write(sock_ds, buffer, strlen(buffer)) == -1){
perror("Errore invio richiesta al server");
free((char*)buffer);
return FAIL;
}
if(read(sock_ds, &t, sizeof(char)) == -1){
perror("Errore lettura da server");
free((char*)buffer);
return FAIL;
}
printf("Ho letto %d\n", t);
1)client inserisce un comando 2)lo invia al server 3)il server controlla e l'intero che ritorna è salvato nella variabile command (un char, il cui valore lo controllo subito visivamente con la printf e li non ci sono problemi) 4)lo invio al client 5)il client recepisce valori strani Mi sono perso qualcosa per strada? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
Cmq potrebbe essere che l'errore risiede in un'altra parte di codice... che ti stampa il client? E cosa invece ti aspetti di vedere? |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
La funzione mi ritorna degli interi
Codice:
int request(char *req){
//ignoro \n finale
int len = strlen(req) - 1;
if(strncmp(req, "list", len) == 0)
return LIST;
if(strncmp(req, "insert", len) == 0)
return INSERT;
if(strncmp(req, "help", len) == 0)
return HELP;
if(strncmp(req, "find", len) == 0)
return FIND;
if(strncmp(req, "quit", len) == 0)
return QUIT;
return NOT_REC;
}
Diciamo che comunque a prima vista non dovrebbero esserci errori, cosa ne dici? Gli spezzoni che ho inviato sono quelli che prendono parte alle operazioni, quindi non può dar fastidio nient'altro! E comunque il server invia giusto il valore! A dimenticavo, mi stampa caratteri con codice del tipo 108, ecc.. adesso mi studio bene anche l'errore.. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
per 108 intendi il valore di errno? Strano perchè sarebbe: Codice:
81 #define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
No no ferma tutto.... che pippone madornale che sono... almeno adesso che ho finito di mangiare risolvo il tutto.... in pratica era come dicevi tu... c'erano altre parti del codice che io (come un ebbete) ho dimenticato di commentare per fare le prove! Dopo che il server inviava il responso positivo, per un determinato comando c'era una write che scriveva tot bytes! Ma siccome il client leggeva un byte la volta, mi stampava 108, che in ascii è il primo carattere del buffer inviato dal server... che svista madornale!
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:28.




















