Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    Inscrit en
    février 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 41
    Points : 7
    Points
    7

    Par défaut [SFML/Reseau]Adresse IP du Serveur

    Bonjour à tous, dans l'optique de programmer une application réseau, j'ai suivi les tutoriaux sur les sockets en SFML sur le site officiel. Tout semble bien aller, mais j'ai un problème :
    en effet, lors de l'envoi des données par le client au serveur en mode UDP, je ne sais pas quel adresse mettre :

    Code :
    1
    2
     
    Socket.Send(Buffer, sizeof(Buffer), "test", Port);
    J'ai mis "test" ne sachant pas quoi mettre à cet endroit.

    Sachant qu'en mettant cette chaîne "test", l'envoi des données sur le port marche bien, mais seulement sur mon ordinateur (avec l'adresse interne de l'ordinateur) : dès que je copie colle mon code sur un autre ordi, bien connecté à Internet, et que j'envoie mon contenu sur le port pourtant correspondant, avec ce nom "test", il ne passe rien, mon serveur ne réagit pas...


    Alors, je pensais qu'on avait seulement besoin du port pour faire des envois UDP, ainsi envoyer l'IP par le port pour ensuite l'utiliser, mais là je ne sais pas trop comment faire. Je pense ne pas être le seul à avoir eu ce problème (enfin j'espère !) voilà donc si vous avez une idée, n'hésitez pas !!!




    Voici tout de même du code si ça vous intéresse, mais il est tiré du tutoriel, et comme dit précedemment, il marche en local sur un ordi :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include "Network.h"
     
    Network::Network()
    {
    	Port = 4452;
    }
     
    bool Network::Send(char *Buffer)
    {
    //	adresseServeur = sf::IPAddress(88, 183, 68, 121);
           if(Socket.Send(Buffer, sizeof(Buffer), "rien", Port) != sf::Socket::Done)
    	{
    		return false;
    	}
    	else
    	return true;
    }
     
    bool Network::Receive()
    {
    	char Buffer[128];
     
    	if(!Socket.Bind(Port))
    	{
    		cout << "Impossible de binder le socket au port " << Port << endl;
    		return false;
    	}
    	else
    	{
    	    if(Socket.Receive(Buffer, sizeof(Buffer), Received, Sender, Port) != sf::Socket::Done)
    			{
    					cout << "Problème lors de la réception" << endl;
    					return false;
    			}
    			else
    			{
    				// On affiche l'adresse et le port de l'expéditeur
    				std::cout << Sender << ":" << Port << std::endl;
     
    				// On affiche le message reçu
    				std::cout << Buffer << std::endl; // "Hi guys !"
     
    				return true;
    			}
    	}
     
    	Send(Buffer);
    }
     
    void Network::Close()
    {
    	Socket.Close();
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    class Network
    {
    	public:
     
    	//Constructeur
    	Network();
     
    	//Envoie des données
    	bool Send(char *Buffer);
     
    	//Reception
    	bool Receive();
     
    	void Close();
     
     
    	protected:
     
    	//Adresse
    	sf::IPAddress ip;
    	sf::IPAddress Sender;
    	sf::IPAddress adresseServeur;
     
    	//Port
    	unsigned short Port;
     
    	//Reception
    	std::size_t Received;
     
     
    	//Socket
    	sf::SocketUDP Socket;
     
    };


    Merci d'avance !!

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2011
    Messages : 9
    Points : 4
    Points
    4

    Par défaut

    nan faut pas mettre "test", pour des tests avec des communications sur la même machine on mets généralement "localhost" ou "127.0.0.1", ce qui peut aussi être obtenu avec sf::IPAddress::LocalHost

    pour connaitre ton addresse vue depuis internet il y a la fonction :
    sf::IPAddress::GetPublicAddress(Timeout)

    regarde aussi la doc de la fonction :
    sf::IPAddress::GetLocalAddress()

    ces fonctions sont dans <SFML/Network/IPAddress.hpp>

  3. #3
    Membre chevronné
    Homme Profil pro Clément
    ingénieur d'étude et de développement
    Inscrit en
    novembre 2011
    Messages
    525
    Détails du profil
    Informations personnelles :
    Nom : Homme Clément
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : ingénieur d'étude et de développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2011
    Messages : 525
    Points : 769
    Points
    769

    Par défaut

    Bonjour,

    Cela ne suffira pas. Il faut également ouvrir les ports utilisés par ton appli sur la box dont ce sert la machine distante.

    Pour comprendre le fonctionnement d'une méthode SFML, profite de l'existence d'une belle documentation à son sujet (plutôt que d'aller fouiller dans les sources du SDK, même si c'est déjà un bon réflexe), que tu trouveras ici


    Et voici la documentation concernant ta méthode Send :

    http://www.sfml-dev.org/documentatio...be26b7efce3bc2


    Pour l'argument qu'il te manque, il s'agit de l'adresse IP de la machine sur laquelle tu veux envoyer ton paquet.

    Sous Windows tu peux la récupérer en invite de commande avec la commande "ipconfig", et sous linux, "ifconfig"


    Edit : j'aurais du regarder la date du topic...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •