Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti!
Sono alle primissime armi con la programmazione C e sto cercando di creare una semplice applicazione client-server. Il mio problema è il seguente: riesco a far comunicare client e server ma non riesco a fare in modo che il server invii al client un array di puntatori a caratteri. In pratica, dovrei creare un'applicazione per la gestione di una pizzeria; il client invia un intero al server che, a sua volta, deve trasmettere al client un intero array di puntatori a caratteri che contiene il menù delle pizze. Considerando che il codice è ancora da completare, vi posto quello che ho fatto fin'ora:
"04. Quattro stagioni \t\t4,50 Euro", "05. Capricciosa \t\t\t4,50 Euro", "06. Filetto di pomodoro \t\t4,20 Euro"};
Nel server, la ricezione e' sbagliata ...
Codice sorgente - presumibilmente C/C++
int p;
...
for (i=0; i<6; i++)
{
p = recv (clientsocket, pizze, 100, 0);
pizze[p]='\0';
printf ("%s\n", pizze);
}
Ok, adesso funziona
Ci sono però delle cose che mi lasciano perplesso:
1. Alcune volte, se avvio prima il server e poi il client (cioè, la normalità), l'output generato è quello in figura 1, in allegato.
2. Alcune volte, se faccio partire prima il client e poi il server, l'output generato a schermo è quello di figura 2. Perchè la formattazione delle ultime due stringhe è sbagliata dal lato client mentre dal lato server viene visualizzata correttamente?
Dico "alcune volte" perchè ogni volta che avvio il programma, l'output è diverso; a volte esce come in figura 1, a volte come in figura 2 L'unica nota positiva è che non appaiono più quei caratteri "strani" di prima. Cosa sbaglio? Centrano le locazioni di memoria?
Il problema e' che, se ancora non si molta esperienza con la programmazione, non si dovrebbe iniziare a scrivere programmi di una certa complessita' (come quelli client-server).
Anzi, prima bisognerebbe studiare i principi della comunicazione in rete (TCP) ...
La ricezione dei dati con i socket non avviene sempre cosi' come si trasmettono.
Per vari motivi, ogni recv non corrisponde ad ogni send. E' possibile che con una recv vengano ricevute due o piu' stringhe trasmesse con diverse send e questo e' normale nella comunicazione TCP.
Deve essere il programma che riceve a gestire la cosa e lo fa esaminando opportunamente i dati ricevuti (e questo implica un codice un po' piu' complesso di quello che hai scritto che e' evidentemente di tipo didattico).
Per rimediare ai piccoli problemi descritti, puoi modificare nel server, questa riga in questo modo
Il problema e' che, se ancora non si molta esperienza con la programmazione, non si dovrebbe iniziare a scrivere programmi di una certa complessita' (come quelli client-server).
Hai ragione, purtroppo la questione è un po' difficile...
In ogni caso, ho modificato ancora il codice come mi hai detto: problemi di formattazione non ce ne sono più e tutto funziona correttamente, solo che qualche volta capita che il client stampi a video più volte la stessa stringa. A questo punto, da come ho capito, dovrebbe dipendere dalla recv e dal funzionamento stesso di TCP/IP... Avete qualche altro consiglio da darmi?
Ultima modifica effettuata da MagoAntò il 07/02/2009 alle 17:44
Non mi e' mai capitato, ma considera che quello che hai iniziato a scrivere e' solo lo "scheletro" di un server, in quanto si interrompe subito dopo la prima risposta (cosa che ovviamente ad un server non deve capitare ...).
Lo stesso dicasi per il server ...
Comunque, il consiglio e' di studiare bene i dettagli del TCP e della programmazione di rete e poi riprovare ...