Java-сокет больше не принимает данные - PullRequest
0 голосов
/ 31 мая 2019

Я кодирую приложение удаленного рабочего стола, как anydesk, но проблема в том, что отправляются первые 1-2 кадра, а затем больше ничего не происходит. Я видел, что это все, и я обнаружил, что поток ввода с сервера, вероятно, не работает, потому что отправка отправленного пакета это не так. И я отладил идентификаторы пакетов, и я увидел, что если поток рабочего стола работает там, неправильные идентификаторы пакетов, как, например, «-234343».

Я уже опробовал множество возможностей отправки и получения данных изображений, но это не дает сбоя, потому что если я хочу отправить файлы, точно так же происходит, так или иначе, потому что я отправляю много данных одновременно.

открытый класс ScreenManager {

public static final ArrayList<UUID> clients = new ArrayList<UUID>();
public static final HashMap<UUID, Integer> monitors = new HashMap<UUID, Integer>();
public static GraphicsDevice[] devices;
private static boolean running = false;
private static final HashMap<Integer, Robot> robots = new HashMap<Integer, Robot>();

public static void start() {
    if(running)
        return;
    running = true;
    devices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
    for(int i = 0; i < devices.length; i++) {
        try {
            robots.put(i, new Robot(devices[i]));
        } catch (AWTException e) {}
    }

    for(int i = 0; i < devices.length; i++) {
        final int monitor = i;
        new Thread() {

            public void run() {
                while(running) {
                    try {
                    BufferedImage frame = robots.get(monitor).createScreenCapture(new Rectangle(devices[monitor].getDisplayMode().getWidth(), devices[monitor].getDisplayMode().getHeight()));
                    ArrayList<UUID> clientlist = new ArrayList<UUID>();
                    for(int i = 0; i < clients.size(); i++) {
                        if(monitors.get(clients.get(i)) == monitor) {
                            clientlist.add(clients.get(i));
                        }
                    }
                    if(clientlist.size() > 0)
                        Client.instance.sendPacket(new DesktopDataPacket(clientlist, DesktopDataType.DATA, devices.length, frame));
                    }catch(Throwable t) {}
                }
            }
        }.start();
    }
}

public static void stop() {
    if(!running)
        return;
    running = false;
    robots.clear();
    monitors.clear();
    clients.clear();
    devices = null;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...