socket客户端关闭,服务端怎么处理

socket客户端关闭了,服务端会报错,怎么让服务端任然正常运行?

我没用过Java,我只做过C++的客户端服务端通信,客户端服务端是两个软件啊,断开连接只要回“service has been stoped”,软件怎么会报错,难道你说的报错就是指断开连接时需要有反馈信息?

PrintWriter pw=null;
        try {
            /*
             * InputStream getInputStream()
             * Socket 提供的该方法可以提供一个输入流,
             */
            InputStream in=socket.getInputStream();
            InputStreamReader isr=new InputStreamReader(in,"UTF-8");
            BufferedReader br=new BufferedReader(isr);

            /*
             * 通过Socket获取输出流,用于将消息发送给客户端
             */
            OutputStream os=socket.getOutputStream();
            OutputStreamWriter osw=new OutputStreamWriter(os,"UTF-8");
            pw=new PrintWriter(osw,true);

            /*
             * 将该客户端的输出流存入到共享集合中
             * 
             * 由于多个线程都会调用该集合的add方法向其中添加
             * 输出流,所以为了保证线程安全,可以将该集合加锁.
             */
            synchronized (allOut) {
                allOut.add(pw);
            }


            sendMessage(host+"上线了,当前在线:"+allOut.size()+"人");
            System.out.println(host+"上线了");

            String message=null;
            while((message=br.readLine())!=null){
                synchronized (allOut) {
                    /*
                     * 转发给所有客户端
                     */
                    sendMessage(host+"说:"+message);
                }

//                  pw.println(host+"说:"+message);
//                  System.out.println(host+":");
//                  System.out.println(message);
            }
        } catch (Exception e) {

        } finally{
            /*
             * 处理客户端断开连接后的工作
             */

            /*
             * 将该客户端的输出流从共享集合中删除
             */
            sendMessage(host+"下线了,当前在线:"+allOut+"人");
            System.out.println(host+"下线了");
            synchronized (allOut) {
                allOut.remove(pw);
            }


            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

之前写过的一些代码,感觉和你描述的问题相近,你可以参考下

那是因为你代码有问题