Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
593 connectés 

  FORUM HardWare.fr
  Programmation
  C

  serveur et client réseau sur même machine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

serveur et client réseau sur même machine

n°2208565
xilebo
noone
Posté le 29-10-2013 à 15:00:27  profilanswer
 

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 :
 

Code :
  1. tcp        0      0 *:sunrpc                *:*                     LISTEN
  2. tcp        0      0 *:webmin                *:*                     LISTEN
  3. tcp        0      0 *:epmd                  *:*                     LISTEN
  4. tcp        0      0 *:36116                 *:*                     LISTEN
  5. tcp        0      0 *:ssh                   *:*                     LISTEN
  6. tcp        0      0 localhost:postgresql    *:*                     LISTEN
  7. tcp        0      0 *:15672                 *:*                     LISTEN
  8. tcp        0      0 *:55672                 *:*                     LISTEN
  9. tcp        0      0 localhost:smtp          *:*                     LISTEN
  10. tcp        0      0 *:microsoft-ds          *:*                     LISTEN
  11. tcp        0      0 innovationserver1.:7172 *:*                     LISTEN
  12. tcp        0      0 *:swat                  *:*                     LISTEN
  13. tcp        0      0 *:59850                 *:*                     LISTEN
  14. tcp        0      0 *:netbios-ssn           *:*                     LISTEN


 
Et voici mes routes ( route -n ) j'ai rajouté à la main lo d'ailleurs.
 

Code :
  1. Table de routage IP du noyau
  2. Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
  3. 0.0.0.0         172.18.11.200   0.0.0.0         UG    0      0        0 eth0
  4. 127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
  5. 172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth1
  6. 172.18.11.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0


 
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 )

mood
Publicité
Posté le 29-10-2013 à 15:00:27  profilanswer
 

n°2208577
tpierron
Posté le 29-10-2013 à 15:42:48  profilanswer
 


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.

n°2208580
xilebo
noone
Posté le 29-10-2013 à 15:50:18  profilanswer
 

tpierron a écrit :


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.


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

n°2208582
xilebo
noone
Posté le 29-10-2013 à 15:55:12  profilanswer
 

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  :jap:


Message édité par xilebo le 29-10-2013 à 15:55:30

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  serveur et client réseau sur même machine

 

Sujets relatifs
enseigner la programmation à un réseau de neurones artificiel.[SQL] Répliquer/Synchroniser BDD sur serveur distant
[Coordination d'un réseau de neurones artificiels]Recherche d'exemplesMon serveur Nas veut pas récupérer le contenu du dossier à distance ?
Serveur Minecraftmini serveur en C: setsockopt() == -1
[BATCH] Activer /DSxxxx sur une machine locale.Suppression d'un fichier sur le réseau par commande dos
Blocage de mon Serveur de tchat (AcceptTcpClient)Strong AI sur le réseau Freenet
Plus de sujets relatifs à : serveur et client réseau sur même machine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR