ofxUDPManagerで受信Portを変更する場合の注意
openFrameworksでUDP通信を受信したいときに、ofxUDPManagerを使って任意のPortをBindしますが、
Port番号を変更する所でちょっと躓いたのでメモ。
例えば私はアプリでUDPを使う場合、使い勝手を考えてofxUIから設定を変更出来るようにしています。
その時、ポートを変える為に何も考えずに再度 udp.Bind(20000); とかしちゃうとこんなエラーが出ます。
※openFrameworks_v0.9.3 Win/OSX で確認。
[ error ] ofxNetwork: ..\..\..\addons\ofxNetwork\src\ofxUDPManager.cpp: 140 EINVAL: invalid argument
たぶん既にポートを開いてる状態だとエラーが起こるようですね。
以下のように一度ポートをClose()で閉じて、Create()で初期化すると大丈夫でした。
// keyPressedとかBindする場所に書く if (isBind) { // Bind済みかどうかのbool udp.Close(); udp.Create(); } isBind = udp.Bind(my_port); // 結果をisBindに保存。成功:true、失敗:false。
その時isBind()の返り値に成功・失敗がboolで帰ってくるので、この例ではbool型のisBindを作って保存する様にしています。
Bindに成功してる時だけudp.Receive()しておけば不要な処理も走らずエラーも出ないのでオススメです。
あ、それとポート開きっぱだと次回起動時にBindが失敗することがあるので、必ずexit()内でClose()するようにしてくださいね!
void ofApp::exit(){ if(isBind) udp.Close(); }
以上、ofxUDPManagerのTipsでした。