![]() |
Show 150 posts per page |
.dsy:it. (http://www.dsy.it/forum/)
- Reti di calcolatori (http://www.dsy.it/forum/forumdisplay.php?forumid=68)
-- [CURIOSITA'] Programmazione in C (http://www.dsy.it/forum/showthread.php?threadid=16533)
[ programmazione in c] domanda/curiosità
ora che sono riuscito a fare i primi programmini cazzutissimi in tcp e udp in java volevo cercare di guardare qualcosina di c, giusto per capirci qualcosa.
nelle slides di cassiano ho visto che viene trattata la costruzione di una classe client e server in c.
la mia domanda è la seguente: a differenza di java, che ha una struttura completamente diversa tra TCP e UDP, per programmare con questi due protocolli in c basta sostituire il terzo parametro quando si crea la socket oppure c'è altro da fare?
Non ho sottomano le slide, potresti postare il pezzo di codice cui ti riferisci?
__________________
?
questo:
sd = (socket(AF_INET, SOCK_STREAM,0));
da quanto ho capito, gli ultimi due parametri indicano il tipo di protocollo da usare per la comunicazione; io intendevo dire:
per farla in tcp : (socket(AF_INET, SOCK_STREAM,6));
mentre per farla in udp: (socket(AF_INET, SOCK_DGRAM,17));
ah ecco.
Dunque il terzo parametro lascialo pure su 0 (se non sbaglio determina una scelta automatica).
La differenza tra TCP e UDP la fai con SOCK_STREAM e SOCK_DGRAM.
__________________
?
Re: [ programmazione in c] domanda/curiosità
Originally posted by GinoPilotino
la mia domanda è la seguente: a differenza di java, che ha una struttura completamente diversa tra TCP e UDP, per programmare con questi due protocolli in c basta sostituire il terzo parametro quando si crea la socket oppure c'è altro da fare?
__________________
E lo sceriffo americano non lo sa / ma quando parla ride tutta la città / vile fellone vieni a singolar tenzone / unza unza umpappà troppe truppe mariscià.
Non ci voleva l'eruzione della lava / e due piccioni si contendono la fava / sposa bagnata, bambina svergognata / la questione è delicata / come bolle la patata.
Basta! E' finita la festa
[L'ovile delle vanità, Folkabbestia]
il problema è che sostituendo semplicemente i parametri della socket non funziona.
il server crea la socket e mi entra in loop infinito continuando a dire che sbaglia ad accettare il client.
qualcuno c'è riusciuto a farlo funzionare in udp?
Originally posted by GinoPilotino
il problema è che sostituendo semplicemente i parametri della socket non funziona.
il server crea la socket e mi entra in loop infinito continuando a dire che sbaglia ad accettare il client.
qualcuno c'è riusciuto a farlo funzionare in udp?
__________________
E lo sceriffo americano non lo sa / ma quando parla ride tutta la città / vile fellone vieni a singolar tenzone / unza unza umpappà troppe truppe mariscià.
Non ci voleva l'eruzione della lava / e due piccioni si contendono la fava / sposa bagnata, bambina svergognata / la questione è delicata / come bolle la patata.
Basta! E' finita la festa
[L'ovile delle vanità, Folkabbestia]
eh si futur, il problema dev'essere proprio quello che dici tu.
ora però voglio prima cercare di capire alcune cose basilari del codice.
chi è in grado di tradurre cosa fa questa riga di codice???
client.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr))->s_addr;
e da dove escono fuori h_addr, e s_addr???
Così a occhio dovrebbero essere variabili definite nel codice...
Comunque per usare UDP devi usare sendto() e recvfrom()
__________________
?
qualcuno è in grado di scrivere un codice TCP e UDP in c commentandolo come si deve? 
Originally posted by GinoPilotino
qualcuno è in grado di scrivere un codice TCP e UDP in c commentandolo come si deve?![]()
__________________
E lo sceriffo americano non lo sa / ma quando parla ride tutta la città / vile fellone vieni a singolar tenzone / unza unza umpappà troppe truppe mariscià.
Non ci voleva l'eruzione della lava / e due piccioni si contendono la fava / sposa bagnata, bambina svergognata / la questione è delicata / come bolle la patata.
Basta! E' finita la festa
[L'ovile delle vanità, Folkabbestia]
Originally posted by futurbaggio
Tu sei stato in grado di scriverlo, io sono in grado di commentartelo
Roberto
PS Io ho fatto qualcosina in TCP, ma qua il problema è UDP: metti il codice!
Originally posted by GinoPilotino
la mia non è una critica al corso; in java, linguaggio che m'hanno insegnato ad usare, ho imparato a fare qualcosina di programmazione di reti ma uno che non ha mai visto il c mi dici che cosa potrà mai capire da una riga di codice come quella postata da me in precedenza?
__________________
E lo sceriffo americano non lo sa / ma quando parla ride tutta la città / vile fellone vieni a singolar tenzone / unza unza umpappà troppe truppe mariscià.
Non ci voleva l'eruzione della lava / e due piccioni si contendono la fava / sposa bagnata, bambina svergognata / la questione è delicata / come bolle la patata.
Basta! E' finita la festa
[L'ovile delle vanità, Folkabbestia]
dopo diritto posto tutto il codice. 
Salve gente,come da consiglio di yeah,visto che sono ancora al momento uno Winzozziano (
),ho scaricato MinGW...
Volevo esser sicuro di averlo installato bene,perchè scrivendo un codice preso pari pari da una guida al C,l'applicazione mi si impalla...Ecco il codicillo simplizissimus:
code:
#include <stdio.h> char *string = "Rosso\n"; int main(int argc, char *argv[]) { printf(string); *(string+3) = 'p'; printf(string); }
__________________
GET DROPBOX
# il grado di lentezza è direttamente proporzionale all'intensità della memoria;il grado di velocità è direttamente proporzionale all'intensità dell'oblio (Kundera) #
BLOG: Byte Strike
ChRiS 
Originally posted by Voodoo
Salve gente,come da consiglio di yeah,visto che sono ancora al momento uno Winzozziano (),ho scaricato MinGW...
Volevo esser sicuro di averlo installato bene,perchè scrivendo un codice preso pari pari da una guida al C,l'applicazione mi si impalla...Ecco il codicillo simplizissimus:
code:
#include <stdio.h> char *string = "Rosso\n"; int main(int argc, char *argv[]) { printf(string); *(string+3) = 'p'; printf(string); }
code:
#include <stdio.h> char s[] ="Rosso\n"; char *string = s; int main(int argc, char *argv[]) { printf(string); *(string+3) = 'p'; printf(string); return 0; }
__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family
Originally posted by UZI
ma il fatto è che questa stringa è dichiarata come costante

per cui evidentemente un accesso in memoria del tipo *(string+3)

code:
#include <stdio.h> char *string = "Rosso\n"; char p; int main(void) { p = *(string+3); printf("%c", p); }

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~
Non so cosa stabilisca lo standard a riguardo, ma ricordo anche io che una stringa usata in quel modo dovrebbe risultare costante.
Stranamente, il compilatore del Visual C++ non la pensa allo stesso modo e il codice compilato con esso funziona perfettamente 
Io suggerirei cmq di usare
char string[] = "Rosso\n";
così sei sicuro che puoi scriverci e leggerci senza problemi 
__________________
?
Originally posted by DeepBlue
mmm
Più o meno
Leggete qui: http://www.eskimo.com/~scs/C-faq/q1.32.html
No, calma
In lettura puoi benissimo accedere a quella zona di memoria. Infatti questo:

__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family
Originally posted by UZI
ondo questa logica, il ragionamento non fà una grinza, ma a quanto dice yeah ora con visual c++ il codice funziona... mah![]()

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~
Originally posted by DeepBlue
Il compilatore del VC++ non è gcc![]()
__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family
Personalmente non trovo scorretto il comportamento di vc++: quando viene dichiarato il tutto, in qualche modo il programma indica una porzione di memoria in cui ci sono alcune lettere contigue.
Tale memoria appartiene al processo come quella di qualsiasi altra variabile (per lo meno globale e locale al blocco di codice in esecuzione) e dovrebbe essere scrivibile senza problemi.
La cosa che mi è strana è che l'errore lo da in runtime, non in compile time... boh 
__________________
?
Originally posted by yeah
Personalmente non trovo scorretto il comportamento di vc++: quando viene dichiarato il tutto, in qualche modo il programma indica una porzione di memoria in cui ci sono alcune lettere contigue.
Tale memoria appartiene al processo come quella di qualsiasi altra variabile (per lo meno globale e locale al blocco di codice in esecuzione) e dovrebbe essere scrivibile senza problemi.
La cosa che mi è strana è che l'errore lo da in runtime, non in compile time... boh![]()
__________________
those who test will find a bullet in they chest
put ta rest
by a brotha who was hopeless
grow up broke on tha rope of insanity
how many pistols smoking coming from a broken family
Beh,grazie ragazzi,sono veramente commosso per tutto l'interessamento dimostrato per quel programmino,quel "coso" innocente...
Mi avete reso un bambino felice
![]()
__________________
GET DROPBOX
# il grado di lentezza è direttamente proporzionale all'intensità della memoria;il grado di velocità è direttamente proporzionale all'intensità dell'oblio (Kundera) #
BLOG: Byte Strike
ChRiS 
| All times are GMT. The time now is 05:24. | Show all 24 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.