今天研究這個問題搞了整整一天啊!終於出來了,不過我沒有多大的成就感,為什么呢?因為這不是我的勞動成果。同樣的問題,我卻沒想出來!心塞的很啊……
不過還是要給大家分享一下,希望給大家帶來幫助!
先聲明一下:不是我不放源碼,是因為這個功能是我項目的一小部分,貼源碼太聲勢浩盪了,,而且下載后不一定能用,所以就貼核心代碼啦~
我是以每分鍾向服務端發送一個心跳來保持連接的,如下:

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{}中,捕獲異常的時候重新連接,就可以實現想要的效果了。
希望給大家帶來幫助,謝謝!
