Connecting to the robot - C#

Hello,

I’ve been trying to use NetworkStream in C# to connect to the robot, but I can’t find a good resource to help me recieve packets from the robot. I’ve got the labview code that will run using TCP but I’m needing some help on the client side.

Anyone Know C# well enough to help, or at least point me to the right resource?

Thanks!

You should just call NetworkStream.Read, but it sounds like you’ve already made it that far. What exactly isn’t working?

It never actually connects to the robot to get any data:/

Have you looked into the TcpClient class?

I have not, do you have any good resources you can give me on that?

MSDN is the place to go for C#. There are some examples further down.

I can’t believe I didn’t think of MSDN before, I guess my version of VS doesn’t have in implemented because I got Express 2012:/

Thanks!

I’ve got a small labview program writing a string to the stream and then on the client side (written in C#), when I read the stream every 20ms, it comes back jumbled after the first read.

For instance, if I wrote a string “a b c” to the stream, it would read like this for the first four iterations (each line is what is read at 20ms):

“a b c”
" ca b"
"b ca "
"ca b "

As you can imagine, this is very annoying if I’m splitting up the string on the client side and using the three numbers for calculations.

Do I need to change the speed at which I’m reading the string or what’s causing the inconsistency?

Can you post a screenshot of your LV server you have running and copy/paste some of the C# you’re using?

Yep!

Here’s the server code, really simple LV server, went off a youtube tutorial

Here’s the C# code to read the stream, note that this reads every 20ms.

 private void timUpdate_Tick(object sender, EventArgs e)
        {
            //update revolutions X and Y and the Gyro Angle every 20ms from the server string value
            //and make sure the connection is solid, otherwise update connection
            Byte] info = new Byte[Client.ReceiveBufferSize];
            try
            {
                int rData = stream.Read(info, 0, System.Convert.ToInt32(Client.ReceiveBufferSize));
                RobotData = System.Convert.ToString(rData);
            }
            catch (System.IO.IOException)
            {
                lblConnectInd.BackColor = System.Drawing.Color.Red;
                Log("The robot ended the stream.");
                stream.Close();
                Client.Close();
            }

            //split string into X, Y and angle
            strRevX = RobotData.Substring(0, 2);
            strRevY = RobotData.Substring(5, 2);
            strAngle = RobotData.Substring(8, 2);

            //update values recieved in GUI
            lblX.Text = strRevX;
            lblY.Text = strRevY;
            lblAngle.Text = strAngle;

            //convert separated strings into doubles
            Double.TryParse(strRevX, out dblRevolutionsX);
            Double.TryParse(strRevX, out dblRevolutionsY);
            Double.TryParse(strAngle, out dblAngle);


            //make sure we're still connected
            if (Client.Connected == true)
            {
                lblConnectInd.BackColor = System.Drawing.Color.Green;
            }
            else
            {
                lblConnectInd.BackColor = System.Drawing.Color.Red;
                timUpdate.Stop();
            }
        }

Other than the jumbled string, it works great!