Bonjour,

Je viens aujourd'hui suite à un petit soucis que je rencontre dans mon application réseau et qui me parait étrange. Le problème se situe lors d'un envoi/réception précis. Donc tout d'abord voici un petit bout de code pour illustrer:

Méthode add:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
template<typename T>
void add(const T & msg )
{
      std::ostringstream oss;
      oss << msg;
      m_Data += oss.str() + '|';
}
Méthode SendData:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
void Server::sendData(int index, NetworkMessage& msg)
{
    ostringstream oss;
    string str = "";
 
    oss << msg.getType();
    str = oss.str() + '|' + msg.getMessage();
 
    unsigned int n = send(m_Client[index]->getSocket(), str.c_str(), str.size(), 0);
    if(n < 0)
        removeClient(index);
}
Code incriminé:
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
NetworkMessage msg1(DATA_NEW_CARD, "blablabla");
sendData(index, msg1);// (envoi 1)
 
vector<int> infosIndex = m_Zone[num]->getInfos();
for (unsigned int i = 0; i < infosIndex.size(); i++)
{
      NetworkMessage msg(DATA_NEW_CARD);
      msg.add(m_Cards[infosIndex[i]]->getIndex());
      msg.add(m_Cards[infosIndex[i]]->getName());
      msg.add(m_Cards[infosIndex[i]]->getNum());
      msg.add(m_Cards[infosIndex[i]]->getType());
      msg.add(m_Cards[infosIndex[i]]->getSize());
      sendData(index, msg); // (envoi 2)
}
 
NetworkMessage msg2(DATA_NEW_CARD, "blablabla");
sendData(index, msg2);// (envoi 3)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Format trame attendue côté client: msg_type|index|name|num|type|size|
Lors des envois 1 et 3 la trame attendue est correcte mais le problème se pose lors de l'envoi 2.

Ma vision de l'envoi 2:

- Instanciation d'un objet msg avec en paramètre le type du message
- Ajout de divers infos au contenu de msg
- Envoi
- Puis on recommence autant de fois que nécessaire...

Il devrai donc y avoir X envois (i < infosIndex.size()) mais voici ce que j'obtiens côté client:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Trame reçue: msg_type|index|name|num|type|size|msg_type|index|name|num|type|size|msg_type|index|name|num|type|size|...
(les X envois qui devrait êtres reçues séparément sont condenser en un message)

J'espère que tout cela sera suffisant pour tenter de me répondre ^^"
En tout cas, j'arrive pas a comprendre pourquoi le code fait cela =/

Cordialement,