boolean sendIncPatchers(Socket socket) {
        gid = (gid + 1) % 10;
        d = Toolkit.getDefaultToolkit().getScreenSize();
        BufferedImage screenImage = robot.createScreenCapture(new Rectangle(d));

        rgbdata = ((DataBufferInt) screenImage.getData().getDataBuffer()).getData(0);
        int hblocks = (int) Math.ceil(d.getWidth() / blockSize);
        int vblocks = (int) Math.ceil(d.getHeight() / blockSize);

        for (int j = 0; j < vblocks; ++j) {
            for (int i = 0; i < hblocks; ++i) {
                int pos_x = i * blockSize;
                int pos_y = j * blockSize;
                if (testSectionUpdate(pos_x, pos_y, d) == true) {
                    //dirty section!
                    int width = blockSize;
                    int height = blockSize;
                    //out of screen
                    if (pos_x + width > d.width) {
                        width = d.width - pos_x;
                    }
                    if (pos_y + height > d.height) {
                        height = d.height - pos_y;
                    }
                    if (!sendData(socket,
                            new ScreenPatcher(
                            gid,
                            compressImage(screenImage.getSubimage(pos_x, pos_y, width, height)),
                            pos_x,
                            pos_y,
                            d.width,
                            d.height))) {
                        return false;
                    }
                }
            }
        }

        //set compare frame
        oldrgbdata = rgbdata;
        return true;
    }