Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android-socket服務端斷重啟後,android客戶端自動重連,androidsocket服務端

Android-socket服務端斷重啟後,android客戶端自動重連,androidsocket服務端

編輯:關於android開發

Android-socket服務端斷重啟後,android客戶端自動重連,androidsocket服務端


今天研究這個問題搞了整整一天啊!終於出來了,不過我沒有多大的成就感,為什麼呢?因為這是我學長的勞動成果。同樣的問題,我卻沒想出來!心塞的很啊……

不過還是要給大家分享一下,希望給大家帶來幫助!

先聲明一下:不是我不放源碼,是因為這個功能是我項目的一小部分,貼源碼太聲勢浩蕩了,,而且下載後不一定能用,所以就貼核心代碼啦~

我是以每分鐘向服務端發送一個心跳來保持連接的,如下:

sendObject()中的代碼(就是發送內容到服務端):

public void sendObject(String obj) throws IOException {
        DataOutputStream os = new DataOutputStream(socket.getOutputStream());
        os.write(obj.getBytes());
        os.flush();
        System.out.println("發送:" + obj + "客戶端");
    }

重點來了,怎麼保證服務重啟時候自動連接呢?

public static void resetSocket(){
        while(SocketClient.isServerClose(socket)){
            try {
                socket = new Socket(SERVERIP,PORT);    
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            } catch (IOException e) {
                 System.out.println("正在重連....");
                // TODO Auto-generated catch block
                //e.printStackTrace();
            }
            
         }
   }
    
     /** 
        * 判斷是否斷開連接,斷開返回true,沒有返回false 
        * @param socket 
        * @return 
        */  
        public static Boolean isServerClose(Socket socket){  
           try{  
            socket.sendUrgentData(0);//發送1個字節的緊急數據,默認情況下,服務器端沒有開啟緊急數據處理,不影響正常通信  
            return false;  
           }catch(Exception se){  
            return true;  
           }  
        }  

最後,將SocketClient.resetSocket();放入圖片中的catch{}中,捕獲異常的時候重新連接,就可以實現想要的效果了。

希望給大家帶來幫助,謝謝!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved