Obtenir adresse Ip, programme de chat

Signaler
Messages postés
7
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
15 août 2008
-
Messages postés
34
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
14 septembre 2008
-
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.

8 réponses

Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

Salut,
As-tu déjà fait de la programmation réseaux ?

Cordialement,
Sébastien.
Messages postés
7
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
15 août 2008

Pas des masses. Je programme en c/c++ depuis un certain temps maintenant, mais le réseau c'est la première fois.
Aurais tu une idée sur la question?
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

(Re)Salut,

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)

Cordialement,
Sébastien.
Messages postés
7
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
15 août 2008

"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...

cordialement, djipey.
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

(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.

Cordialement,
Sébastien.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

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).
Messages postés
7
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
15 août 2008

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?
Messages postés
34
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
14 septembre 2008

#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>

int main()
{
WSADATA wsaData;
char host[100];
HOSTENT* ip_resolue;
SOCKADDR_IN valip;
int compteur;

WSAStartup(MAKEWORD(2, 0), &wsaData);

gethostname(host,sizeof(host));

ip_resolue = gethostbyname(host);

if (ip_resolue != NULL)
{
for (compteur = 0; ip_resolue->h_addr_list[compteur+1] != NULL; compteur++) {}

memcpy(&valip.sin_addr.s_addr, ip_resolue->h_addr_list[compteur], ip_resolue->h_length);

printf("Votre ip vaut : %s \n",inet_ntoa(valip.sin_addr));
}
getch();
}

Tient cadeau !