Newsgroup: it.comp.programmare.win32
Titolo: E' possibile?

In un'applicazione client-server che sto realizzando, avrei intenzione di
realizzare una struct che poi dovrei inviare come dato della send. Invece di
indicare nella send il buffer da inviare, ho pensato di indicare
direttamente la struct. Ovviamente il server inizializza la medesima
struttura e dovrebbe salvare i dati ricevuti sempre nella struct. Pensate
sia possibile? Grazie

"Nuke" <man...@inwind.it_nospam> ha scritto nel messaggio
news:gnkhb.25226$e6.8...@twister2.libero.it...

Se il programma che riceve e quello che spedisce sono compilati sulla
stessa piattaforma (e possibilmente con lo stesso compilatore),
senz'altro. Ricordati solo che le strutture vengono passate per valore,
quindi nella send() e receive() devi passare &struttura.
Se invece le piattaforme sono diverse, cosa non cosi` rara nel caso di
programmazione di rete, ci sono una serie di particolari a cui fare
attenzione, fra i quali:
-Dimensione degli interi (non e` detto che int sia a 32 bit ovunque);
-Big endian/little endian (una sfilza di ntohs, htons e amici aiuta
parecchio);
-Allineamento dei dati (i compilatori seri dispongono della direttiva
#pragma pack);
Ovviamente questi problemi li avresti anche con degli array, per cui
dalla tua domanda potrei presumere che la seconda parte del mio
messaggio non ti sia interessata. :)
-- 
Lorenzo

 #pragma pack);
questa non l'ho capita ... io potrei benissimo rispondere che i compilatori seri 
non fanno uso di pragma !!!
cmq non essendo un'estensione standard tutti i compilatori forniscono il loro 
modo di gestire strutture senza allineamento ... con comandi diversi ... quindi 
altro problema da inserire nel sorgente ... una sfilza di if o define per 
sistemare i vari comandi per i compilatori usati ...
ciao

 il loro modo di gestire strutture senza allineamento
no. In Windows ce n'è uno solo:
#include <pshpackX.h>
dove X può essere 1, 2, 4 o 8, seguito da:
#include <poppack.h>
per ripristinare l'allineamento precedente
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.3. C, C++ and ASM developers
                               and beta testers are welcome!

 
[...]
Alle (giustissime) osservazioni di Lorenzo, aggiungo:
- La struttura non deve contenere puntatori o handle.
- La struttura deve avere dimensione fissa (in Visual C++ puoi 
dichiarare un campo a dimensione variabile alla fine della 
struttura).
- Se contiene stringhe, entrambi i sistemi devono usare la stessa 
codifica (questo può essere un problema se trasmetti da un sistema 
ASCII a uno che gestisce UNICODE).
-- 
Valter Minute
vmi...@inwind.it
 (the reply address of this message is invalid)

 ASCII a uno che gestisce UNICODE).
ti contraddici: le stringhe sono puntatori a char, ma la struttura
giustamente non deve contenere puntatori!
mi sembra alquanto strano che i caratteri della stringa stiano
direttamente *dentro* la struttura!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 direttamente *dentro* la struttura!
struct Pippo{
    char stringa[5];
};
-- 
Marco Barisione
http://spazioinwind.libero.it/marcobari/

 Alle (giustissime) osservazioni di Lorenzo, aggiungo:
[...]
al che io aggiungo:
 - i numeri in floating point non sono ovunque in formato IEEE
e chiudo: questa roba si chiama marshalling, esiste da secoli e so, per 
esperienza personale, che farla a mano è una pessima idea. Per esempio, 
in Windows si può usare MIDL per generare, a partire da una definizione 
del protocollo, gli stub client e server per impacchettare i dati prima 
di spedirli e spacchettarli in ricezione. Se ci si limita alle funzioni 
standard di DCE RPC, inoltre, il tutto sarà ragionevolmente portabile
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.4. C, C++ and ASM developers


 standard di DCE RPC, inoltre, il tutto sarà ragionevolmente portabile
per tanto cosi' non si fa prima a spedire il tutto in formato testo ???
ciao

 ??? 
se ti piace farti del male, puoi, e in modo standard. Esiste appunto un 
protocollo di RPC (SOAP) che trasmette i dati come XML


 
perche' farmi del male ???