如何在打开套接字连接时捕获连接丢失错误?

时间:2013-09-10 12:53:46

标签: android multithreading sockets connection

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

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();
//...
 }

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

但是当互联网连接丢失(关闭Wi-Fi或服务器关闭)时,应用程序将崩溃。我怎么能处理这个错误并安全地停止&取消绑定服务并停止工作线程(从服务启动)。

3 个答案:

答案 0 :(得分:2)

为套接字连接添加超时。

catch (SocketTimeoutException e){
                if(mSocket.isConnected()){
                    disconnect();
                }
                connect();
            }

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

select : function(event, data) {
    data.node.visit(function (childNode) {          
    childNode.setSelected(data.node.selected);
});

答案 1 :(得分:1)

  

但是当互联网连接丢失(关闭Wi-Fi或服务器关闭)时,应用程序将崩溃。

不,不会。它将获得IOException。

  

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

这就是IOException的用途。

你的问题没有意义。

答案 2 :(得分: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;
}