時間ないのでメモだけ。
int lPort = 60000; localEP = (EndPoint)(new IPEndPoint(IPAddress.Any, lPort)); clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); if (lPort != 0) clientSocket.Bind(localEP);
ソースポート(送信元ポート)は送信時にOSにランダムに割り当ててもらうのが普通だと思うけど、あるハードウェア通信をするときに固定する必要があった。
もし固定しないと、送信したソケットと別にサーバーソケットを用意しなければならなくて面倒なことになる。
Rubyではできたけど、C#についてはずいぶん探すのに苦労した。ソケットについてはあまりよく知らんので、経験則のみに頼ってる。
ローカルエンドポイントのポートを0で指定すると、ランダムソースポートになり、それ以外だと固定ソースポートになるということらしい。
上のソースではUDPの再送を実装したくて、System.Net.Sockets.UdpClientを使わなかった。UdpClientの場合はBindメソッドないので、多分コンストラクタでlocalEP渡せばよいと思う。