Bonjour,
je souhaite developper un programme sous win qui va se connecter a un serveur. Pour cela, les paquets a envoyés doivent etre construits d'une maniere bien précise :

[taille msg sur 4 octets] [code msg sur 4 octets] [taille 'user' sur 4] ['user' texte variable] [taille 'pass' sur 4] ['pass' texte variable]

De plus, les valeur numeriques (tout sauf user et pass) doivent etre ordonnées selon la "norme" little endian.
Donc, une fois envoyé, la partie utile du paquet doit ressembler à ça, avec user="JohnGalt" et pass="secret" :

1e00 0000 : taille msg (25)
0100 0000 : code msg (1)
0800 0000 : taille user (8 )
4a6f 686e 4761 6c74 : user
0600 0000 : taille pass (6)
7365 6372 6574 : pass

Voici ce que j'ai fait (pour l'instant jai laissé le little endian de coté...):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
char *buffer;
long *taille,*code, *szuser, *szpass, *version;
char *user, *pass;
 
buffer = (char *)malloc(1024);
 
taille= (long *)buffer;
*taille = 25;
 
code = (long *)(buffer + 4);
*code = 1;
 
szuser = (long *)(buffer + 8);
*szuser = 3;
 
user = buffer + 12;
memcpy(user,"oje",3);
......
//verif, ctmp est un char*
 
sprintf(ctmp,"%s", sizeof(buffer));
MessageBox(Dlg,ctmp,"TAILLE!!!",MB_OK);
 
//29 est la taille totale du msg
memcpy(ctmp,buffer,29);
MessageBox(Dlg,ctmp,"MSG!!!",MB_OK);
Avec ça j'obtient une taille affichée de 4 et le msg affiché (un simple caractere non imprimable) ne contient donc pas les chaines que je lui ai copié.
Je vous remercie pour votre aide