Java套接字不再接收数据

时间:2019-05-31 09:24:17

标签: java file-transfer remote-desktop

我对像Anydesk这样的远程桌面应用程序进行了编码,但问题是发送了前1-2个帧,然后什么也没有发生。我已经了解了所有内容,并且发现服务器的输入流可能无法正常工作,因为发送的数据包无法发送。 而且我已经调试了数据包ID,并且看到如果桌面流在其中运行了错误的数据包ID,例如'-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;
}

}

0 个答案:

没有答案