PDA

View Full Version : [C] cosa fare ?


xgab
06-09-2009, 10:28
raga ho da poco ininiziato a usare il c con dev c++ e ho fatto quiz con domande e risposte (sia se le dai sbagliate o giuste) e ho fatte diverse calcolatrici.
ora chiedo si può fare qualcos'altro di piu carino in c? (ma fattibile :D )

Y3PP4
06-09-2009, 12:02
Una semplice interazione client-server, magari il classico "time server" (o anche "echo server") he gestisce la richiesta del client e gli ritorna l'ora e la data, quindi il client lo stampa a terminale.

Per gli inizi puoi realizzare un server iterativo, poi se vuoi complicarti un po' la vita e imparare a gestire più processi vai col multitasking/multithreading/multiplexing.

In questo modo impari a fare un semplice parser per gestire le richieste del client, impari le basi dei socket e della programmazione di rete (che è tutt'altra cosa dalla programmazione su un singolo sistema). Se poi vai con la gestione di più processi o threads impari anche questo lato (importante) della programmazione. Insomma, gli spunti per "perderci tempo" imparando molto non mancano.

Ciao!

khelidan1980
06-09-2009, 21:24
Una semplice interazione client-server, magari il classico "time server" (o anche "echo server") he gestisce la richiesta del client e gli ritorna l'ora e la data, quindi il client lo stampa a terminale.

Per gli inizi puoi realizzare un server iterativo, poi se vuoi complicarti un po' la vita e imparare a gestire più processi vai col multitasking/multithreading/multiplexing.

In questo modo impari a fare un semplice parser per gestire le richieste del client, impari le basi dei socket e della programmazione di rete (che è tutt'altra cosa dalla programmazione su un singolo sistema). Se poi vai con la gestione di più processi o threads impari anche questo lato (importante) della programmazione. Insomma, gli spunti per "perderci tempo" imparando molto non mancano.

Ciao!

a me pensare di usare il C per fare cose così mette la pelle d'oca....con un linguaggio diverso ci metteresti un decimo del tempo...

Y3PP4
06-09-2009, 23:28
a me pensare di usare il C per fare cose così mette la pelle d'oca....con un linguaggio diverso ci metteresti un decimo del tempo...

Personalmente quando lo feci a suo tempo mi intrigò parecchio, e mi fù molto utile. Ovviamente lo realizzai con non poche difficoltà dato che spesso gli errori erano di tipo sintattico -oltre che logici- e non copiavo codice a destra e manca. Le sole pagine man e la guida "Beej's Guide to Network Programming", anche se devo ammettere che spesso l'ironia fuori luogo dell'autore mi dava ai nervi :O Almeno spiega il perchè di molte cose.

Comunque io ho proposto in base al titolo :p lui ha scelto il linguaggio io gli ho dato lo spunto :D Vorresti negare che è una cosa interessante?:Prrr:

Comunque, se posso permettermi, se non l'hai mai fatto -e hai tempo da perdere, se conosci già 'ste cose- prova.

Sicuramente piacerà anche a te :sofico:

Ps. scherzi a parte il fatto che tu in un linguaggio "moderno" oggi ci metta pochi minuti a progettare un webserver è proprio grazie a chi a suo tempo "ti" ha scritto i metodi che automaticamente fanno quello che in C dovresti fare da zero. Ovviamente te lo sai già, non ho nulla da insegnarti, ci mancherebbe :) era solo per sottolineare (per chi non conosce bene i vari linguaggi) che comunque il C permette di capire la logica delle varie applicazioni, e la trovo una cosa impagabile -soprattutto per beneficio personale-. Ovvio che poi a lavoro se c'è possibilità si usa il linguaggio più comodo.

PPS. la maggior parte del post è ironica - eccezione per il fatto che mi è stato molto utile (a capire il linguaggio e per la netprogramming), per il primo P.S., per il fatto che odio l'umorismo di Beej e questo PPS. Ho capito (o almeno credo lol)quello che volevi dire, e certo, ad oggi pensare di farle ancora così queste cose, per chi ci lavora in mezzo può causare non pochi traumi...

Cordiali saluti.

khelidan1980
07-09-2009, 08:37
Personalmente quando lo feci a suo tempo mi intrigò parecchio, e mi fù molto utile. Ovviamente lo realizzai con non poche difficoltà dato che spesso gli errori erano di tipo sintattico -oltre che logici- e non copiavo codice a destra e manca. Le sole pagine man e la guida "Beej's Guide to Network Programming", anche se devo ammettere che spesso l'ironia fuori luogo dell'autore mi dava ai nervi :O Almeno spiega il perchè di molte cose.

Comunque io ho proposto in base al titolo :p lui ha scelto il linguaggio io gli ho dato lo spunto :D Vorresti negare che è una cosa interessante?:Prrr:

Comunque, se posso permettermi, se non l'hai mai fatto -e hai tempo da perdere, se conosci già 'ste cose- prova.

Sicuramente piacerà anche a te :sofico:

Ps. scherzi a parte il fatto che tu in un linguaggio "moderno" oggi ci metta pochi minuti a progettare un webserver è proprio grazie a chi a suo tempo "ti" ha scritto i metodi che automaticamente fanno quello che in C dovresti fare da zero. Ovviamente te lo sai già, non ho nulla da insegnarti, ci mancherebbe :) era solo per sottolineare (per chi non conosce bene i vari linguaggi) che comunque il C permette di capire la logica delle varie applicazioni, e la trovo una cosa impagabile -soprattutto per beneficio personale-. Ovvio che poi a lavoro se c'è possibilità si usa il linguaggio più comodo.

