unity : udp tips
unity/ oF間でudpを送受信する際のtipsや注意点など。
Receive
timeout設定なし(timeout = ∞)の時、相手がいない時も含め、udp受信するまで、ずっと、udp.Receive( )で待機する。
この時、例外は発生しないが、Loopもまた、回らない。
後述するように、threadは、abortでなく、flagで終了処理を行うので、Loopが回らないのはBad。
なので、timeoutはStart( )で例えば
udp.Client.ReceiveTimeout = 1000;
と設定する。
ただし、これをするとudp.Receive( )は、受信timeoutで例外を投げてくるので、きちんとこれをcatchしてあげないとProgramが止まってしまうので注意。
Send
相手がいない場合、
* 1回目のSendは投げたつもり
* 2回目のSendでException発生
と言う動きをする。
相手がいないので、問題ある訳ではないので、この例外を、きちんとcatchしてあげることで、Program stopを避けること。
stop thread
abortでthreadを停止すると、その瞬間に強制的にthreadが止まってしまう。すると、予期しない例外が発生しかねない(と言うか、結構発生する)。
そこで、volatile bool b_Flag;を使い、main thread側でtrue/falseを設定し、threadを抜けさせるようにControlをするのが良い。
lockも使い、気を使いながらSourceをDesignすること。
Sample Source
GitHub にsourceをupしておきました。
いいなと思ったら応援しよう!
