serveur et client réseau sur même machine - C - Programmation
Marsh Posté le 29-10-2013 à 15:42:48
Normallement, lorsque tu passes la structure sockaddr_in a la fonction bind(), tu peux lui dire d'écouter sur toutes les interfaces réseaux (INADDR_ANY ou 0.0.0.0), où sur une adresse spécifique. Si tu utilises une adresse spécfique, il faudra impérativement utiliser la même pour se connecter.
La sortie de netstat semble indiquer que tu as utilisé une adresse IP spécifique. utilise l'option -n de netstat pour avoir la version numérique. Utilise ensuite ton client avec cette adresse.
Marsh Posté le 29-10-2013 à 15:50:18
tpierron a écrit : |
Je te remercie. Le code du serveur est écrit avec boost ( donc du C++ désolé pour la catégorie C , je vais corriger ), je ne connais pas boost ( dans le sens, je ne l'ai jamais utilisé ), donc je peine un peu à lire le code rapidement.
De ce que j'ai vu dans le code, il n 'y a pas de open / bind / listen / accept , mais directement un acceptor avec des paramètres dans le constructeur, et uniquement des appels à async_accept. Du coup, le code est pas mal masqué, je ne vois pas trop ce que ca fait pour le moment.
Je vais tenter d'extraire un peu de code pour le poster ( je ne peux pas poster directement le code , ca ne serait pas compréhensible, il manque trop de choses ).
Marsh Posté le 29-10-2013 à 15:55:12
ok super, grace au netstat -n , j'obtiens le résultat suivant :
tcp 0 0 172.18.11.107:7172 0.0.0.0:* LISTEN
Donc cela signifie que le serveur écoute sur la premiere carte réseau par défaut ( 172.17.253.0 n est pas eth0 mais eth1) , voila la source du probleme.
Je vais voir comment corriger le code pour que le serveur ecoute sur l'interface choisie.
Merci bien
Marsh Posté le 29-10-2013 à 15:00:27
Bonjour,
Je rencontre un problème assez curieux. J'ai 2 applications qui tourne sur une même machine, l'une lancée en premier qui fait serveur , et la suivante qui doit se connecter sur cette première. Le problème est que ca ne fonctionne pas ( j'ai écrit le code de la version cliente, mais pas la serveur bien que j'ai le code source ).
En gros, mon application me dit connection refused.
Ma machine est en 172.17.253.0/16 , et j'écoute sur le port 7172. Lorsque je me connecte sur 172.17.253.0:7172 , j'ai le "connection refused".
Voici le résultat d'une commande netstat :
Et voici mes routes ( route -n ) j'ai rajouté à la main lo d'ailleurs.
On peut remarquer dans le netstat que mon application qui fait un listen est différencié de tous les autres services. En effet, la plupart sont en *:port, mais mon application a innovationserver1.:port
Pourquoi y a t il une différence entre * et innovationserver1. ? je précise que innovationserver1 est le résultat que j'ai en tapant la commande hostname ( le . en plus je ne sais pas à quoi il correspond ).
Y a t il un probleme dans l'initialisation de la partie serveur qui fait que je n'écoute pas sur * ?
Dans ce cas, comment puis je y remédier ? En créant d'autres routes ? J'ai tenté de me connecter sur 127.0.0.1 plutot que 172.17.253.0 ( après avoir créé la route ) mais ca ne change rien.
Je pourrai poster du code si besoin, coté client et serveur, mais je ne peux pas dans l'immédiat.
Merci d'avance
PS : vaut mieux poster sur prog ou sur réseau pro ? ( ou encore os alternatif )