Faire communiquer client/serveur à distance

Résolu/Fermé
Kina8888 Messages postés 5 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018 - 30 juil. 2018 à 20:46
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 31 juil. 2018 à 22:51
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 ;)
A voir également:

1 réponse

yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
30 juil. 2018 à 21:33
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é.
1
Kina8888 Messages postés 5 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018
31 juil. 2018 à 12:42
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");
}
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Kina8888 Messages postés 5 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018
31 juil. 2018 à 13:34
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?
0
Kina8888 Messages postés 5 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018
31 juil. 2018 à 15:06
Pour répondre à tes questions :

- Les deux sont sur Windows 10
- La communication des programmes se fait effectivement via internet
- Le serveur est connecté à internet par une box en wifi
- Le serveur possède une adresse privée et dynamique

En espérant que ça puisse t'aider
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Kina8888 Messages postés 5 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018
31 juil. 2018 à 15:45
l'ip publique est sans doute celle de la box, pas celle du serveur: est-ce exact?
il faut alors configurer la box pour rediriger la porte 8888 vers l'adresse ip privée du serveur. compliqué si cette adresse est dynamique.
0
Kina8888 Messages postés 5 Date d'inscription lundi 30 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018
31 juil. 2018 à 19:04
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 ?
0