云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
          最近在開發中遇到一個問題,就是如何判斷遠端服務器是否已經斷開連接,如果斷開那么需要重新連接。 

          首先想到socket類的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,但經過試驗并查看相關文檔,這些方法都是本地端的狀態,無法判斷遠端是否已經斷開連接。 

          然后想到是否可以通過OutputStream發送一段測試數據,如果發送失敗就表示遠端已經斷開連接,類似ping,但是這樣會影響到正常的輸出數據,遠端無法把正常數據和測試數據分開。 

          最后又回到socket類,發現有一個方法sendUrgentData,查看文檔后得知它會往輸出流發送一個字節的數據,只要對方Socket的SO_OOBINLINE屬性沒有打開,就會自動舍棄這個字節,而SO_OOBINLINE屬性默認情況下就是關閉的,太好了,正是我需要的! 

          于是,下面一段代碼就可以判斷遠端是否斷開了連接: 

          Java代碼  收藏代碼
          1. try{  
          2.       socket.sendUrgentData(0xFF);  
          3. }catch(Exception ex){  
          4.       reconnect();  
          5. }  



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 攀枝花市| 丹巴县| 策勒县| 乌什县| 锡林郭勒盟| 广德县| 班戈县| 阿巴嘎旗| 东安县| 温泉县| 保靖县| 丘北县| 鄯善县| 吉木萨尔县| 新密市| 巢湖市| 金门县| 柳河县| 蛟河市| 台南市| 马龙县| 江西省| 秦皇岛市| 张北县| 纳雍县| 福鼎市| 阿拉善右旗| 习水县| 重庆市| 香港| 齐河县| 镶黄旗| 马尔康县| 崇文区| 即墨市| 江口县| 民乐县| 本溪市| 阿鲁科尔沁旗| 湖南省| 美姑县|