高度なデータ送受信

クライアントプログラムのマウスの座標をサーバープログラムに送信することを考えてみましょう。 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 に受け取った座標を代入します。

ここでは、受信データが常に正しい形式で送られてくることを前提としています。 本来は、データが正しい形式になっていない場合のエラー処理を行う必要があります。

results matching ""

    No results matching ""