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

今天研究這個問題搞了整整一天啊!終於出來了,不過我沒有多大的成就感,爲何呢?由於這不是個人勞動成果。一樣的問題,我卻沒想出來!心塞的很啊……服務器

不過仍是要給你們分享一下,但願給你們帶來幫助!socket

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

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

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

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

重點來了,怎麼保證服務重啓時候自動鏈接呢?blog

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{}中,捕獲異常的時候從新鏈接,就能夠實現想要的效果了。圖片

但願給你們帶來幫助,謝謝!get

相關文章
相關標籤/搜索