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

Auteur Sujet: [Résolu]Envoi de texte Client->Serveur : un paquet par mot  (Lu 2325 fois)

0 Membres et 1 Invité sur ce sujet

DrPapino

  • Newbie
  • *
  • Messages: 34
    • Voir le profil
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)
« Modifié: Juin 15, 2015, 07:40:35 am par DrPapino »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Envoi de texte Client->Serveur : un paquet par mot
« Réponse #1 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);

DrPapino

  • Newbie
  • *
  • Messages: 34
    • Voir le profil
Re : Envoi de texte Client->Serveur : un paquet par mot
« Réponse #2 le: Juin 15, 2015, 07:40:17 am »
Ah bah jsuis un champion moi :)

Au top, merci !