PDA

Visualizza la versione completa : [C] Programmazione Socket


andry85
28-02-2007, 13:07
Salve devo fare un programma in C di un client che mandi ad un server due numeri e il server gli restutuisca la somma dei due numeri.In numeri devo essere in binario pure (operandi e risultato su 16 bit in Network Order). il client deve inviare al server 4 byte:
primi 2: primo numero;
secondi 2: secondo numero.
Il server restituisce tre byte il primo contiene lo stato (esito dell'operazione: 0 o 1), e gli altri due il risulato della somma.

Sapreste indicarmi una soluzione per la parte che riguarda l'invio dei due operandi in poi??? Devo usare le funzione host to network giusto? Il problema che non riesco...
Grazie

oregon
28-02-2007, 13:28
Che tipo di soluzione cerchi? Codice pronto o una indicazione?

Ovviamente, come hai messo nel titolo, devi usare i socket (windows? linux?) e le funzioni relative ma non vedo come ti possa servire a chiarirti le idee ...

LeleFT
28-02-2007, 13:38
Ricorda che il linguaggio va aggiunto anche nel titolo della discussione.

Lo aggiungo io.



Ciao. :ciauz:

andry85
28-02-2007, 14:00
Originariamente inviato da andry85
Salve devo fare un programma in C di un client che mandi ad un server due numeri e il server gli restutuisca la somma dei due numeri.In numeri devo essere in binario pure (operandi e risultato su 16 bit in Network Order). il client deve inviare al server 4 byte:
primi 2: primo numero;
secondi 2: secondo numero.
Il server restituisce tre byte il primo contiene lo stato (esito dell'operazione: 0 o 1), e gli altri due il risulato della somma.

Sapreste indicarmi una soluzione per la parte che riguarda l'invio dei due operandi in poi??? Devo usare le funzione host to network giusto? Il problema che non riesco...
Grazie

Innanzitutto Linux. Poi, come ho scritto sopra, se qualcuno pu scrivermi il pezzo di codice (il server gi fatto devo fare solo il client ) che vai dall'inserimento degli operandi fino alla scrittura del risultato che arriva dal server.
Grazie.

oregon
28-02-2007, 14:06
Originariamente inviato da andry85
Poi, come ho scritto sopra,

Ma dove l'avevi scritto? :confused:



se qualcuno pu scrivermi il pezzo di codice (il server gi fatto devo fare solo il client ) che vai dall'inserimento degli operandi fino alla scrittura del risultato che arriva dal server.


Mi dispiace ma proprio non ho tempo per scrivere codice pronto per l'uso ... magari correggere o integrarne uno che mostri e non ti funziona, si puo' fare ...

E poi, dato che hai il server, perche' non prendi spunto da quello per tentare di scrivere il client? Un po' di impegno non guasterebbe ...

andry85
28-02-2007, 14:19
Originariamente inviato da oregon
Ma dove l'avevi scritto? :confused:



Mi dispiace ma proprio non ho tempo per scrivere codice pronto per l'uso ... magari correggere o integrarne uno che mostri e non ti funziona, si puo' fare ...

E poi, dato che hai il server, perche' non prendi spunto da quello per tentare di scrivere il client? Un po' di impegno non guasterebbe ...


Guarda che non sono venuto su questo forum per farmi dare la pappa pronta. Il server un file .exe quindi non ho il file c. E' due giorni che provo a fare questo programma e non riesco, considerando il fatto che il mio programma che riguarda i socket. Cmq adesso vi metto il pezzo di programma che non funziona cos magari qualcuno pu aiutarmi.


char buf[MAXBUFL+1],res[MAXBUFL+1],res1[MAXBUFL+1];
unsigned int n1,n2,r1,r2;
uint16_t n1n,n2n,r2r,r1r;

Readline(0,buf,sizeof(buf)); // leggo i due numeri da stdin e metto nel buffer buf
sscanf(buf,"%d %d", &n1,&n2); // estraggo i due numeri dal buffer buf
n1n=htons(n1); // li converto in formato di rete
n2n=htons(n2);
sprintf(buf,"%d %d",n1n,n2n); // li metto nel buf
Writen (sockfd, buf, 4); // scrivo sul socket i 4 byte(primo e secondo num.)
Readn(sockfd,res,3); // leggo dal socket i 3 byte che mi invia il server e metto in res


sscanf(res,"%d %d", &r1,&r2); //Estraggo i due numeri
r1r=ntohs(r1); // lo stato dell'operazione
r2r=ntohs(r2); // il risultato, li converto in formato di host
sprintf(res1,"%d %d\r\n",r1r,2r); // metto nel buffer res1
Writen (1, res1, 3); // stampo su stdout
Close(sockfd);


Lo stile di programmazione non un granch per vi ripeto sono all'inizio. Spero sia tutto chiaro.Grazie.

Loading