Bonjour,
merci par avance de votre aide.
J'ai un petit projet de jeu en réseau mais j'ai quelque difficulté pour dans la communication client/serveur.
J'aimerai réussir a faire le code le plus propre possible mais je n'arrive pas a me connecter proprement : c'est à dire que quand je fais mon connect sur le TcpSocket vers mon serveur, sur le serveur je vois bien que je suis connecté mais par contre coté client mon socket garde toujours le status "NotReady".
Il y a surement un concept que j'ai mal compris...
Je vous fournis les codes simplifié :
ManagerNetwork.cpp (coté client)
#include "ManagerNetwork.h"
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 7777
ManagerNetwork::ManagerNetwork() : Manager()
{
std::cout << "Initialisation du ManagerNetwork" << std::endl;
m_socket = new sf::TcpSocket();
m_socket->setBlocking(false);
tryConnect();
}
ManagerNetwork::~ManagerNetwork()
{
std::cout << "Destruction du ManagerNetwork" << std::endl;
}
void ManagerNetwork::tryConnect()
{
m_socket->disconnect();
std::cout << "Tentative de connexion :" << SERVER_IP << ":" << SERVER_PORT << std::endl;
sf::Socket::Status status_connect = m_socket->connect(sf::IpAddress(SERVER_IP), SERVER_PORT);
bool quit = false;
while (quit == false)
{
switch (status_connect)
{
case sf::Socket::Done:
{
std::cout << "Connexion OK" << std::endl;
quit = true;
}
break;
case sf::Socket::NotReady:
std::cout << "Not ready" << std::endl;
break;
default:
std::cout << "Echec connect" << std::endl;
break;
}
}
}
main.cpp (coté serveur)
#include <iostream>
#include <SFML\Network.hpp>
#include <stdlib.h>
#define NETWORK_PORT 7777
int main()
{
sf::TcpListener listener;
listener.listen(NETWORK_PORT);
sf::SocketSelector selector;
selector.add(listener);
std::vector<sf::Socket*> sockets;
sockets.push_back(&listener);
std::cout << "Lancement de l'ecoute serveur sur le port " << listener.getLocalPort() << std::endl;
bool exit = false;
while (exit == false)
{
if (selector.wait(sf::seconds(1)))
{
for (unsigned int i = 0; i < sockets.size(); i++)
{
if (selector.isReady(*sockets.at(i)))
{
if (sockets.at(i) == &listener)
{
sf::TcpSocket *client = new sf::TcpSocket();
if (listener.accept(*client) == sf::Socket::Done)
{
std::cout << "Nouvelle connexion client (" << client->getRemoteAddress().toString() << ")" << std::endl;
sockets.push_back(client);
selector.add(*client);
}
else
{
std::cout << "Problème de connexion d'un client (" << client->getRemoteAddress().toString() << ")" << std::endl;
}
}
else
{
sf::Packet packet;
sf::TcpSocket* socket = static_cast<sf::TcpSocket*>(sockets.at(i));
switch (socket->receive(packet))
{
case sf::Socket::Done:
std::cout << "Recu packet : " << packet.getDataSize() << std::endl;
break;
case sf::Socket::Error:
std::cout << "Error" << std::endl;
break;
case sf::Socket::Disconnected:
std::cout << "Disconnected" << std::endl;
selector.remove(*socket);
delete socket;
break;
}
}
}
}
}
}
}
j'espère que vous pourrez m'aider.
Merci