Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: DrPapino le Juin 14, 2015, 09:21:32 pm

Titre: [Résolu]Envoi de texte Client->Serveur : un paquet par mot
Posté par: DrPapino le Juin 14, 2015, 09:21:32 pm
Bonjour :)

J'ai un programme simple : le Client demande à l'utilisateur de saisir une chaine de caractère, puis le Client l'envoi au Serveur pour que celui ci l'affiche. Ça donne :

Coté Client :

#include <SFML/Network.hpp>
#include <iostream>

int main()
{
    // On ouvre un chemin vers l'adresse 127.0.0.1, port 530000
    sf::TcpSocket socket;
    socket.connect("127.0.0.1",53000);

    while (1)
    {
        // On crée un message
        std::string message;
        std::cin>>message;
       
        // On crée un paquet avec le message dedans
        sf::Packet packet;
        packet << message;
       
        // On envoie le paquet
        socket.send(packet);
    }
   
    // On ferme le chemin
    socket.disconnect();

    return 0;
}

Coté Serveur :

int main()
{
    // On écoute le port 53000
    sf::TcpListener listener;
    listener.listen(53000);

    // Si on trouve le client, on l'accepte
    sf::TcpSocket client;
    listener.accept(client);
   
    while (1)
    {
        sf::Packet packet;
   
        // On attend un packet (bloque)
        client.receive(packet);
       
        std::string data;
        packet >> data;
       
        // On l'affiche
        std::cout << "Nouveau paquet : " << data << std::endl;
    }
   
    // On arrête d'écouter le port 53000
    listener.close();
   
    return 0;
}

Le problème, c'est que quand je saisis "Hello World", le Serveur reçoit deux paquets : "Hello" et "World". Pas super pratique ! Est-ce un bug ou dois-je m'accommoder de cela ?

En tous cas, la SFML, c'est super cool 8) 8) 8)
Titre: Re : Envoi de texte Client->Serveur : un paquet par mot
Posté par: G. le Juin 14, 2015, 10:55:57 pm
Il en reçoit 2 car tu en envoies 2 car tu en saisis 2. std::cin s'arrête à l'espace.
Utilise std::getline.
std::string chaine;  
std::getline(std::cin, chaine);
Titre: Re : Envoi de texte Client->Serveur : un paquet par mot
Posté par: DrPapino le Juin 15, 2015, 07:40:17 am
Ah bah jsuis un champion moi :)

Au top, merci !