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; }