示例#1
0
        // UDP受信時
        private void onReceive(object sender, UdpEventArgs e)
        {
            byte[] data = e.data;

            // 先頭文字チェック
            if (data[0] != (byte)'#')
            {
                return;
            }
            // コマンド別処理
            switch (data[1])
            {
            // A/D値・サーボ指令値コマンド
            case (byte)'D':
                if (data[14] == (byte)'$')
                {
                    for (int i = 0; i < 4; i++)
                    {
                        adval[i] = ((int)data[2 + 2 * i] << 8) | (int)data[3 + 2 * i];
                        servo[i] = (int)data[10 + i];
                    }
                    this.BeginInvoke((Action)(() => {
                        for (int i = 0; i < 4; i++)
                        {
                            tb_adval[i].Text = adval[i].ToString();
                            tb_servo[i].Text = servo[i].ToString();
                        }
                    }));
                }
                break;

            // 生存確認コマンド
            case (byte)'A':
                if (data[2] == (byte)'$')
                {
                    Console.WriteLine("Received A");
                    isConnected = true;
                    this.BeginInvoke((Action)(() => {
                        labelConnectState.Text = "接続済み";
                    }));
                }
                break;

            // 不明なコマンド
            default:
                break;
            }
        }
示例#2
0
 // 受信スレッドの関数
 private void funcReceive()
 {
     while (!isClosing)
     {
         try
         {
             //データを受信する
             IPEndPoint remoteEP = null;
             byte[]     rcvBytes = receiver.Receive(ref remoteEP);
             //イベント発行
             UdpEventArgs args = new UdpEventArgs();
             args.data = rcvBytes;
             onReceive(this, args);
         }
         catch
         {
             //Console.WriteLine("receiving timeout");
             ; // タイムアウト 特に何もしない
         }
     }
 }