liuh199416 2021-03-24 10:54 采纳率: 0%
浏览 404
已结题

labview使用datasocket与c/c#程序的通信

Datasocket的简介中提到可以通过Datasocket ActiveX控件,来使visual studio与labview之间进行通讯,将labview发送的数据由c#语言编写的程序接收,请问有人知道具体怎么做吗,Datasocket ActiveX控件又如何获取呢,使用vs的pc是不是需要安装什么驱动或者服务,又或者除了ActiveX之外还有什么其他方式能完成labview与c#程序的通信,希望能提供具体的操作流程。

  • 写回答

3条回答 默认 最新

  • 歇歇 2021-03-30 19:07
    关注

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Threading;
    using System.Net.Sockets;

    namespace server
    {
        public partial class Form1 : Form
        {
            /// <summary>
            /// 首先定义几个全局变量
            /// </summary>
            private System.Net.Sockets.Socket sock, accSock;
            private IPAddress myIP = IPAddress.Parse("127.0.0.1");
            private IPEndPoint MyServer;
            Thread threadServer;
            private bool check = true;

            public Form1()
            {
                InitializeComponent();
            }

            /// <summary>
            /// 开始监听按钮
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void BtnStartListen_Click(object sender, EventArgs e)
            {
                try
                {
                    IPHostEntry myHost = new IPHostEntry();
                    myHost = Dns.GetHostByName(this.textIP.Text.Trim());
                    string str = myHost.AddressList[0].ToString();
                    myIP = IPAddress.Parse(str);
                }
                catch
                {
                    MessageBox.Show("你输入的IP地址格式不对,请重新检查!");
                }
                try
                {
                    threadServer = new Thread(new ThreadStart(accpServer));
                    threadServer.IsBackground = true;
                    threadServer.Start();
                }
                catch (Exception err)
                {
                    this.textMsgSate.AppendText(err.Message);
                }
            }

            /// <summary>
            /// 开启一个线程监听labview发来的消息
            /// </summary>
            private void accpServer()
            {
                Control.CheckForIllegalCrossThreadCalls = false;//取消线程保护
                MyServer = new IPEndPoint(myIP, Int32.Parse(this.textPort.Text));
                sock = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sock.Bind(MyServer);
                sock.Listen(50);
                this.textMsgSate.AppendText("主机:" + this.textIP.Text + "端口:" + this.textPort.Text +"\r"+"开始监听......\r\n");
                accSock = sock.Accept();
                if (accSock.Connected)
                {
                    this.textMsgSate.AppendText("与labview连接成功!"+"\r\n");
                    while (check)
                    {
                        Byte[] Rec = new Byte[64];
                        NetworkStream netStream = new NetworkStream(accSock);
                        netStream.Read(Rec, 0, Rec.Length);
                        string RecMessage =
                            System.Text.Encoding.ASCII.GetString(Rec);
                        this.textReciveMsg.AppendText(RecMessage + "\r\n");
                    }
                }
            }
            /// <summary>
            /// 停止监听
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void BtnStopListen_Click(object sender, EventArgs e)
            {
                try
                {
                    threadServer.Abort();
                    sock.Close();
                    this.textMsgSate.AppendText("主机:" + this.textIP.Text + "端口:" + this.textPort.Text + "监听停止!\r\n");
                }
                catch
                {
                    MessageBox.Show("监听尚未开始,关闭无效!");
                }
            }

            private void Btnsend_Click(object sender, EventArgs e)
            {
                try
                {
                    byte[] sendByte = new byte[64];
                    string send = this.textSendMsg.Text + "\r\n";
                    NetworkStream netStream = new NetworkStream(accSock);
                    sendByte = System.Text.Encoding.ASCII.GetBytes(send.ToCharArray());
                    netStream.Write(sendByte, 0, sendByte.Length);
                    this.textSendMsg.Text = "send over!";
                }
                catch
                {
                    MessageBox.Show("连接未建立,发送失败!");
                }
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                Control.CheckForIllegalCrossThreadCalls = false;//取消线程保护
            }

            private void Form1_Load_1(object sender, EventArgs e)
            {

            }


        }
    }
     

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题