Datasocket的简介中提到可以通过Datasocket ActiveX控件,来使visual studio与labview之间进行通讯,将labview发送的数据由c#语言编写的程序接收,请问有人知道具体怎么做吗,Datasocket ActiveX控件又如何获取呢,使用vs的pc是不是需要安装什么驱动或者服务,又或者除了ActiveX之外还有什么其他方式能完成labview与c#程序的通信,希望能提供具体的操作流程。
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)
{
}
}
}
网络变量LabView与C#通信,LabView是2016版本,C#在VS2017中编写,包含了简单数据通信,复杂数据通信,VS中需要安装Measurement Studio
相关下载链接://download.csdn.net/download/gxb02/12839330?utm_source=bbsseo
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~