private void start() {
        System.out.println("客户机 【" + socket.getInetAddress().getHostAddress() + "】 连接完成...");
        ClassManager.getInfoJPanel().setInfo(String.valueOf(num));
        //下面循环怎么检测不到客户关闭了呢
        while (!flag) {
            flag = socket.isClosed();
            //System.out.println("2: " + socket.isConnected());
            if (flag) {
                num--;
                ClassManager.getInfoJPanel().setInfo(String.valueOf(num));
            }
        }
    }
客户机有个GUI界面
this.setDefaultCloseOperation(0); //设置FRAME默认关闭状态   //关闭事件
    private void formWindowClosing(java.awt.event.WindowEvent evt) {                                   
        // TODO add your handling code here:
        ClassManager.get_SocketClient().Close(); //关闭socket
        System.exit(0);
    }   为什么上面服务端检测不到客户断关闭了呢

解决方案 »

  1.   

    问题2
        private void Connection() throws Exception {
            address = new InetSocketAddress(InetAddress.getByName(MResource.getCfg("socket.ip")), Integer.valueOf(MResource.getCfg("socket.port")));
            socket = new Socket();
            socket.connect(address); // 如果服务端没运行 就抛出异常
          
            //Retry();// 这个方法我是想重试
        }    private void Retry() throws Exception {
            while (!socket.isConnected()) {
                socket.connect(address);
            }
        }
    我最终的目的是 如果服务端有没有启动,客服端会一直发送请求 知道与服务端建立连接就停止发送
      

  2.   

     关闭前客户给服务器发一个消息:说我下线了,请关闭. 直接在客户端把socket关闭,服务器端的socket是不会自动关闭的,貌似是这样子
      

  3.   


        private void Connection() throws Exception {
            address = new InetSocketAddress(InetAddress.getByName(MResource.getCfg("socket.ip")), Integer.valueOf(MResource.getCfg("socket.port")));
            socket = new Socket();
            socket.connect(address); // 如果服务端没运行 就抛出异常
          
            //Retry();// 这个方法我是想重试
        }看清楚        socket = new Socket();
            socket.connect(address);