java.net.SocketException: Socket is closed at java.net.Socket.getOutputStream(Socket.java:916) ~[na
服務端不知道客戶端socket已經關閉,若是繼續發送數據,可能致使發送如上關閉異常。若是有多個客戶端長鏈接給服務端創建,異常處理不恰當的話,還可能引發下次發送異常關閉狀況。java
socket客戶端斷開以後會回調服務端socket,這時服務端發現輸入流的長度爲 -1 這時首先須要關閉客戶端socket,而後把該socket從發送列表中刪除。socket
int len = in.read(head, 0, Const.PACK_HEAD_LEN); // socket 已經斷開,跳出循環 if (len == -1) { break; }
try { socket.close(); sockets.remove(socket); } catch (IOException e) { this.logger.error(e); } finally { socket = null; }