我正在编写一个应用程序,它在服务中打开套接字并将一些数据发送到服务器并监听传入的数据。当在Android设备上丢失与互联网的连接时,会出现问题。
这是我得到的代码片段
java.net.SocketException:recvfrom failed:ETIMEDOUT(连接定时 出)
try{
mSocket = new Socket("xxx.xxx.xxx.xxx", xxxxx);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream())), true);
BufferedReader in = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
String s;
while((s = in.readLine())!= null){ //here error of course
...
}
mSocket.close();
}catch(Exception e){
e.printStackTrace();
}
当互联网连接丢失并且BufferedReader
尝试时,会引发错误
readLine()
。如何避免这种情况,为什么会这样呢?
更新
在我尝试做下一个场景之前,错误没有打扰到我: 1)打开wifi运行套接字 2)打开移动数据 3)关闭wifi
当关闭wifi时出现错误,但是我通过移动数据连接到互联网,所以我想继续在没有错误的情况下监听套接字。这可能吗?如何?
答案 0 :(得分:1)
您应该做的是重新连接catch块中的新套接字。原来的联系现在已经消失了,我不知道如何“无缝地”交换它。
try {
mSocket = new Socket("xxx.xxx.xxx.xxx", xxxxx);
...
} catch(Exception e){
try {
mSocket = new Socket("xxx.xxx.xxx.xxx", xxxxx);
...
} catch (Exception e2) {
// OK you really lost connectivity at this point, tell the user.
}
}