PPS. la maggior parte del post è ironica - eccezione per il fatto che mi è stato molto utile (a capire il linguaggio e per la netprogramming), per il primo P.S., per il fatto che odio l'umorismo di Beej e questo PPS. Ho capito (o almeno credo lol)quello che volevi dire, e certo, ad oggi pensare di farle ancora così queste cose, per chi ci lavora in mezzo può causare non pochi traumi...

Cordiali saluti.

te hai detto cose giustissime,e gli hai fornito un valido spunto ci mancherebbe era solo un osservazione personale! ;)
Comunque anche con un linguaggio stile python o java hai un bel po di lavoro da fare,cioè io non userei il C per imparare quegli argomenti da te citati,ma qui la richiesta era al contrario,degli esercizi per imparare il linguaggio e quindi è più che valida la tua risposta!

xgab
07-09-2009, 18:03
Una semplice interazione client-server, magari il classico "time server" (o anche "echo server") he gestisce la richiesta del client e gli ritorna l'ora e la data, quindi il client lo stampa a terminale.

Per gli inizi puoi realizzare un server iterativo, poi se vuoi complicarti un po' la vita e imparare a gestire più processi vai col multitasking/multithreading/multiplexing.

In questo modo impari a fare un semplice parser per gestire le richieste del client, impari le basi dei socket e della programmazione di rete (che è tutt'altra cosa dalla programmazione su un singolo sistema). Se poi vai con la gestione di più processi o threads impari anche questo lato (importante) della programmazione. Insomma, gli spunti per "perderci tempo" imparando molto non mancano.

Ciao!
calma calma :D passare da quiz e calcolatrici a server o quello che hai detto te mi sembra un pò troppo....:D
Personalmente quando lo feci a suo tempo mi intrigò parecchio, e mi fù molto utile. Ovviamente lo realizzai con non poche difficoltà dato che spesso gli errori erano di tipo sintattico -oltre che logici- e non copiavo codice a destra e manca. Le sole pagine man e la guida "Beej's Guide to Network Programming", anche se devo ammettere che spesso l'ironia fuori luogo dell'autore mi dava ai nervi :O Almeno spiega il perchè di molte cose.

Comunque io ho proposto in base al titolo :p lui ha scelto il linguaggio io gli ho dato lo spunto :D Vorresti negare che è una cosa interessante?:Prrr:

Comunque, se posso permettermi, se non l'hai mai fatto -e hai tempo da perdere, se conosci già 'ste cose- prova.

Sicuramente piacerà anche a te :sofico:

Ps. scherzi a parte il fatto che tu in un linguaggio "moderno" oggi ci metta pochi minuti a progettare un webserver è proprio grazie a chi a suo tempo "ti" ha scritto i metodi che automaticamente fanno quello che in C dovresti fare da zero. Ovviamente te lo sai già, non ho nulla da insegnarti, ci mancherebbe :) era solo per sottolineare (per chi non conosce bene i vari linguaggi) che comunque il C permette di capire la logica delle varie applicazioni, e la trovo una cosa impagabile -soprattutto per beneficio personale-. Ovvio che poi a lavoro se c'è possibilità si usa il linguaggio più comodo.

