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しておきました。

もしよろしければ、サポートをお願いします! 頂いたサポートは、Creatorとしての活動費に充てさせて頂きます。