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

Auteur Sujet: Class sf::SocketTCP, besoin d'aide pour un débutant en réseau  (Lu 2265 fois)

0 Membres et 1 Invité sur ce sujet

damjuve

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
Class sf::SocketTCP, besoin d'aide pour un débutant en réseau
« le: Décembre 10, 2012, 08:51:28 pm »
Bonjours à tous :)

J'avais envi de tester la programmation réseau avec cette merveilleuse lib qu'est la SFML, j'ai donc composé un petit code qui peux je pense faire office de code minimal :

/*
 * main.cpp
 *
 *  Created on: 10 déc. 2012
 *      Author: Damien
 */


#include                <SFML/System.hpp>
#include                <SFML/Graphics.hpp>
#include                <SFML/Window.hpp>
#include                <SFML/Network.hpp>
#include                <iostream>

int                     main(int ac, char **av)
{

    // Create a TCP socket for communicating with server
    sf::SocketTCP Client;

    sf::IPAddress ServerAddress("192.168.0.2");

    // Connect to the specified server
    if (!Client.Connect(8045, ServerAddress, 3.f))
    {
        std::cerr << "Cannot connect to server " << ServerAddress.ToString() << std::endl;
        return (EXIT_FAILURE);
    }
    std::cout << "Connected to server " << ServerAddress.ToString() << std::endl;

    // Receive a message from the client
    char Message[128];
    std::size_t Received;

    int stat;
    if ((stat = Client.Receive(Message, sizeof(Message), Received)) != sf::Socket::Done)
    {
        std::cerr << "Cannot receive message from the server (" << stat << ") " << std::endl;
        return (EXIT_FAILURE);
    }
    // Show it
    std::cout << "Message received from server : \"" << Message << "\"" << std::endl;

    // Define a message to send back to the server
    char ToSend[] = "Hi, I'm a client !";

    // Send the message
    if (Client.Send(ToSend, sizeof(ToSend)) != sf::Socket::Done)
    {
        std::cerr << "Cannot send message to server " << std::endl;
        return (EXIT_FAILURE);
    }
    std::cout << "Message sent to server : \"" << ToSend << "\"" << std::endl;

    // Close the socket when we're done
    Client.Close();
    return (EXIT_SUCCESS);
}
 

(je me base directement sur le code de Laurent).

Et, c'est là que ça se complique, mon serveur est en Java.

Or comme je vous l'ai dit he débutte totalement en réseau, par conséquent je ne sais pas trop où se trouve l'erreur que j'ai commise (dans le code cpp, dans le code Java, dans la configuration de mes machines), et j'ai besoin de votre oeil d'expert pour en trouver l'origine :)

Le plus étrange pour moi c'est que la console client me renvoi :
Cannot connect to server 192.168.0.2

Alors que la console serveur me renvoi :
New client, adress 192.168.0.1 on 52359
Client message : null
 

Merci d'avance de votre temps :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Class sf::SocketTCP, besoin d'aide pour un débutant en réseau
« Réponse #1 le: Décembre 10, 2012, 09:01:22 pm »
La fonction Connect ne renvoie pas un booléen.
Laurent Gomila - SFML developer

damjuve

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
Re : Class sf::SocketTCP, besoin d'aide pour un débutant en réseau
« Réponse #2 le: Décembre 10, 2012, 09:38:39 pm »
En effet :D

Attention alors, ce code est faux :
// Connect to the specified server
    if (!Client.Connect(Port, ServerAddress))
        return;
    std::cout << "Connected to server " << ServerAddress << std::endl;
 

Et on le retrouve aussi à plusieurs endroit dans le tuto.

Et les commentaires de la doc ne sont pas très claire :
Returns:
True if operation has been successful

Merci pour l'aide, je vais pouvoir commencer à faire mumuse avec les packet :D

bonne soirée ;)

Ps : au cas où ça puisse aider quelqu'un, le code à utiliser est donc :
 if (Client.Connect(8045, ServerAddress, 3.f) != sf::Socket::Done)
    {
        std::cerr << "Cannot connect to server "<< ServerAddress.ToString() << std::endl;
        return (EXIT_FAILURE);
    }
    std::cout << "Connected to server " << ServerAddress.ToString() << std::endl;
 
« Modifié: Décembre 10, 2012, 09:41:34 pm par damjuve »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Class sf::SocketTCP, besoin d'aide pour un débutant en réseau
« Réponse #3 le: Décembre 10, 2012, 11:00:54 pm »
Les liens que tu donnes sont pour SFML 1.2.
Citer
ATTENTION : ceci est la documentation d'une version antérieure de SFML ; la documentation de la dernière version officielle est accessible via le menu principal
... je pensais pourtant que le message était assez visible en haut des pages.

Citer
Et les commentaires de la doc ne sont pas très claire
Ca par contre c'est une vraie bourde :)
Laurent Gomila - SFML developer

damjuve

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
Re : Class sf::SocketTCP, besoin d'aide pour un débutant en réseau
« Réponse #4 le: Décembre 10, 2012, 11:06:55 pm »
En effet, j'y avait accédé par google et en pensant me retrouver sur le tuto que je connais j'ai pas prêté attention à la version.