PPS. la maggior parte del post è ironica - eccezione per il fatto che mi è stato molto utile (a capire il linguaggio e per la netprogramming), per il primo P.S., per il fatto che odio l'umorismo di Beej e questo PPS. Ho capito (o almeno credo lol)quello che volevi dire, e certo, ad oggi pensare di farle ancora così queste cose, per chi ci lavora in mezzo può causare non pochi traumi...

Cordiali saluti.

te hai detto cose giustissime,e gli hai fornito un valido spunto ci mancherebbe era solo un osservazione personale! ;)
Comunque anche con un linguaggio stile python o java hai un bel po di lavoro da fare,cioè io non userei il C per imparare quegli argomenti da te citati,ma qui la richiesta era al contrario,degli esercizi per imparare il linguaggio e quindi è più che valida la tua risposta!

infatti lo so che il C è pittuttosto vecchio ma per me è piuttosto facile da capire come meccanismo invece il C++ è piu incasinato(lasciando perdere gli altri:D )

ma questa cosa dei server mi sta intrigando:D in cosa consiste?

Leed
07-09-2009, 19:30
Un consiglio? Se vuoi imparare davvero bene a programmare in C:
- Acquista un libro cartaceo ==>
http://www.ibs.it/code/9788850326334/deitel-harvey-m-deitel/c-corso-completo-di.html

- Leggi qualche ebook in rete ==>
http://blacklight.gotdns.org/guidac.pdf
http://edu.os3.it/html/manual/imparare_c.pdf

Inoltre ti consiglio di programmare in C su Linux o Mac ;)

xgab
07-09-2009, 19:44
Un consiglio? Se vuoi imparare davvero bene a programmare in C:
- Acquista un libro cartaceo ==>
http://www.ibs.it/code/9788850326334/deitel-harvey-m-deitel/c-corso-completo-di.html

- Leggi qualche ebook in rete ==>
http://blacklight.gotdns.org/guidac.pdf
http://edu.os3.it/html/manual/imparare_c.pdf

Inoltre ti consiglio di programmare in C su Linux o Mac ;)

grazie dei condsigli ma ancora nn ho capito xk è meglio su mac e su linux

Leed
07-09-2009, 19:53
Perchè C nasce su sistemi Unix.
Inoltre considera che quasi tutte le librerie nascono su Unix (socket, pcap per elecarne alcune) e successivamente viene effettuato il porting su piattaforma Windows (winsocket, winpcap).

Y3PP4
07-09-2009, 20:17
te hai detto cose giustissime,e gli hai fornito un valido spunto ci mancherebbe era solo un osservazione personale! ;)
Comunque anche con un linguaggio stile python o java hai un bel po di lavoro da fare,cioè io non userei il C per imparare quegli argomenti da te citati,ma qui la richiesta era al contrario,degli esercizi per imparare il linguaggio e quindi è più che valida la tua risposta!

:)

calma calma :D passare da quiz e calcolatrici a server o quello che hai detto te mi sembra un pò troppo....:D
Beh prima o poi il "grande" passo bisogna farlo :D

...meglio prima (di cosa lo scegli te).



