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

Auteur Sujet: Le client ne reçoit plus les messages en provenance du serveur.  (Lu 2938 fois)

0 Membres et 1 Invité sur ce sujet

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Salut, j'ai ça depuis pas longtemps; ça n'affiche pas le message du serveur.

Code source du serveur :

#include <SFML/Network.hpp>
#include <iostream>
int main (int argv, char* argc[]) {
    sf::TcpListener listener;
    if (listener.listen(10000) != sf::Socket::Done)
        std::cerr<<"Error while listening to the port"<<std::endl;
    sf::SocketSelector selector;
    selector.add(listener);
    std::vector<sf::TcpSocket*> clients;
    while (true) {
        if (selector.wait(sf::milliseconds(10))) {
            if (selector.isReady(listener)) {
                sf::TcpSocket *client = new sf::TcpSocket();
                if (listener.accept(*client) == sf::Socket::Done) {
                    std::cout<<"client connected"<<std::endl;
                    selector.add(*client);
                    clients.push_back(client);
                }
            }
            for (unsigned int i = 0; i < clients.size(); i++) {
                if (selector.isReady(*clients[i])) {
                    sf::Packet packet;
                    if (clients[i]->receive(packet) == sf::Socket::Done) {
                        std::string message;
                        packet>>message;
                        std::cout<<"message : "<<message<<std::endl;
                        message = "I'm fine thanks";
                        packet.clear();
                        packet<<message;
                        clients[i]->send(packet);
                    } else {
                        std::cout<<"client disconnected"<<std::endl;
                        selector.remove(*clients[i]);
                        delete clients[i];
                    }
                }
            }
        }
    }
    return 0;
}

Code source du client :

#include <SFML/Network.hpp>
#include <iostream>
int main (int argv, char* argc[]) {
    sf::TcpSocket socket;
    if (socket.connect(sf::IpAddress::LocalHost, 10000) != sf::Socket::Done)
        std::cerr<<"Server not running"<<std::endl;
    std::string message = "Hello server";
    std::string message2 = "how are you";
    sf::Packet packet;
    packet<<message;
    socket.send(packet);
    packet.clear();
    packet<<message2;
    socket.send(packet);
    packet.clear();
    sf::SocketSelector selector;
    selector.add(socket);
    while (true) {
        if (socket.receive(packet) == sf::Socket::Done) {
            packet>>message;
            std::cout<<"message : "<<message<<std::endl;
        }
    }
    return 0;
}

Pourtant avant ça marchait.

Rien à voir mais j'ai aussi ce soucis :

static bool startCli (int portTCP, int portUDP, sf::IpAddress, bool useSecuredConnexion = true);

Lorsue j'appelle la méthode sans passer le troisième paramètre, la variable booléenne vaut false hors u'elle devrait valoi true.

Bref, je ne parviens plus à travailler, tout cela est vraiment instable, ce ui marchait hier ne marche plus aujourd'hui.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Le client ne reçoit plus les messages en provenance du serveur.
« Réponse #1 le: Octobre 22, 2016, 04:31:59 pm »
J'ai réinstallé SFML et maintenant je reçois le message deux fois, mais je remarque que mon PC commence à se faire vieux..., le disque dur à mon avis commence à déconner. :/

Par contre plus moyen de refaire fonctionner mon plus gros projet. :/

packet>>message;
 

Il y a des données dans le paquet mais pas moyen de les extraire, checkSize renvoie faux...(le paquet n'est pas valide)

Hors que il y a une semaine ça fonctionnait à merveille, bref, c'est mon PC qui doit commencer à déconner. Je vais juste m'en servir pour aller sur internet, pour ce qui est du développement, je compte arrêter et consacrer ma vie à d'autres activités.

Là ou je vais aller loger ils vont ouvrir une salle multimédia et je vais pouvoir partager mes connaissances et me régaler.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Le client ne reçoit plus les messages en provenance du serveur.
« Réponse #2 le: Octobre 23, 2016, 11:12:39 am »
Houlalala, la taille est beaucoup trop grande :

Packet& Packet::operator >>(std::string& data)
{
    // First extract st
    Uint32 length = 0;
    *this >> length;
    std::cout<<"length : "<<length<<std::endl;
 

La chaine que je mets dans le paquet à l'envoi fait 360 de longueur et là il m'indique qu'elle fait plus de 1 million dans le paquet à la réception.

Il y a donc un problème là :

Packet& Packet::operator >>(Uint32& data)
{
    if (checkSize(sizeof(data)))
    {
        data = ntohl(*reinterpret_cast<const Uint32*>(&m_data[m_readPos]));
        m_readPos += sizeof(data);
    }
    return *this;
}
 

elle fait quoi la fonction ntohl ?