我在我的android應用程序中使用TCP連接。連接運行在專用線程中。Android TCP:錯誤EHOSTUNREACH
我的代碼:
class ReceiverThread extends Thread {
Handler handler;
ReceiverThread(Handler h) {
handler = h;
}
@Override
public void run() {
try {
socketTCP = new Socket((SERVERIP), SERVERPORT);
in = new BufferedReader(new InputStreamReader(
socketTCP.getInputStream()));
socketTCP.setSoTimeout(20000);
while (TCPRunning) {
String strTcp = in.readLine().toString();
i++;
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("getStr", strTcp + "\n");
msg.setData(b);
handler.sendMessage(msg);
}
} catch (UnknownHostException e) {
Log.v("TcpClient", "Unknown host");
try {
socketTCP.close();
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} catch (SocketException e) {
// Erreur TimeOut
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("getStr", "Error");
msg.setData(b);
handler.sendMessage(msg);
e.printStackTrace();
} catch (IOException e) {
if (socketTCP != null) {
try {
socketTCP.close();
socketTCP = null;
} catch (IOException e1) {
e1.printStackTrace();
}
}
} finally {
try {
i = 0;
if (in != null) {
in.close();
}
if (socketTCP != null) {
socketTCP.close();
socketTCP = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
然後我的Android設備連接到其他設備的無線網絡連接,當我啓動我的應用程序;它運作良好:我收到其他設備發送的數據。 當我停止連接並重新啓動時(幾秒鐘後)它可以工作。
但是,當我等待2至3分鐘,然後連接變得不可能:
我得到以下異常:
02-25 10:40:32.638: W/System.err(4384): java.net.ConnectException: failed to connect to /192.168.56.1 (port 50000): connect failed: EHOSTUNREACH (No route to host)
02-25 10:40:32.648: W/System.err(4384): at libcore.io.IoBridge.connect(IoBridge.java:114)
02-25 10:40:32.648: W/System.err(4384): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
02-25 10:40:32.648: W/System.err(4384): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
02-25 10:40:32.648: W/System.err(4384): at java.net.Socket.startupSocket(Socket.java:566)
02-25 10:40:32.648: W/System.err(4384): at java.net.Socket.tryAllAddresses(Socket.java:127)
02-25 10:40:32.658: W/System.err(4384): at java.net.Socket.<init>(Socket.java:177)
02-25 10:40:32.658: W/System.err(4384): at java.net.Socket.<init>(Socket.java:149)
02-25 10:40:32.658: W/System.err(4384): at nke.service.wificonnection.ThreadWifi$ReceiverThread.run(ThreadWifi.java:163)
02-25 10:40:32.658: W/System.err(4384): Caused by: libcore.io.ErrnoException: connect failed: EHOSTUNREACH (No route to host)
02-25 10:40:32.658: W/System.err(4384): at libcore.io.Posix.connect(Native Method)
02-25 10:40:32.658: W/System.err(4384): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
02-25 10:40:32.668: W/System.err(4384): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
02-25 10:40:32.668: W/System.err(4384): at libcore.io.IoBridge.connect(IoBridge.java:112)
02-25 10:40:32.668: W/System.err(4384): ... 7 more
如果我想再次使用的連接,我必須刷新wifi連接(在Android的參數中,停止並重新啓動wifi並連接到設備的wifi)。
可能是什麼問題?錯誤後關閉套接字時是否有問題?
如果我從手機上用瀏覽器調用相同的請求我正在得到正確的響應.. – 2017-03-18 14:57:10