Obtenir adresse Ip, programme de chat

djipey Messages postés 7 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 15 août 2008 - 11 août 2008 à 21:41
cs_kiitos Messages postés 34 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 14 septembre 2008 - 10 sept. 2008 à 11:24
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

SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
12 août 2008 à 09:11
Salut,
As-tu déjà fait de la programmation réseaux ?

Cordialement,
Sébastien.
0
djipey Messages postés 7 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 15 août 2008
12 août 2008 à 09:14
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?
0
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
12 août 2008 à 09:44
(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.
0
djipey Messages postés 7 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 15 août 2008
12 août 2008 à 09:54
"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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
12 août 2008 à 10:18
(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.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
12 août 2008 à 14:41
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).
0
djipey Messages postés 7 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 15 août 2008
12 août 2008 à 14:47
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?
0
cs_kiitos Messages postés 34 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 14 septembre 2008
10 sept. 2008 à 11:24
#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 !
0
Rejoignez-nous