簡體   English   中英

Java套接字讀取超時異常

[英]Java socket read timeout exceptions

我嘗試使用讀取超時來克服服務器端的用戶斷開連接檢測。 這是我的代碼的一部分:

try {
        socket.setSoTimeout(3000);
        in = new DataInputStream(socket.getInputStream());
        out = new DataOutputStream(socket.getOutputStream());
        usr = new User(in.readUTF());
        usr.connectUser();
        int i=0;
        while(true){
            try{
                i = in.readInt();
            }
            catch(SocketTimeoutException e){
                System.Out.Println("Timeout");
                // user connected, no data received
            }
            catch(EOFException e){
                System.Out.Println("Disconnected");
                // user disconnected
            }
        }
    }
    catch(Exception  e){
        // other exceptions
    }

該代碼工作正常,除了“用戶斷開連接”問題。 我想捕獲超時異常,只是繼續等待數據,但前提是客戶端仍然連接。 為什么我再也沒有收到SocketTimeoutException以外的異常? 在in.readInt()不能使用套接字的情況下,由於客戶端斷開連接,我是否應該獲得IOException?

還有其他簡單的方法可以檢測用戶斷開連接嗎? 我的意思是不想要的斷開連接,例如用戶突然關閉了wifi等...

謝謝,利茲。

如果客戶端在超時時間內未寫入任何內容,則會收到SocketTimeoutException。 如果他斷開連接而不是寫任何東西,則會得到EOFException。 分別捕獲它們。 如果您沒有收到EOFException,則他不會斷開連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM