2013-02-20 1 views
0

J'ai implémenté un client TCP et ça marche très bien jusqu'à maintenant, au moins si j'essaye de me connecter à un serveur distant. Si ce serveur est dans mon réseau local wifi, je reçois toujoursPourquoi je peux me connecter au serveur distant, mais pas au serveur dans le réseau local?

02-20 14:09:04.400: W/System.err(29562): java.net.SocketException: failed to connect to /xxx.xxx.xxx.xxx (port xyz) after 5000ms: isConnected failed: EHOSTUNREACH (No route to host) 

MAIS !! Si le serveur LOCAL envoie une requête ping à mon appareil Android, après le ping, cela fonctionnera et l'appareil se connectera à mon serveur LOCAL.

Une raison connue pour ce problème? Je n'ai aucune idée où je devrais commencer à chercher une solution.

Répondre

2

Vous n'avez encore fait aucune découverte du réseau local pour que l'appareil ne sache pas où se trouve le serveur. La réponse réside dans l'erreur: "Aucune route vers l'hôte"

Faites une découverte du réseau pour mettre à jour la table MAC en premier. Normalement, vous pouvez vérifier si le MAC est déjà connu (dans la table ARP) sinon, faites une requête ARP en premier.

Raison pour laquelle cela fonctionne lorsque vous lancez un ping depuis le serveur: le MAC est alors connu par le périphérique mobile (dans la table ARP ou la table MAC).

+0

Merci pour la réponse, semble parfaitement raisonnable pour un réseau noob comme moi. Est-ce que l'utilisation de la découverte de services réseau http://developer.android.com/training/connect-devices-wirelessly/nsd.html#discover le chemin à parcourir? –

+0

La description indique qu'il va écouter les services qui diffusent sur le réseau. C'est très bien si vous voulez juste savoir ce que c'est la diffusion. Voici un tutoriel de programmation de socket pour andriod: http://www.edumobile.org/android/android-development/socket-programming/ – Bulki

Questions connexes