Processingでサーバーとクライアントのプログラムを作って通信させたいと考えています。
初めてのプロセッシングという書籍の19章を参考にしていますが、そのままサンプルコードを使ってもうまくいきません。
processingのバージョンは3.5.4、windows10にて実行しています。
質問
互いの画面にellipseでお絵描きするプログラムを実行してみましたが、なぜか相手から送信された座標にellipseを描くことができません。
クライアントプログラムのvoid clientEvent(Client client) 内のellipse(vals[0], vals[1], 16, 16);が機能しないのはなぜでしょうか。
試しにvoid draw内にellipse(vals[0], vals[1], 16, 16);を入れてみるとうまくいくのですが、その理由がわかりません。
サーバー側プログラム
import processing.net.*; Server server; String incomingMessage = ""; void setup() { size(400, 200); server = new Server(this, 5204); fill(0); } void draw() { background(255); text(incomingMessage, 20, 50); Client client = server.available(); if (client != null) { incomingMessage = client.readStringUntil('\n'); server.write(incomingMessage); } } void serverEvent(Server server, Client client) { incomingMessage = "A new client has connected:" + client.ip(); println(incomingMessage); }
クライアント側プログラム
import processing.net.*; Client client; int[] vals = new int [2]; void setup() { size(200, 200); client = new Client(this, "127.0.0.1", 5204); background(255); fill(0, 100); noStroke(); for(int i =0; i<2; i++){ vals[i] = 0; } } void draw() { } void clientEvent(Client client) { rect(100,100,50,50); String in = client.readString(); if (in != null) { in = in.trim(); println( "Receiving:" + in); vals = int(split(in, ",")); ellipse(vals[0], vals[1], 16, 16); } } void mouseDragged() { String out = mouseX + "," + mouseY + "\n" ; ellipse(mouseX, mouseY, 16, 16); client.write(out); println("Sending: " + out); }