Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques > SFML
SFML Forum d'entraide sur l'API SFML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/11/2010, 00h53   #1
Daxter06
Invité régulier
 
Inscription : 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 !!
Daxter06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 20h46   #2
coupecoupe
Invité de passage
 
Inscription : novembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 9
Points : 4
Points : 4
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>
coupecoupe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2012, 15h09   #3
Kaamui
Membre expérimenté
 
Homme Clément
ingénieur d'étude et de développement
Inscription : novembre 2011
Messages : 432
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 : 432
Points : 585
Points : 585
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...
Kaamui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h42.


 
 
 
 
Partenaires

Hébergement Web