Client TCP \ IP - EHOSTUNREACH (Aucune route vers l'hôte)
Je suis en train de développer un client TCP/IP de serveur d'application. J'ai un serveur qui tourne sur mon PC et l'application cliente est en cours d'exécution sur le mobile. Ils sont tous les deux dans le même réseau Wi-Fi, mais je ne peut pas établir une connexion entre eux. Pendant le débogage, le client Android app a montré l'erreur suivante:
09-21 01:08:40.422: W/System.err(8536): java.net.ConnectException: failed to connect to /192.168.15.115 (port 4449): connect failed: EHOSTUNREACH (No route to host)
09-21 01:08:40.453: W/System.err(8536): at libcore.io.IoBridge.connect(IoBridge.java:114)
09-21 01:08:40.453: W/System.err(8536): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-21 01:08:40.453: W/System.err(8536): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
09-21 01:08:40.453: W/System.err(8536): at java.net.Socket.startupSocket(Socket.java:566)
09-21 01:08:40.453: W/System.err(8536): at java.net.Socket.tryAllAddresses(Socket.java:127)
09-21 01:08:40.453: W/System.err(8536): at java.net.Socket.<init>(Socket.java:177)
09-21 01:08:40.453: W/System.err(8536): at java.net.Socket.<init>(Socket.java:149)
09-21 01:08:40.453: W/System.err(8536): at sabarish.example.client_mobile.MainActivity$1.onClick(MainActivity.java:61)
09-21 01:08:40.453: W/System.err(8536): at android.view.View.performClick(View.java:3511)
09-21 01:08:40.453: W/System.err(8536): at android.view.View$PerformClick.run(View.java:14105)
09-21 01:08:40.453: W/System.err(8536): at android.os.Handler.handleCallback(Handler.java:605)
09-21 01:08:40.453: W/System.err(8536): at android.os.Handler.dispatchMessage(Handler.java:92)
09-21 01:08:40.453: W/System.err(8536): at android.os.Looper.loop(Looper.java:137)
09-21 01:08:40.453: W/System.err(8536): at android.app.ActivityThread.main(ActivityThread.java:4424)
09-21 01:08:40.453: W/System.err(8536): at java.lang.reflect.Method.invokeNative(Native Method)
09-21 01:08:40.453: W/System.err(8536): at java.lang.reflect.Method.invoke(Method.java:511)
09-21 01:08:40.453: W/System.err(8536): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-21 01:08:40.453: W/System.err(8536): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-21 01:08:40.453: W/System.err(8536): at dalvik.system.NativeStart.main(Native Method)
09-21 01:08:40.457: W/System.err(8536): Caused by: libcore.io.ErrnoException: connect failed: EHOSTUNREACH (No route to host)
09-21 01:08:40.457: W/System.err(8536): at libcore.io.Posix.connect(Native Method)
09-21 01:08:40.457: W/System.err(8536): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
09-21 01:08:40.457: W/System.err(8536): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
09-21 01:08:40.457: W/System.err(8536): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-21 01:08:40.457: W/System.err(8536): ... 18 more
Le code, je suis en utilisant:
public class MainActivity extends Activity {
private Socket client;
private PrintWriter printwriter;
private EditText textField;
private Button button;
private String messsage;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textField = (EditText) findViewById(R.id.editText1); //reference to the text field
button = (Button) findViewById(R.id.button1); //reference to the send button
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
messsage = textField.getText().toString(); //get the text message on the text field
textField.setText(""); //Reset the text field to blank
try {
client = new Socket("192.168.15.115", 4449); //connect to server
printwriter = new PrintWriter(client.getOutputStream(),true);
printwriter.write(messsage); //write the message to output stream
printwriter.flush();
printwriter.close();
client.close(); //closing the connection
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
Ce que je fais mal?
source d'informationauteur sash
Vous devez vous connecter pour publier un commentaire.
Le pas de route d'erreur indique que, lorsque le protocole TCP tentative de connexion, la connexion a échoué car le protocole sous-jacent logiciel ne pouvait pas trouver un nœud de réseau à réseau nœud route vers la cible désignée nœud.
Le correctif est un peu dépend du système d'exploitation, mais il est principalement nécessite la mise en place de vos tables de routage de sorte que le périphérique à partir duquel vous essayez de vous connecter est en mesure de comprendre comment atteindre le périphérique auquel vous souhaitez vous connecter.
Normalement vous spécifiez une passerelle à laquelle lorsque vous tentez de vous connecter, la demande de connexion sur le sort de la passerelle réseau pour être résolu par d'autres technologies de l'information appareils tels que les routeurs, etc.
Ce qui semble être un appareil Android, de sorte que la première chose est de s'assurer que vous avez si la connectivité WiFi ou cellulaire. Une autre serait de faire en sorte que le WiFi ou cellulaire est activé et opérationnel.
L'adresse IP que vous spécifiez est normalement à l'intérieur d'un private sub-net. Tellement de chose à vérifier est de savoir si le périphérique que vous essayez de vous connecter est sur le même sous-réseau que votre appareil est en marche.
Ici est un document sur les sous-réseaux et le routage.
Cela ressemble à un problème de réseau pas un Java problème. Soit:
(Le "No route to host" message suggère que c'est le premier problème, mais les pare-feu sont parfois configuré pour donner des réponses trompeuses pour le trafic indésirable.)
De toute façon, vous feriez mieux de regarder pour un site sur la façon de configurer et /ou des réseaux et le routage.
Bonjour j'ai eu le même problème dans mon mac et de l'exécution de l'application sur l'android appareil. J'ai eu à faire 2 choses à la faire fonctionner:
Et cela a fonctionné!
Je suis face au même problème quand j'ai développé une application android communiquer avec java serveur de bureau, pour résoudre le problème il suffit de débrancher le câble usb connectez le téléphone android avec le PC.
Yep..
L'hôte est inaccessible, juste comme ça. Cependant, si tout est oK (bien configuré node/réseau, bon signal wifi,..), Vous pouvez forcer le processus à l'aide de
ping serverIP
(du téléphone) ouping smartphone
(de serveur).Le ping ICMP (paquets) va forcer le routeur à l'accélération de la nouvelle de routage (façon à atteindre l'hôte)... envoyer beaucoup de pings (option-n) par exemple:
ping google.com -n 1000
(1000 consécutives pings)