infatti lo so che il C è pittuttosto vecchio ma per me è piuttosto facile da capire come meccanismo invece il C++ è piu incasinato(lasciando perdere gli altri:D ) In merito ci sono state numerose "lamentele" da parte di varie persone che vorrebbero un C moderno... ovviamente che faccia le stesse cose: praticamente lo stesso identico source semplicemente riscritto oggigiorno cosi da dire "il codice è recente". Insomma una cosa assurda.
IMHO, un linguaggio è come il vino o il formaggio, se è buono (valido) ed invecchiato (maturo) è meglio. Non bisogna confondere il fatto che sia vecchio con l'idea di "obsoleto" o non aggiornato, basta seguire la storyline dei vari standard. E' ancora un linguaggio vivissimo -e lo dimostra la portata del suo utilizzo-.


ma questa cosa dei server mi sta intrigando:D in cosa consiste?
Semplicemente un server ed un client.
Mi spiego in dettaglio, un programma che (banalmente parlando) apre una socket lo associa ad una porta e si mette in "ascolto" di eventuali richieste. In caso di un server iterativo avendo un solo processo ogni richiesta "intasa" il servizio, ovvero il server si occupa di gestire la richiesta del client e quindi non può rimanere in ascolto. La cosa è alquanto scomoda e quindi si ricorre alla creazione di più processi o thread per fare in modo che il processo (o thread) padre ad ogni richiesta crei un processo (o thread) dedicato che si occupi di gestire la richiesta del client in modo che il padre possa tornare in ascolto sulla porta per nuove richieste (server concorrente).

Non farti ingannare dalla mera complessità di questo discorso: una semplice lettura di pochi documenti in merito per capire il funzionamento client-server e il tuo problema sarà solo "come realizzarlo" e "con quali strumenti".

Un client invece crea il socket, lo associa ad una porta e si connette a un indirizzo ip e alla porta designata. E semplicemente esegue le richieste e prende eventuali risposte.
Come comunicano? Tramite flusso di dati tramite le socket.
Quindi il server deve "capire" cosa dice il client e lo fà con un parser che analizza la richiesta.

Nel caso specifico il client effettua una richiesta (in qualsiasi forma, banalmente potresti non volerla analizzare dato che ti aspetti solo un client tuo, ma ti consiglio un semplicissimo parser - anche in seguito -) e il server ritorna una stringa con l'ora attuale. Il client la riceve e stampa a video la stringa avuta.

Semplice ed efficace. Il mio è un esempio. Se fai questo impari anche a recuperare l'ora attuale, oltre a tutto il resto, ma potresti anche solo ritornare una stringa tua.

Per maggiori info cerca pure su google qualche semplice server... di solito l'echo-time server è un must, quasi come l'hello world :)

Ciao!

PS. per informazioni dettagliate sulla net programming leggiti qualche libro - se ti interessa - o la guida di Beej citata in un post precedente.

Y3PP4
07-09-2009, 20:22
scusami i due post consecutivi.
grazie dei condsigli ma ancora nn ho capito xk è meglio su mac e su linux

Se il tuo intento finale è lavorare su sistemi Windows non perdere tempo - anche se anche io ho iniziato su sistemi *nix like e confermo che è una cosa unica - e iniziati a studiare anche le winapi. Comunque puoi studiarti C dove vuoi e in seguito le winapi.

Se vuoi imparare un C "standard" ovvero codice che gira con poche modifiche (e le poche sono quasi sempre cambi di libreria specifica) rispetta bene le regole ANSI C.

Con gcc potresti diventare pedante :D (-pedantic -ansi).

Perchè C nasce su sistemi Unix.


Inversamente potremmo dire che lo Unix che oggi tutti ricordiamo è nato grazie a C. Poichè permette di portare il kernel su altre architetture dando inizio alla divulgazione del sistema operativo.

Comunque quoto, in un ambiente unix si sente lo stretto legame col C, sicuramente più che con Windows, ma non è detto che non si possa imparare anche su questo.

xgab
08-09-2009, 17:17
Perchè C nasce su sistemi Unix.
Inoltre considera che quasi tutte le librerie nascono su Unix (socket, pcap per elecarne alcune) e successivamente viene effettuato il porting su piattaforma Windows (winsocket, winpcap).
questo lo sapevo ma nn sapevo che ci arebbero migliorie
:)

