[C Socket] passaggio di una matrice mediante fullWrite

di il
4 risposte

[C Socket] passaggio di una matrice mediante fullWrite

Salve a tutti, premetto che sono nuovo nel forum per cui mi scuso se dovessero esserci degli errori nella realizzazione della richiesta. Sto effettuando un progetto di reti in C, un server deve inviare un menù al cliente appena si connette.
Per fare ciò ho creato una matrice:
server:
char primo[4][40] = {"1. Pasta al sugo\t3,00 Euro", 
    						"2. Riso in bianco\t2,00 Euro",
  						 "3. Lasagna\t\t4,50 Euro",
   						 "4. Pasta e Fagioli\t3,50 Euro"}; 
nel momento in cui effettuo la chiamata

for(i=0;i<4;i++)
	sprintf(buff,"%s\n",primo[i]);
	/*FULLWRITE()*/
     	FullWrite(connfd,buff,sizeof(buff));
}
Non capisco perchè al client arriva solo la prima stringa: 1.Pasta al sugo.

Dal lato client, ho richiamto la FullRead nel modo seguente:
FullRead(sockfd,recvline,sizeof(recvline));
Sperando di essere stato chiaro, sarei grato se qualcuno potesse chiarimi meglio la situazione.

4 Risposte

  • Re: [C Socket] passaggio di una matrice mediante fullWrite

    Ovviamente se tu lato server fai 4 FullWrite() anche lato client devi fare 4 FullRead(), ammesso che sia FullWrite() che FullRead() facciano quello che promettono dal nome .
    A mio avviso il server dovrebbe spedire tutto il menù con un'unica stringa, ti sarà più facile da gestire!
  • Re: [C Socket] passaggio di una matrice mediante fullWrite

    Ho pensato di invarlo cosi perchè il client deve avere la possibilità di scegliere il tipo di primo. Nonostante le quattro fullread(), il risultato finale è la prima stringa di primo: 1. Pasta al sugo 3,00 Euro.
    E' come se non iterasse e passase solo il primo argomento di primo al buffer.
  • Re: [C Socket] passaggio di una matrice mediante fullWrite

    Ho pensato di invarlo cosi perchè il client deve avere la possibilità di scegliere il tipo di primo.
    Questa frase non ha senso: il client si aspetta di ricevere il menù completo dei primi, poi ti spedirà la richiesta. O no?
    Perchè devi spedire 4 stringhe (che poi in futuro potrebbero diventare 5 o 3 o..) quando puoi spedire tutto con un'unica stringa? Indipendentemente dal probabile problema che ha il tuo software, secondo me puoi banalmente proseguire spedendo un'unica stringa, che è il comportamento più naturale. Altrimeni rischi davvero di sbattere contro un muro per avere delle funzionalità inutili
  • Re: [C Socket] passaggio di una matrice mediante fullWrite

    Per ovviare al problema, ho risolto in un altro modo:
    mi sono creato una struttura per le pietanze e l'ho passata mediante la fullWrite().
    Molto più pulito e lineare rispetto ad una matrice.
Devi accedere o registrarti per scrivere nel forum
4 risposte