[英]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.