<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    amp@java

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks

    打開了連接服務器的一個Socket后,隔了一段時間沒用,Socket就會自動關閉(為什么?),這時候如果獲取該Socket的OutputStream,并往里面寫東西,在flush的時候就會出現:
    java.net.SocketException: Software caused connection abort: socket write error
    的異常。因此,如果隔了一段時間沒有使用某個Socket,需要重新使用它的時候,就要先判斷它究竟是否還在連接當中,一共嘗試了Socket的三個方法:
    1、isClosed()
    2、isOutputShutdown()
    3、isConnected()
    發(fā)現前兩個都沒用,即使已經斷開了,返回的還是false,只有第三個可以解決問題。
    具體原因未知。

    2007-4-19更新:
    第三個也解決不了問題,還會出現同樣的異常,目前的解決方法是catch SocketException,不管socket的狀態(tài)如何,都把它關閉了重新再連,但是SocketException的種類有很多,不一定是因為Socket已關閉,所以這種方法有點粗魯,但找不到更好的方法。

    posted on 2007-04-12 12:21 amp@java 閱讀(13134) 評論(8)  編輯  收藏 所屬分類: Java common

    評論

    # re: 如何判斷Socket已斷開 2007-04-28 12:18 ddbird
    3、isConnected()

    一樣沒用 只要連上過,就一直給true  回復  更多評論
      

    # re: 如何判斷Socket已斷開 2007-05-07 01:15 amp@java
    的確三個方法都沒用,不知道如何解決這個問題。如果服務器和客戶端都是自己做的,可以采用心跳測試的方法,但有時候服務器不是自己做的,只做客戶端,就不知道怎么判斷究竟連接是否還有效了。  回復  更多評論
      

    # re: 如何判斷Socket已斷開 2008-01-02 14:20 cosmicbao
    isConnect()方法是判斷最近一次是否連接上的,
    所以對本次連接不起作用  回復  更多評論
      

    # re: 如何判斷Socket已斷開 2008-09-22 21:01 liuguoling
    最近在開發(fā)中遇到一個問題,就是如何判斷遠端服務器是否已經斷開連接,如果斷開那么需要重新連接。

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

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

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

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

    try{
    socket.sendUrgentData(0xFF);
    }catch(Exception ex){
    reconnect();
    }  回復  更多評論
      

    # re: 如何判斷Socket已斷開 2009-09-17 10:15 我們
    首先調用socket的setKeepAlive(true)確保主動連接,這樣當斷開的時候isConnected()就是false  回復  更多評論
      

    # re: 如何判斷Socket已斷開 2010-05-07 16:16 寶貝兔
    怎么寫長連接的socket客戶端呢?  回復  更多評論
      

    # re: 如何判斷Socket已斷開 2013-01-29 17:23 wee
    isConnected()&&!isClosed()  回復  更多評論
      

    # re: 如何判斷Socket已斷開 2015-05-14 14:55 songxin
    @liuguoling
    這種方法也有問題,可以看看我的博客中摘錄別人遇到的問題  回復  更多評論
      

    主站蜘蛛池模板: 亚洲成a人片毛片在线| 毛片a级毛片免费观看免下载 | 一级毛片免费播放男男| 亚洲熟妇无码一区二区三区导航 | 两性色午夜免费视频| 免费国产草莓视频在线观看黄| 亚洲一卡2卡3卡4卡乱码 在线| 亚洲黄色在线网站| 亚洲s色大片在线观看| 亚洲av无码无在线观看红杏| 亚洲精品老司机在线观看| 国产又黄又爽又刺激的免费网址| 人禽杂交18禁网站免费| 亚洲免费福利在线视频| 在线观看永久免费| 中文字幕永久免费| 一级黄色免费大片| 一区二区三区AV高清免费波多| 亚洲已满18点击进入在线观看| 亚洲日本一区二区| 蜜芽亚洲av无码精品色午夜| 亚洲日本va午夜中文字幕久久| 亚洲?V乱码久久精品蜜桃| 亚洲精品A在线观看| 亚洲真人日本在线| 久久亚洲AV无码精品色午夜麻| 亚洲色图黄色小说| 亚洲精品伦理熟女国产一区二区| 深夜a级毛片免费视频| 日韩精品无码免费专区午夜| 在线a免费观看最新网站| 日韩一级在线播放免费观看| 国产亚洲精品影视在线产品| 4444亚洲国产成人精品| 亚洲熟妇无码av另类vr影视| 四虎成人精品国产永久免费无码 | 亚洲乱码国产乱码精华| 五月婷婷免费视频| h在线观看视频免费网站| 国产精品免费视频网站| 亚洲国产精品va在线播放|