我正在研究Java中的远程控制程序,我使用套接字进行连接,ObjectOutputStream
,ObjectInputStream
在计算机之间传输数据。
我的程序是从服务器端构建的,它处理和转发它接收的数据,客户端是连接的用户。
我正在使用Robot
课程转移远程计算机的屏幕截图。这是我发送屏幕截图的方式:
public void send_screenshots() throws java.io.IOException{
stop = false; // if the connections should stop
screenshot_sender = new java.util.Timer();
// screens is the connected graphicsdevices array.
final java.awt.Robot r=new java.awt.Robot(screens[current_screen]);
screenshot_sender.schedule(new java.util.TimerTask() {
@Override
public void run() {
if (!stop) {
try {
outputstream.reset(); // had to write it, made too many problems (in other part of the code) when I didn't reset…
// I convert the BufferedImage to byte[] so I will be able to write it
outputstream.writeObject(ImagetoByteArray(r.createScreenCapture(screens[current_screen].getDefaultConfiguration().getBounds()));
outputstream.flush();
System.out.println("sent");
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("STOPPED SENDING SCREENSHOTS");
cancel();
screenshot_sender.cancel();
}
}
}, 1500, 100);
}
这是有效的,直到我尝试切换到另一个屏幕,它发送3次并停止发送。我尝试将屏幕截图保存为文件(以查看它是否正确)并且没关系。我在上面代码的每一行之后添加了System.out.println("line");
,代码卡在writeObject调用上。
为什么会卡住?
当客户端连接时设置输出流,如下所示:
outputstream = new java.io.ObjectOutputStream(client.getOutputStream());