なんだかGoodVibes

日々の勉強メモです。

【C#】UDPの送受信(バインド)

こんにちは。
本日は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



以上です。