こんにちは。
本日はUDPの通信処理のメモです。
送信時にバインドするようにしてみます。
準備
受信側のipは、192.168.100.10、
送信側のipは、以下の2つをセットします。
- 192.168.100.20
- 192.168.100.30
受信側
public class UdpReceiver { private void Start() { var port = 50000; var client = new UdpClient(port); var remoteEP = new IPEndPoint(IPAddress.Any, port); try { while (true) { Console.WriteLine("受信待機中…"); var bytes = client.Receive(ref remoteEP); Console.WriteLine($"受信! [{remoteEP}] :"); foreach (var byte in bytes) { Console.WriteLine($" {byte}"); } } } catch (SocketException ex) { Console.WriteLine(ex); } finally { client.Close(); } } }
アプリケーションを終了するまで
UDPの受信を待機します。
送信側
public class UdpSender { public void Start() { var remoteIp = IPAddress.Parse("192.168.100.10"); while (true) { Console.WriteLine("Select Type(1:192.168.100.20, 2:192.168.100.30)"); var ipType = Console.ReadLine(); var localIp = "192.168.100.20"; var sendBuf = {1, 2, 3}; switch (ipType) { case "1": break; case "2": localIp = "192.168.100.30"; break; } var remoteEP = new IPEndPoint(remoteIp, 50000); var localEP = new IPEndPoint(IPAddress.Parse(localIp), 50010); using (var udp = new UdpClient()) { udp.Client.Bind(localEP); udp.Send(sendBuf, sendBuf.Length, remoteEP); udp.Close(); } } } }
送信側は、選択されたipでバインドして送信を実行します。
このとき、送信側のマシンに存在しないipを選択すると
System.Net.Sockets.SocketExceptionが発生します。
参考
UdpClient コンストラクター (System.Net.Sockets) | Microsoft Docs
Socket.Bind(EndPoint) メソッド (System.Net.Sockets) | Microsoft Docs
UDP サービスの使用 | Microsoft Docs
以上です。