1
Réseau / Problème dans le système d'écoute côté serveur
« le: Mars 13, 2014, 05:21:55 pm »
Bonjour à tous,
Je réalise à titre d'entrainement un client/serveur basique de type chat. Je rencontre un problème lors de l'écoute et du traitement des données côté serveur, mon programme server toutefois compile bien et ne plante pas mais il ne retourne pas le résultat attendu .
Mon système fonctionne ainsi :
Le serveur stock les clients dont la connexion à réussi dans un conteneur list et à partir de ce conteneur list j'écoute chaque client connecté pour gérer les packets entrant/sortant.
Voici le morceau de code traitant de ceci :
Mon problème ce situe dans la seconde partie du code, ici précisément :
Ma condition est toujours fausse quoi qu'il arrive ce qui fait que mon client plante puisque le packet n'arrive jamais, il faut que j'éteigne le serveur pour débloquer le client.
Si une âme charitable pouvait m'expliquer ce que j'ai fait de travers, je suis preneur.
Merci par avance.
Je réalise à titre d'entrainement un client/serveur basique de type chat. Je rencontre un problème lors de l'écoute et du traitement des données côté serveur, mon programme server toutefois compile bien et ne plante pas mais il ne retourne pas le résultat attendu .
Mon système fonctionne ainsi :
Le serveur stock les clients dont la connexion à réussi dans un conteneur list et à partir de ce conteneur list j'écoute chaque client connecté pour gérer les packets entrant/sortant.
Voici le morceau de code traitant de ceci :
Code: [Sélectionner]
if(selector.wait(sf::milliseconds(100)))
{
if (selector.isReady(listener))
{
client = new sf::TcpSocket;
if(listener.accept(*client) == sf::Socket::Done)
{
clientList.emplace_back(client);
for(std::list<std::unique_ptr<sf::TcpSocket>>::iterator it = clientList.begin(); it != clientList.end(); ++it)
{
if(**it == *client)
{
selector.add(**it);
}
}
std::cout << "Client IP : " << client->getRemoteAddress() << "connected" << std::endl;
}else{
delete client;
}
}
if(!clientList.empty())
{
for(auto& clientCurrentList: clientList)
{
std::cout << selector.isReady(*clientCurrentList) << std::endl;
if(selector.isReady(*clientCurrentList))
{
std::cout << "test2" << std::endl;
if(clientCurrentList->receive(packet) == sf::Socket::Done)
{
std::cout << "Client IP : " << clientCurrentList->getRemoteAddress() << "send a packet" << std::endl;
packet >> message;
for(auto& sendClientCurrentList: clientList)
{
packet << message;
sendClientCurrentList->send(packet);
}
}else if(clientCurrentList->receive(packet) == sf::Socket::Error)
{
std::cout << "Client IP : " << clientCurrentList->getRemoteAddress() << "error with a packet" << std::endl;
}
}
}
}
}
Mon problème ce situe dans la seconde partie du code, ici précisément :
Code: [Sélectionner]
if(selector.isReady(*clientCurrentList))
Ma condition est toujours fausse quoi qu'il arrive ce qui fait que mon client plante puisque le packet n'arrive jamais, il faut que j'éteigne le serveur pour débloquer le client.
Si une âme charitable pouvait m'expliquer ce que j'ai fait de travers, je suis preneur.
Merci par avance.