Я кодирую приложение удаленного рабочего стола, как 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;
}
}