Je voudrais transmettre ce genre de structure via une socket :
struct packet
{
unsigned char type;
void *data;
};
data peut contenir différents types de données (structures ou tableau en
fonction du type).
Faut il que je crée autant de structure "packet" que j'ai de type
différent ?
Je voudrais transmettre ce genre de structure via une socket :
struct packet
{
unsigned char type;
void *data;
};
data peut contenir différents types de données (structures ou tableau en
fonction du type).
Faut il que je crée autant de structure "packet" que j'ai de type
différent ?
Je voudrais transmettre ce genre de structure via une socket :
struct packet
{
unsigned char type;
void *data;
};
data peut contenir différents types de données (structures ou tableau en
fonction du type).
Faut il que je crée autant de structure "packet" que j'ai de type
différent ?
La structure « packet », tu en as défini une, et non se ulement tu ne
pourras pas en définir d'autres mais en plus tu n'as à prior i pas
besoin de le faire. Ce sont les types de données pointés par le
« void * » qui seront éventuellement multiples et varià ©s.
Et bien sûr, selon le type de données, la fonction de sé rialisation
et celle de désérialisation ne feront pas la même chose .
La structure « packet », tu en as défini une, et non se ulement tu ne
pourras pas en définir d'autres mais en plus tu n'as à prior i pas
besoin de le faire. Ce sont les types de données pointés par le
« void * » qui seront éventuellement multiples et varià ©s.
Et bien sûr, selon le type de données, la fonction de sé rialisation
et celle de désérialisation ne feront pas la même chose .
La structure « packet », tu en as défini une, et non se ulement tu ne
pourras pas en définir d'autres mais en plus tu n'as à prior i pas
besoin de le faire. Ce sont les types de données pointés par le
« void * » qui seront éventuellement multiples et varià ©s.
Et bien sûr, selon le type de données, la fonction de sé rialisation
et celle de désérialisation ne feront pas la même chose .
La structure « packet », tu en as défini une, et non seulement tu ne
pourras pas en définir d'autres mais en plus tu n'as à priori pas
besoin de le faire. Ce sont les types de données pointés par le
« void * » qui seront éventuellement multiples et variés.
C'est bien mon but, pouvoir mettre dans mon champ data, tout et n'importe
quoi.
Le soucis, quand j'envoie via la socket ma structure "packet", je n'envoie
que le pointeur "data" et non les données (ce qui me semble logique).
Et bien sûr, selon le type de données, la fonction de sérialisation
et celle de désérialisation ne feront pas la même chose.
Je pense que c'est à ce niveau que je bloque. Pourrais tu m'en dire plus
la dessus ?
La structure « packet », tu en as défini une, et non seulement tu ne
pourras pas en définir d'autres mais en plus tu n'as à priori pas
besoin de le faire. Ce sont les types de données pointés par le
« void * » qui seront éventuellement multiples et variés.
C'est bien mon but, pouvoir mettre dans mon champ data, tout et n'importe
quoi.
Le soucis, quand j'envoie via la socket ma structure "packet", je n'envoie
que le pointeur "data" et non les données (ce qui me semble logique).
Et bien sûr, selon le type de données, la fonction de sérialisation
et celle de désérialisation ne feront pas la même chose.
Je pense que c'est à ce niveau que je bloque. Pourrais tu m'en dire plus
la dessus ?
La structure « packet », tu en as défini une, et non seulement tu ne
pourras pas en définir d'autres mais en plus tu n'as à priori pas
besoin de le faire. Ce sont les types de données pointés par le
« void * » qui seront éventuellement multiples et variés.
C'est bien mon but, pouvoir mettre dans mon champ data, tout et n'importe
quoi.
Le soucis, quand j'envoie via la socket ma structure "packet", je n'envoie
que le pointeur "data" et non les données (ce qui me semble logique).
Et bien sûr, selon le type de données, la fonction de sérialisation
et celle de désérialisation ne feront pas la même chose.
Je pense que c'est à ce niveau que je bloque. Pourrais tu m'en dire plus
la dessus ?
Mais il y a sans doute mieux, surtout si la machine émettrice n'a pas
forcément la même architecture que la machine réceptric e :
https://www.google.fr/search?q=s%C3%A9rialisation+en+C
Mais il y a sans doute mieux, surtout si la machine émettrice n'a pas
forcément la même architecture que la machine réceptric e :
https://www.google.fr/search?q=s%C3%A9rialisation+en+C
Mais il y a sans doute mieux, surtout si la machine émettrice n'a pas
forcément la même architecture que la machine réceptric e :
https://www.google.fr/search?q=s%C3%A9rialisation+en+C
struct packet
{
unsigned char type;
void *data;
};
data peut contenir différents types de données (structures ou tableau en
fonction du type).
Faut il que je crée autant de structure "packet" que j'ai de type
différent ?
struct packet
{
unsigned char type;
void *data;
};
data peut contenir différents types de données (structures ou tableau en
fonction du type).
Faut il que je crée autant de structure "packet" que j'ai de type
différent ?
struct packet
{
unsigned char type;
void *data;
};
data peut contenir différents types de données (structures ou tableau en
fonction du type).
Faut il que je crée autant de structure "packet" que j'ai de type
différent ?
Cote serialisation, les choses sont plus sournoises que prevu... souvent
ca va marcher jusqu'a ce que ca ne marche pas. Si on envoie des donnees
d'une machine a une autre, souvent le premier test se fait sur des machines
identiques... mais des qu'on utilise vraiment du reseau, il va y avoir
des differences:
- de taille des donnees (int sur 32 ou 64 bits, etc)
- de codage des donnees (float IEEE ou autre, encodage des chaines de
caractere)
- d'alignement et de packing (octets intersticiels "de bourrage" dans certaines
structures)
- d'endianness (ordre des octets dans un short, un int, etc).
C'est pour ca que les protocoles internet "classiques" sont bases sur du
texte (telnet, en gros), avec des contraintes supplementaires (retour
a la ligne=retour a la ligne dos, crlf, ascii uniquement...)
envoyer directement des donnees binaires... c'est complique, et casse-gueule
si on veut que ca soit interoperable.
(confere ntohs et assimiles)
Cote serialisation, les choses sont plus sournoises que prevu... souvent
ca va marcher jusqu'a ce que ca ne marche pas. Si on envoie des donnees
d'une machine a une autre, souvent le premier test se fait sur des machines
identiques... mais des qu'on utilise vraiment du reseau, il va y avoir
des differences:
- de taille des donnees (int sur 32 ou 64 bits, etc)
- de codage des donnees (float IEEE ou autre, encodage des chaines de
caractere)
- d'alignement et de packing (octets intersticiels "de bourrage" dans certaines
structures)
- d'endianness (ordre des octets dans un short, un int, etc).
C'est pour ca que les protocoles internet "classiques" sont bases sur du
texte (telnet, en gros), avec des contraintes supplementaires (retour
a la ligne=retour a la ligne dos, crlf, ascii uniquement...)
envoyer directement des donnees binaires... c'est complique, et casse-gueule
si on veut que ca soit interoperable.
(confere ntohs et assimiles)
Cote serialisation, les choses sont plus sournoises que prevu... souvent
ca va marcher jusqu'a ce que ca ne marche pas. Si on envoie des donnees
d'une machine a une autre, souvent le premier test se fait sur des machines
identiques... mais des qu'on utilise vraiment du reseau, il va y avoir
des differences:
- de taille des donnees (int sur 32 ou 64 bits, etc)
- de codage des donnees (float IEEE ou autre, encodage des chaines de
caractere)
- d'alignement et de packing (octets intersticiels "de bourrage" dans certaines
structures)
- d'endianness (ordre des octets dans un short, un int, etc).
C'est pour ca que les protocoles internet "classiques" sont bases sur du
texte (telnet, en gros), avec des contraintes supplementaires (retour
a la ligne=retour a la ligne dos, crlf, ascii uniquement...)
envoyer directement des donnees binaires... c'est complique, et casse-gueule
si on veut que ca soit interoperable.
(confere ntohs et assimiles)