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:
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:
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é:
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) |
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:
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,
Partager