Voilà, je vais écrire une petite application réseau et pour cela j'essaye de créer une petite classe pour gérer les flux de données.
Mon but et de décomposer mes "packets" en deux parties : entete + corps de message.
Voici une partie de ma classe qui s'occupe de créer un packet :
(Dans mon exemple HEADER_SIZE = 6 et PACKET_SIZE = 1024)
Voilà, en gros pour créer un packet du type "000005Salut à tous!" je fais :
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
28
29
30
31
32
33
34
35
36
37
38 class Packet { private: string m_data; public: Packet(unsigned long h, long b) { //Marche pas :( ostringstream body; body << b; Packet(h, body.str()); } Packet(unsigned long h, string body) { ostringstream header; header << h; size_t header_len = header.str().size(); if(header_len > HEADER_SIZE || header_len + body.size() > PACKET_SIZE) return; string tmp; tmp.assign(HEADER_SIZE - header_len, '0'); tmp += header.str(); tmp += body; m_data = tmp; cout << tmp << " " << m_data<<endl; //Affiche bien ce que je désire } ~Packet() {} string content() { cout << m_data; //N'affiche plus rien! return m_data; //Ne retourne rien! } };
et le résultat je le récupère avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Packet pck(5, "Salut à tous!")
Mais comme vous l'avez surement remarqué, j'ai prévu un autre constructeur au cas où je veuille passer un entier en corps de message.
Code : Sélectionner tout - Visualiser dans une fenêtre à part pck.content()
J'appelle mon constructeur ainsi:
Tout marche parfaitement, le corps de message est transmis au second constructeur sous la forme d'une chaine de caractère, et la dernière ligne du second constructeur m'affiche bien ce que je veux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Packet pck(5, 12)
Cependant, quand je tente de récupérer mon packet avec :
Il n'y a plus rien dedans!
Code : Sélectionner tout - Visualiser dans une fenêtre à part pck.content()
Le code que j'ai masquée n'est jamais appellé, il s'agit juste de l'opération inverse, soit de récupérer un packet sous la forme entete + corps de message.
Comment cela ce fait il?
Si quelqu'un pouvait m'expliquer mon erreur!
Merci bien!
Partager