socket客户端异常关闭,服务端解决方案

异常以下:

java.net.SocketException: Socket is closed 	
at java.net.Socket.getOutputStream(Socket.java:916) ~[na

引发后果

服务端不知道客户端socket已经关闭,若是继续发送数据,可能致使发送如上关闭异常。若是有多个客户端长链接给服务端创建,异常处理不恰当的话,还可能引发下次发送异常关闭状况。java

解决方案

socket客户端断开以后会回调服务端socket,这时服务端发现输入流的长度为 -1 这时首先须要关闭客户端socket,而后把该socket从发送列表中删除。socket

Java代码实例

  1. 检测是否断开
int len = in.read(head, 0, Const.PACK_HEAD_LEN);
                // socket 已经断开,跳出循环
                if (len == -1) {
                    break;
                }
  1. 关闭客户端socket而且移除发送客户端socket
try {
                socket.close();
                sockets.remove(socket);
            } catch (IOException e) {
                this.logger.error(e);
            } finally {
                socket = null;
            }
相关文章
相关标签/搜索