📄 conductor.java
字号:
package clientServer;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.Raster;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 协调整个客户端图像发送进程
*/
public class Conductor extends Thread {
private DataOutputStream dout;
private DataBuffer mNews, mOlds;
private Raster mDifs;
private WindowDectect mDectNewOld;
private SystemInterface mSystem;
private BufferedImage mNewImage, mDifImage;
private Socket mSocket = null;
private TileSender mSender;
private long set, startTime, endTime;// 每次发送过程的开始时间和结束时间
private boolean first = true;
public Conductor() {
try {
mSocket = new Socket(Common.sIp, Common.sIPort);
dout = new DataOutputStream(new BufferedOutputStream(mSocket
.getOutputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mSender = new TileSender(dout);
mSystem = SystemInterface.getInstance();
mDectNewOld = new WindowDectect();
// init mOlds
mDifImage = new BufferedImage(Common.sScreenWidth,
Common.sScreenHeight, BufferedImage.TYPE_INT_RGB);
mDifs = mDifImage.getData();
}
public void run() {
while (Common.sContinue) {
startTime = System.currentTimeMillis();
/** ******************截屏************************* */
mNewImage = mSystem.captureScreen();
mNews = mNewImage.getData().getDataBuffer();
if (!first) {
/** 比较新帧与上一帧的不同 */
mDectNewOld.setDataBuffer(mNews, mOlds);
mDectNewOld.getDiff(mDifs.getDataBuffer());
mDifImage.setData(mDifs);
/** 发送图像 */
mSender.sendTile(mDifImage);
} else {
mSender.sendTile(mNewImage);
first = false;
}
/** **************后续处理工作,以便进行下一次发送********************** */
mOlds = mNews;
endTime = System.currentTimeMillis();
set = endTime - startTime;
if (set < 300) {
synchronized (this) {
try {
this.wait(3000 - set);// 确保每两次发送的时间间隔大于等于300毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
// close socket
try {
mSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -