C# (VS2019) DeskTopApplication [DATAGRAM(SOCK_DGRAM)非同期] (2020-01)


送信側から数字を送り、受取側のテキストボックスに表示。

  • データグラム送信側
    using System;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace send {
        public partial class Form1 : Form {
    
            public Form1() {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e) {
    
            }
    
            private async void button1_Click(object sender, EventArgs e) { // async追加
    
                // https://dobon.net/vb/dotnet/internet/udpclient.html
                string remoteHost = "192.168.3.166"; //192.168.3.255 だと3セグメント全てに送信(ブロードキャスト)
                int remotePort = 2002;
    
                //UdpClientオブジェクトを作成する
                System.Net.Sockets.UdpClient udp = new System.Net.Sockets.UdpClient();
                long x = 0;
    
                await Task.Run(() => {
    
                    for (; ; )               {
                        //送信するデータを作成する
                        Thread.Sleep(500);
    
                        string sendMsg = x.ToString();
                        x++;
                        byte[] sendBytes = System.Text.Encoding.UTF8.GetBytes(sendMsg);
    
                        //リモートホストを指定してデータを送信する
                        udp.Send(sendBytes, sendBytes.Length, remoteHost, remotePort);
                    }
    
                });
            }
        }
    }
    
    --------------------------------------------------------------------------------------------------
    
  • データグラム受信側 using System; using System.Threading.Tasks; using System.Windows.Forms; namespace rcv { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private async void Form1_Load(object sender, EventArgs e) { // https://dobon.net/vb/dotnet/internet/udpclient.html string localIpString = "192.168.3.166"; System.Net.IPAddress localAddress = System.Net.IPAddress.Parse(localIpString); int localPort = 2002;// 2002; //UdpClientを作成し、ローカルエンドポイントにバインドする System.Net.IPEndPoint localEP = new System.Net.IPEndPoint(localAddress, localPort); System.Net.Sockets.UdpClient udp = new System.Net.Sockets.UdpClient(localEP); string rcvMsg; byte[] rcvBytes; System.Net.IPEndPoint remoteEP = null; for (; ; ) { await Task.Run(() => { rcvBytes = udp.Receive(ref remoteEP); rcvMsg = System.Text.Encoding.UTF8.GetString(rcvBytes); this.Invoke(new Action(() => { textBox1.Text = rcvMsg; })); }); } } } }
  • 戻る