Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Connect TcpSocket  (Lu 2353 fois)

0 Membres et 1 Invité sur ce sujet

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Connect TcpSocket
« le: Septembre 10, 2016, 07:22:32 pm »
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

Archimed78

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : Connect TcpSocket
« Réponse #1 le: Septembre 15, 2016, 09:32:54 pm »
Personne n'as d'idée ou la communauté SFML est parti sur d'autre horizon ? :(

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Connect TcpSocket
« Réponse #2 le: Septembre 15, 2016, 10:30:41 pm »
Il y a pas grand monde qui répond sur le forum FR, si tu sais t'exprimer en anglais tente sur le forum anglais.