亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢測遠端插座關閉?

如何檢測遠端插座關閉?

揚帆大魚 2019-09-21 14:21:32
您如何檢測是否Socket#close()在遠端的套接字上被調用?
查看完整描述

3 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

該isConnected方法無濟于事,true即使遠程端已關閉套接字,它也將返回。嘗試這個:


public class MyServer {

    public static final int PORT = 12345;

    public static void main(String[] args) throws IOException, InterruptedException {

        ServerSocket ss = ServerSocketFactory.getDefault().createServerSocket(PORT);

        Socket s = ss.accept();

        Thread.sleep(5000);

        ss.close();

        s.close();

    }

}


public class MyClient {

    public static void main(String[] args) throws IOException, InterruptedException {

        Socket s = SocketFactory.getDefault().createSocket("localhost", MyServer.PORT);

        System.out.println(" connected: " + s.isConnected());

        Thread.sleep(10000);

        System.out.println(" connected: " + s.isConnected());

    }

}

啟動服務器,啟動客戶端。您將看到它打印了兩次“ connected:true”,即使套接字第二次關閉也是如此。


真正找出答案的唯一方法是IOException對關聯的Input / OutputStream 進行讀?。鷮@得-1作為返回值)或寫入(將拋出(破損的管道))。


查看完整回答
反對 回復 2019-09-21
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

您還可以在寫入客戶端套接字時檢查套接字輸出流錯誤。


out.println(output);

if(out.checkError())

{

    throw new Exception("Error transmitting data.");

}


查看完整回答
反對 回復 2019-09-21
  • 3 回答
  • 0 關注
  • 342 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號