Faire communiquer client/serveur à distance
Résolu
Kina8888
Messages postés
5
Statut
Membre
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerais faire communiquer un client et un serveur qui ne sont pas sur le même réseau en utilisant les sockets en C. Mon problème est que quand je lance les deux programmes, le client devrait se connecter au serveur, mais il ne se passe rien. Je précise que j'ai mis l'adresse ip publique de l'ordinateur sur lequel le serveur fonctionne dans la structure de connexion du client, et que sur le serveur, j'ai mis INADDR_ANY. Je précise aussi qu'en local, ces deux programmes marchent très bien. Donc j'aimerais savoir quelle est l'origine du problème, et comment y remédier. Merci de bien vouloir me répondre ;)
J'aimerais faire communiquer un client et un serveur qui ne sont pas sur le même réseau en utilisant les sockets en C. Mon problème est que quand je lance les deux programmes, le client devrait se connecter au serveur, mais il ne se passe rien. Je précise que j'ai mis l'adresse ip publique de l'ordinateur sur lequel le serveur fonctionne dans la structure de connexion du client, et que sur le serveur, j'ai mis INADDR_ANY. Je précise aussi qu'en local, ces deux programmes marchent très bien. Donc j'aimerais savoir quelle est l'origine du problème, et comment y remédier. Merci de bien vouloir me répondre ;)
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, moi je commencerais par faire un ping du serveur à partir du client.
ensuite, si le ping fonctionne, je me demanderais si le réseau entre le client et le serveur laisse passer la communication sur la porte TCP que tu as choisi d'utiliser.
ensuite, je rassemblerais le maximum d'information concrètes, et je les partagerais sur ce forum: tout ce que tu sais et que tu ne nous a pas communiqué.-
Merci de ta réponse. J'ai fais une requête ping comme tu me l'as conseillé et celle-ci fonctionne. Par contre, j'ai oublié de préciser que j'étais débutant en C, donc je ne sais pas vraiment comment vérifier que le réseau laisse passer les communications. Faut-il ouvrir les ports de sa box ? Sinon voici une partie des 2 codes.
Client :
if ((sock = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
{
return 1;
}
server.sin_addr.s_addr = inet_addr("monip");
server.sin_family = AF_INET;
server.sin_port = htons( 8888 );
if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
{
return 1;
}
Serveur :
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(8888);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
puts("En attente d'une connexion...");
sinsize = sizeof(csin);
if ((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
puts("Debut de l'échanche");
} -
tu donnes quelques éléments:
le serveur a une ip publique
il y a une box
.
peux-tu en donner plus:
- quel OS sur le serveur et le client?
- la communication entre le client et le serveur se fait-elle via internet?
- le serveur est-il connecté à internet via une box?
- le serveur a-t-il aussi une adresse privée? statique, dynamique? -
-
-
Oui je me suis trompé, c'est celle de la box. Donc je crois avoir compris : je dois ouvrir le port 8888 sur la box du serveur, puis rediriger les infos réceptionnées sur ce port à l'adresse ip locale du serveur, donc pour cela, je dois attribuer une ip privée statique au serveur avec le serveur DHCP, c'est cela ?
-