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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.