Bonsoir!!
voila je code un programme de chat avec Qt, qui se sert de l'adresse Ip de l'utilisateur pour héberger le serveur. Une fois qu'un utilisateur a crée un réseau, les autres peuvent se connecter au chat, mais il faut qu'ils connaissent l'adresse IP du serveur.
Je voudrais rendre le chat accessible par tous, et ne pas laisser le choix de l'adresse IP au client.
Aussi j'ai pensé à une solution:
-dés que le client se connecte au chat, on enregistre son adresse IP
-si aucun serveur n'existe parmi les adresses que connait le programme, on crée un serveur, sinon on se connecte au serveur existant.
J'aurais donc deux questions à vous soumettre:
-comment vérifier si un serveur existe déja
-comment obtenir l'adresse IP du client qui se connecte?
je vous serai reconnaissant pour toute l'aide que vous pourrez m'apporter.
Effectivement, j'ai une petite idée de comment faire...
J'ai eu la même idée que toi pour la mise en place d'un Chat:
(Créer le serveur si aucun serveur n'est actif dans le liste des IP connue).
mais il se pose un problème, lorsque qu'aucun des serveur susceptibles
de recevoir des connexions n'est actif, tous les clients qui se lancent créent
un serveur de leur côté et n'ont aucun moyen de communiquer leur adresse IP,
tu imagines la suite ...
Pour tes question maintenant:
1) comment savoir si un serveur est actif:
Il faut tenter de se connecter, ou regarder si le port que tu utilise est ouvert
2) Comment connaître l'adresse du client qui se connecte:
Dans l'API Socket, la fonction accepte va stoker cette adresse dans la structure
passée en paramètre (second paramètre ):
struct sockaddr * addr
voilà, bonne continuation..
(je serait très motiver de tester ton programme, voir de le porter sous linux)
"mais il se pose un problème, lorsque qu'aucun des serveur susceptibles
de recevoir des connexions n'est actif, tous les clients qui se lancent créent
un serveur de leur côté et n'ont aucun moyen de communiquer leur adresse IP,
tu imagines la suite ... " (je n'ai pas trouvé les citations)
Il est possible que certaines choses m'échappent, je ne l'ai pas fait, mais si aucun serveur n'est actif, le premier client qui se connecte crée un serveur.
Ceux qui suivent, en faisant leurs vérifications, vont tomber dessus et se connecter, non?
Mais j'ai trouvé une autre solution qui me parait bien:
-je crée un site internet qui récupére l'IP du client qui se connecte dans une string;
-dés que le client se connecte, il va sur ce site, vérifie s'il y a une adresse, voit s'il peut s'y connecter, et sinon efface cette adresse et met la sienne à sa place.
cette solution a le mérite d'etre moins lourde, mais je ne sais pas créer un site internet qui pourrait me faire ça.
Si vous pouviez m'indiquer quelques pistes...
(Re) Salut,
Et bien tu vas vite, je ne voulais pas te donner de solution toute faite...
je pense qu'une base de donnée serait plus approprié pour stocker tes adresses.
En même temp si tu disposes d'un serveur sur le net, autant y faire
tourner un serveur entierement dedié a ton prog plutot que de stocker
des adresses ip, tu pourras t'y connecter depuis n'importe quel client
(alors qu'un client qui cherche a se connecter a un autre client qui
fait office de serveur risque d'avoir des problemes si ce dernier est
mal configuré), et les clients pourrons s'y connecter et s'y
deconnecter librement (alors qu'un client qui fait office de serveur
sera obligé de rester jusqu'a ce que le dernier client connecté parte).
Oui ce que tu dis est très juste, j'y avais pensé, et je me suis dit que si le clint/serveur partait, ts les clients se déconnecteraient, mais que le premier qui referait une connexion hébérgerait le nouveau serveur. Pas top je le reconnais.
Ce que tu dis m'intéresse.
Mais le réseau je ne gére pas trop. Avoir un serveur sur le net ça nécessite quoi?
De quelle maniére procéder?