Beh prima o poi il "grande" passo bisogna farlo :D

...meglio prima (di cosa lo scegli te).


In merito ci sono state numerose "lamentele" da parte di varie persone che vorrebbero un C moderno... ovviamente che faccia le stesse cose: praticamente lo stesso identico source semplicemente riscritto oggigiorno cosi da dire "il codice è recente". Insomma una cosa assurda.
IMHO, un linguaggio è come il vino o il formaggio, se è buono (valido) ed invecchiato (maturo) è meglio. Non bisogna confondere il fatto che sia vecchio con l'idea di "obsoleto" o non aggiornato, basta seguire la storyline dei vari standard. E' ancora un linguaggio vivissimo -e lo dimostra la portata del suo utilizzo-.


Semplicemente un server ed un client.
Mi spiego in dettaglio, un programma che (banalmente parlando) apre una socket lo associa ad una porta e si mette in "ascolto" di eventuali richieste. In caso di un server iterativo avendo un solo processo ogni richiesta "intasa" il servizio, ovvero il server si occupa di gestire la richiesta del client e quindi non può rimanere in ascolto. La cosa è alquanto scomoda e quindi si ricorre alla creazione di più processi o thread per fare in modo che il processo (o thread) padre ad ogni richiesta crei un processo (o thread) dedicato che si occupi di gestire la richiesta del client in modo che il padre possa tornare in ascolto sulla porta per nuove richieste (server concorrente).

Non farti ingannare dalla mera complessità di questo discorso: una semplice lettura di pochi documenti in merito per capire il funzionamento client-server e il tuo problema sarà solo "come realizzarlo" e "con quali strumenti".

Un client invece crea il socket, lo associa ad una porta e si connette a un indirizzo ip e alla porta designata. E semplicemente esegue le richieste e prende eventuali risposte.
Come comunicano? Tramite flusso di dati tramite le socket.
Quindi il server deve "capire" cosa dice il client e lo fà con un parser che analizza la richiesta.

Nel caso specifico il client effettua una richiesta (in qualsiasi forma, banalmente potresti non volerla analizzare dato che ti aspetti solo un client tuo, ma ti consiglio un semplicissimo parser - anche in seguito -) e il server ritorna una stringa con l'ora attuale. Il client la riceve e stampa a video la stringa avuta.

Semplice ed efficace. Il mio è un esempio. Se fai questo impari anche a recuperare l'ora attuale, oltre a tutto il resto, ma potresti anche solo ritornare una stringa tua.

Per maggiori info cerca pure su google qualche semplice server... di solito l'echo-time server è un must, quasi come l'hello world :)

Ciao!

PS. per informazioni dettagliate sulla net programming leggiti qualche libro - se ti interessa - o la guida di Beej citata in un post precedente.
beh c'è il C++.....
un pò come creare il wikipedia offline avendo i database e poi creare un server per averlo sul broswer ecc
sono sicuro che nn avete capito niente di uqello che ho detto ma l'ho letto su win magazine solo che li usavano l'HTML
scusami i due post consecutivi.


Se il tuo intento finale è lavorare su sistemi Windows non perdere tempo - anche se anche io ho iniziato su sistemi *nix like e confermo che è una cosa unica - e iniziati a studiare anche le winapi. Comunque puoi studiarti C dove vuoi e in seguito le winapi.

Se vuoi imparare un C "standard" ovvero codice che gira con poche modifiche (e le poche sono quasi sempre cambi di libreria specifica) rispetta bene le regole ANSI C.

Con gcc potresti diventare pedante :D (-pedantic -ansi).



Inversamente potremmo dire che lo Unix che oggi tutti ricordiamo è nato grazie a C. Poichè permette di portare il kernel su altre architetture dando inizio alla divulgazione del sistema operativo.

Comunque quoto, in un ambiente unix si sente lo stretto legame col C, sicuramente più che con Windows, ma non è detto che non si possa imparare anche su questo.

ok capito ma cosa si può fare col server

magari se mi scrivi la parte iniziale :D anche s enn ho capito come si fa cmq io uso il dev