高度なデータ送受信
クライアントプログラムのマウスの座標をサーバープログラムに送信することを考えてみましょう。
read
メソッドでは1バイト分、すなわち0から255の範囲の数値しか読み込むことができません。
そのため、マウスのx座標とy座標のペアを文字列として表して送信することにしましょう。
まずはクライアントプログラムを以下のように作成します。
client5.pde
import processing.net.*;
Client myClient;
int dataIn;
void setup() {
size(600, 600);
myClient = new Client(this, "127.0.0.1", 5204);
}
void draw() {
}
void mouseMoved() {
String s = "" + mouseX + ',' + mouseY + '\n';
myClient.write(s);
}
マウスのx座標とy座標をカンマで区切り、末尾には改行文字を付けています。
サーバープログラムは以下のようになります。
server5.pde
import processing.net.*;
class Point {
int x, y;
Point (int x, int y) {
this.x = x;
this.y = y;
}
}
Server myServer;
Point p = new Point(0, 0);
void setup() {
size(600, 600);
myServer = new Server(this, 5204);
}
void draw() {
background(255);
fill(0);
ellipse(p.x, p.y, 10, 10);
}
void clientEvent(Client client) {
while (client.available() > 0) {
String[] xy = split(client.readStringUntil('\n').trim(), ',');
p = new Point(int(xy[0]), int(xy[1]));
}
}
サーバープログラムのウィンドウに、クライアントから受信した座標の点を描画しています。
データを文字列として受信するためには、readString
メソッドか readStringUntil
メソッドを使用します。
ここでは、x座標とy座標のペアが改行文字で区切られているため、readStringUntil
メソッドを使用して改行文字までのデータを読み込みます。
読み込んだ文字列を処理し、グローバル変数 p
に受け取った座標を代入します。
ここでは、受信データが常に正しい形式で送られてくることを前提としています。 本来は、データが正しい形式になっていない場合のエラー処理を行う必要があります。