Transmission/Réception partielle de structure via socket
Bonjour,
pourrait-on me confirmer que la continuité des données en mémoire d'une structure n'est pas garantie ? Mon idée est la suivante pour la définition d'une structure de requête de client à serveur. Mettons que pour une requête de type 0 on doive transmettre data1 et pour une requête de type 1 on doive transmettre data1 et data2 :
Code:
1 2 3 4 5 6
| typedef struct {
int requestType;
int data1;
char[20] data2;
//etc...
} request; |
Le client envoie toujours la même structure mais pas forcément en entier, ex :
Code:
1 2 3 4 5 6 7
| request req;
//...
// Type 0, envoi de requestType et data1 uniquement (2 int)
ret = send(socket, (void*)&req, sizeof(int) * 2, 0);
// Type 1, envoi de requestType, data1 et data 2
ret = send(socket, (void*)&req, sizeof(int) * 2 + sizeof(char) * 20, 0); |
Et du côté du serveur la réception se fait en fonction de requestType, ex :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| request req;
//...
// Réception du type de requête
ret = recv(socket, (void*)req->requestType, sizeOf(req.requestType), 0);
// Poursuite de la lecture des données
if(req->requestType > -1) {
ret = recv(socket, (void*)req->data1, sizeOf(req.data1), 0);
if(req->requestType > 0) {
ret = recv(socket, (void*)req.data2, sizeOf(req.data2) * 20, 0);
}
//etc.
} |
Pensez-vous que ce principe puisse fonctionner ? (a priori je dirais que non)
Merci d'avance.
(Je vais essayer de mon côté mais je n'ai pas de compilateur sous la main.