【问题标题】:How to catch connection lost error on open socket connection?如何在打开的套接字连接上捕获连接丢失错误?
【发布时间】:2013-09-10 12:53:46
【问题描述】:

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

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 或服务器关闭)时,应用程序会崩溃。我该如何处理这个错误并安全地停止和取消绑定服务并停止工作线程(从服务启动)。

【问题讨论】:

    标签: android multithreading sockets connection


    【解决方案1】:

    为套接字连接添加超时。

    mSocket.setSoTimeout(10000);
    

    如果没有任何响应,10 秒内它会抛出 SocketTimeoutException 并在捕获此异常时关闭连接(如果存在),然后重新连接。

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

    【讨论】:

      【解决方案2】:

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

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

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

      这就是 IOException 的用途。

      你的问题真的没有意义。

      【讨论】:

        【解决方案3】:
                 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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-19
          • 1970-01-01
          • 2020-11-12
          • 2012-08-18
          • 2015-04-13
          • 2014-09-15
          • 2020-03-14
          • 1970-01-01
          相关资源
          最近更新 更多