⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conductor.java

📁 原创
💻 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 + -