やる気でろ

やる気が出ないので、という言い訳でJava1.5だけを使ってリモートデスクトップ環境を作ってみた。驚くほどに簡単にできた。Javaで通信を行うのも初めてだったけど、こんな簡単に使えるのかーと驚いた。もうC言語で通信をやることはないかもしれない。そんくらい。
あまりにも描画が遅い(Robot#createScreenCaptureが遅い)ので公開はしませんが(Webにアップロードはしてありますが)。別にPublic Computer化を自ら進めているわけではないけれども、以下、簡単にメモ。
Server/Clientモデルで、Serverが操られる側、Clientが操る側。一つのポート番号に二つのソケットを使い、マウスキーボード操作とスクリーンキャプチャの転送用に使う(後者は別スレッドで動かしている)。
ServerはClientから要求された位置の矩形をRobotを使ってスクリーンキャプチャを行い、無圧縮のまま送信する。Clientは送られてきた画像を順に描画する、と同時に前回受信したデータと比較し、一緒であれば次にその位置の画像を要求するまでの時間を遅延する。
マウス、キーボードの操作はSwing環境で動いているClientのコンポーネントがイベントを受け取って、それをServerに送信する。Serverはそれに応じてRobotを使ってその操作を行う。
しかし、マウス操作はまだ比較的ストレスなしに操作できるが、キャプチャが遅すぎるので残念ながら実用には向かないようです(1FPSくらい)。どうせならVNCプロトコルに準拠すればよかったか。