スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Processingでクライアントとサーバをつくって通信する

その前にちょっとメモ。

IPアドレスを調べる。

コマンドプロンプトで

ipconfig

ってコマンド打つとわかります。もちろんコントロールパネルからも調べられます。


それではProcessingを使って通信をしてみたいと思います。
Processingのクライアントとサーバについてはこちらを参考にしました。
公式リファレンス(英語)


クライアントについて

Clientのコンストラクタ

Client(parent, host,port)
Client(parent,socket)


parentにはthisを使います。hostはIPアドレス、portはポート番号です。
socketは未検証ですすみません。


Clientのメソッド

stop()

サーバとのコネクションを切断します。


String ip()

(おそらく)クライアントが接続しているサーバのIPアドレスを返します。戻り値はStringです。


int available()

通信に利用できるバイト数を返します。戻り値はintです。


clear()

バッファを空にします(未検証)。


int read()

バッファにあるデータを読み出します。戻り値はintです。
最初にデータが利用できるかどうか調べるためにavailable()で検証しなければいけません。
バイトがないときは-1が返ります。


Char readChar()

バッファにあるデータを読み出します。戻り値はChar型です。
データがない場合は-1か0xffffが返ります。


byte[] or int readBytes()

バッファにあるデータを読み出します。検証しましたがよくわかりませんでした。


byte[] or int readBytesUntil()

よくわかりませんでした(未検証)。


String readString()

バッファにあるデータを読み出します。戻り値はStringです。
コードはASCIIコードです。コードの変更も頑張れば可能なようです。


readStringUntill()

未検証です。


write(data)

データをサーバに送信します。引数はString,byte[],intのどれかです。


Serverのコンストラクタ

Server(parent,port)
Server(parent,portmhost)

parentにはthisを使います。portは使用するポート(クライアントと合わせる)です。
hostは未検証ですすみません。


Serverのメソッド

disconnect(client)




available()




stop()

クライアントとの通信を切断します。


write(data)

クライアントにデータを送信します。引数はString,byte[],intのどれかです。


サンプルプログラム

公式リファレンスのサンプルプログラムをちょっと改造してみました。

サーバ、クライアントを別々につくり、サーバプログラム→クライアントプログラムの順に実行してみてください。
クリックするとクライアントからサーバにデータ送信→サーバでカウント→クライアントにデータ送信→クライアント側で受け取ったデータを出力するプログラムです。


サーバ側

import processing.net.*;

int port = 10002;
Server myServer;
int clicks = 0;

void setup()
{
size(400, 400);
background(0);
myServer = new Server(this, port);
}

void draw()
{
Client thisClient = myServer.available();
if (thisClient !=null) {
String whatClientSaid = thisClient.readString();
if (whatClientSaid != null) {
clicks++;
myServer.write(clicks);
}
}
}



クライアント側

import processing.net.*; 
Client myClient;

void setup() {
myClient = new Client(this, "127.0.0.1", 10002);
myClient.write("Hi there");
}

void mouseReleased() {
myClient.write("c:Mouse pressed");
}

void draw() {
if(myClient.available() > 0){
println(myClient.read());
}
}


メソッド部分について未検証部分が多くてすみません。余力があれば勉強がてら追記しておきます。
何かご意見ありましたらよろしくお願いします。
関連記事

コメント

非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。