Bonjour,
Je suis entrain de faire un mini jeu en réseau avec une architecture Client/Serveur. Voici mon code, côté serveur:
int main()
{
int nbClients;
sf::TcpListener listener;
sf::TcpSocket c1, c2;
sf::Packet p, p2;
short port = 1601;
listener.listen(port);
reload:
std::cout << "Server launched on port " << port << ", waiting for connections..." << std::endl;
listener.accept(c1);
std::cout << "A client has connected, sending a packet to him..." << std::endl;
p << "Succesfully connected" << "wait";
c1.send(p);
p.clear();
listener.accept(c2);
std::cout << "A client has connected, sending a packet to him..." << std::endl;
p << "Succesfully connected" << "launch";
c2.send(p);
p.clear();
p << "launch";
c1.send(p);
p.clear();
while (true)
{
if (c1.Disconnected && !c2.Disconnected)
{
p << "shut";
c2.send(p);
c2.disconnect();
p.clear();
std::cout << "A client has disconnected, reloading server..." << std::endl;
goto reload;
}
if (c2.Disconnected && !c1.Disconnected)
{
p << "shut";
c1.send(p);
c1.disconnect();
p.clear();
std::cout << "A client has disconnected, reloading server..." << std::endl;
goto reload;
}
if (c1.Disconnected && c2.Disconnected)
{
c1.disconnect();
c2.disconnect();
std::cout << "Clients have disconnected, reloading server..." << std::endl;
goto reload;
}
c1.receive(p);
c2.receive(p2);
std::cout << "Data Received, sending it..." << std::endl;
c1.send(p2);
c2.send(p);
p.clear();
p2.clear();
}
return 0;
}
Le problème est que dès que le thread entre dans la while loop, il entre directement dans "if (c1.Disconnected && c2.Disconnected)" et ressort de la loop, alors que les deux clients ne se sont pas déconnectés. Par contre, j'ai remarqué que une fois connecté au serveur, windows affiche que le client ne répond pas alors qu'il répond parfaitement (le jeu marche). Si vous voulez du code côté client, dites le moi.