0

我有运行新线程的服务。线程负责打开与服务器的连接

serverAddr = InetAddress.getByName(serverIP);
socket = new Socket(serverAddr, port);

然后我运行具有循环并始终从服务器读取的 listenToServer() 方法。

scanner = new Scanner(socket.getInputStream());
message = scanner.nextLine();
while (!message.equals(null)
    message = scanner.nextLine();
//...
 }

根据该消息,我调用了一些方法,这些方法将指令发送到处理许多情况的活动,并且线程仍在侦听来自服务器的新指令。

但是当 Internet 连接丢失(关闭 wi-fi 或服务器关闭)时,应用程序将崩溃。我该如何处理此错误并安全地停止和取消绑定服务并停止工作线程(从服务启动)。

4

3 回答 3

2

将超时添加到套接字连接。

mSocket.setSoTimeout(10000);

如果没有任何响应,它将在 10 秒内抛出 SocketTimeoutException 并在此异常的捕获中关闭连接(如果存在),然后再次连接。

catch (SocketTimeoutException e){
                if(mSocket.isConnected()){
                    disconnect();
                }
                connect();
            }
于 2015-05-22T08:54:37.030 回答
1

但是当 Internet 连接丢失(关闭 wi-fi 或服务器关闭)时,应用程序将崩溃。

不,不会的。它会得到一个 IOException。

我该如何处理此错误并安全地停止和取消绑定服务并停止工作线程(从服务启动)。

这就是 IOException 的用途。

你的问题真的没有意义。

于 2013-09-10T13:28:08.570 回答
0
         public static boolean isNetworkAvailable(Context context           ,DialogInterface.OnDismissListener dismissListener, Boolean endActivity){

     ConnectivityManager conMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);  
     NetworkInfo info= conMgr.getActiveNetworkInfo();

     boolean isNetworkAvailable=false;
       if(info != null && info.isConnected()) { 
          isNetworkAvailable=true;
       //    Log.e("NetworkInfo","Connected State");  
       }  
       else{  
         isNetworkAvailable=false;
         alertNetworkConnection(context,dismissListener,endActivity);
     //  Log.e("NetworkInfo","Not Connected state");  
       }

     return isNetworkAvailable;
}
于 2013-09-10T13:06:03.153 回答