Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Snaxt

Pages: [1]
1
Réseau / Re : Sockets TCP connectées mais envoi/reception impossible
« le: Juillet 30, 2014, 08:27:16 pm »
Merci beaucoup, j'avais pas fait attention à cela. Ca marche niquel en faisant une allocation dynamique.

2
Bonjour,

Je suis en train de réaliser un jeu qui doit interagir avec un serveur et je bloque sur un problème: je réussi à connecter mes sockets, mais après impossible d'envoyer/recevoir des packets. J'ai tenté de regarder sur le net et sur le forum des exemples de codes et j'ai pourtant l'impression de faire les choses, à ma manière, mais correctement. J'ai peut-être mal compris quelque chose car c'est la première fois que je fais du réseau.

Côté serveur, j'appelle respectivement les fonction connectPlayers() et initialize() et test à chaque fois la réussite et affiche un message pour voir où ça plante (J'affiche même un message avec l'ip du client et ce dernier s'affiche), la première ce passe très bien et la seconde me renvoie false et donc un message d'erreur.

bool GameNetwork::connectPlayers()
{
    sf::TcpListener listener;

    if (listener.listen(12345) != sf::Socket::Done)
    {
        return false;
    }
    else
        cout << "Connection successfull to port 12345" << endl << "Waiting for connections..." << endl;

    sf::SocketSelector selector;
    selector.add(listener);

    int readyClients(0);
    sf::IpAddress clientAdress;


    while(readyClients < 1) //Ici 10 clients se connecteront, mais je teste avec la valeur 1
    {
        if(selector.wait())
        {
            if(selector.isReady(listener))
            {
                sf::TcpSocket socket;
                m_socketVector.push_back(&socket);
                if (listener.accept(*m_socketVector[readyClients]) != sf::Socket::Done)
                {
                    return false;
                }
                clientAdress = m_socketVector[readyClients]->getRemoteAddress();
                m_playerIp.push_back(clientAdress.toString());
                cout << "Connection received from client " << m_playerIp[readyClients] << endl;
                readyClients++;
            }
        }
    }

    return true;
}

bool GameNetwork::initialize()
{
    sf::Packet packet;
    //Envoi à chaque joueur de leur numéro
    for(unsigned int i = 0; i < 1; i++)
    {
        if(packet << i)
        {
            if(m_socketVector[i]->send(packet) == sf::Socket::Done)
            {
                packet.clear();
                cout << "Player" + i << " (" + m_playerIp[i] + ") received his number." << endl;
            }
            else
                return false;
        }
        else
            return false;
    }

    return true;
}

Côté client, je me connecte au serveur grâce à "connectToServer()", si ça ne fonctionne pas, je ferme le programme et il ne se ferme pas lorsqu'il n'y a pas d'appel à la fonction de réception/envoi. Je tente ensuite d'obtenir le numéro du joueur grâce à ma deuxième fonction et ferme le programme si ça plante, évidemment le programme se ferme.

bool NetworkEngine::connectToServer()
{
    sf::Socket::Status status = m_socket.connect("localhost", 12345);
    if (status != sf::Socket::Done)
    {
        // erreur...
        return false;
    }

    return true;
}

int NetworkEngine::getNumber()
{
    sf::Packet packet;
    if(m_socket.receive(packet) == sf::Socket::Done)
    {
        int number(0);
        packet >> number;
        return number;
    }
    else
        return -1;
}
 

Je vous remercie d'avance de vote future aide.

Pages: [1]
anything