LabVIEW编程实例:如何通过TCP协议进行数据通信

article/2025/7/5 23:45:54

目录

实例说明

 编程思路

服务器端程序

客户端程序

总结

怎么获取服务器上的ip地址和端口号


        对于网络通信来说,LabVIEW平台本身提供了多种方法加以实现,如可以通过TCP协议、UDP协议、DataSocket技术、甚至远程面板通信技术等方式进行通信。

        下面通过一个简单的例子,演示在LabVIEW中如何通过TCP协议实现两个程序之间的数据通信功能。

实例说明

        编写两个程序,分别为服务器端程序和客户端程序。其中,服务器端程序开始运行时,处于等待客户端连接的状态中,一旦有客户端成功连接,则向客户端发送带有时间信息的字符串“I`m sever!”;客户端程序与服务器成功建立连接后,则读取服务器端发送的信息,并在前面板上显示出来,以此来实现服务器端与客户端的通信。

 编程思路

        TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。使用LabVIEW基于TCP协议编写通信软件时,一般其整个传输过程如下:

(1)服务器通过主机名或者IP地址与端口号,建立侦听,等待客户端连接;

(2)客户端根据主机的IP地址和端口号发出连接请求;

(3)服务器与客户端建立连接后,通过读写函数进行TCP数据通信;

(4)关闭连接。     

         在LabVIEW中,提供了一组专门的相关TCP的操作函数,在后面板程序框图中进入函数®数据通信®协议®TCP可以进入TCP子模板,主要节点函数如下图所示。

   

         使用上面的函数,下面分别给出服务器端程序和客户端程序的具体实现方法。

服务器端程序

        服务器端前面板如下图所示,其中,“端口号”设置服务器程序的端口,该值即为客户端程序的要连接的服务器程序的端口标识值;“待发送字符串”为发送给客户端程序的内容,该处设置为“I`m sever!”。

        服务器端程序框图如下:

        在程序框图中,首先利用“TCP侦听”函数创建一个侦听,该函数需要2个关键参数:端口号和超时时间(单位为ms)。该示例超时时间设为-1表示永远不超时,即无限等待下去直到有一个客户端程序连接。该函数运行后返回一个“连接ID”参数,该参数是其它TCP相关操作函数的输入参数接口。利用“格式化日期/时间字符串”函数取得当前的系统日期及时间,然后与待发送的字符串连接后得到实际发送的消息内容,利用“写入TCP数据”函数发送到客户端程序即可。该例中采用了两个“写入TCP数据”节点函数发送数据,首先发送消息内容的字节数(此处使用“强制类型转换”函数将“I32”类型的长度数据转换为字符串),其次发送实际的内容字符串数据。这种先发字符串长度再发字符串内容的发送方式有利于客户端正确的接收数据。最后调用“关闭TCP连接”函数,退出程序。

客户端程序

        客户端前面板如下图所示,其中,“端口号”即为服务器端程序设置的端口标识值;“IP地址”设置服务器端程序的IP地址,“已接收字符串”显示服务器端程序发送的消息及收到该消息时的时间信息。

        客户端端程序框图如下:

 

        在程序框图中,首先调用“打开TCP连接”函数建立与服务器端程序的连接,该函数需要2个关键参数:IP地址和端口号,即服务器端程序所在的主机的IP地址及服务器端程序设置的端口号。该函数与服务器端程序正确建立连接后返回一个“连接ID”参数,该参数是其它TCP相关操作函数的输入参数接口。与服务器端框图程序相对应,该程序也采用了2个“读取TCP数据”节点函数读取服务器端程序发送的数据,与“写入TCP数据”节点函数不同的是,该函数还需要一个参数:要读取的字节数。由于服务器端程序先发送的是总字节信息,因此客户端首先读取接收消息内容的字节信息,输入I32类型的常数“4”,表示读取4个字节的内容,然后将读取的字符串内容使用“强制类型转换”函数转换为“I32”类型的字节值,将字节值作为第2个“读取TCP数据”节点函数的读取的字节值参数,然后将实际的消息内容读出显示到前面板的“已接收字符串”控件上即可。这种方法是TCP通信中常用的方法,可以保证在不丢失数据的前提下有效地发送或接收数据。最后调用“关闭TCP连接”函数,退出程序。

总结

        通过上面的程序可以看出,由于LabVIEW对TCP协议通信底层的具体实现方法进行了高度的封装,因此使用这些函数构建复杂、灵活的网络测试系统时,相对于其它高级编程语言,将会大大降低编程人员的开发难度,提高编程效率,这也是图形化编程语言的高效、简洁的魅力所在。

        另外,需要说明的是:

      (1)采用TCP节点通信时,在服务器端框图程序中必须指定网络通信端口,客户端也要指定相同的端口,才能与服务器之间进行正确的通信,如上面例子中指定端口号为1800。在一次通信连接建立后,就不能改变端口的值了。如的确需要改变端口值,则必须首先断开连接,才能重新设置新的端口值。

      (2)在客户端要指定服务器的IP地址才能与服务器之间建立连接。若服务器和客户机在同一台机子上运行时,客户端框图程序中输入的服务器地址可以设置为下面任意一个值:“localhost”、“127.0.0.1”、空字符串或者当前计算机的名称。

怎么获取服务器上的ip地址和端口号

在服务器中要查看端口,可以使用Netstat命令:

1、依次点击“开始→运行”,键入“cmd”并回车,打开命令提示符窗口。

2、在命令提示符状态下键入“netstat -a -n”,按下回车键后就可以看到以数字形式显示的TCP和UDP连接的端口号及状态。

Netstat命令用法如下:

命令格式:Netstat -a -e -n -o -s-an

-a 表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。

-e 表示显示以太网发送和接收的字节数、数据包数等。

-n 表示只以数字形式显示所有活动的TCP连接的地址和端口号。

-o 表示显示活动的TCP连接并包括每个连接的进程ID(PID)。

-s 表示按协议显示各种连接的统计信息,包括端口号。

-an 查看所有开放的端口

 

 

 

 

  


http://chatgpt.dhexx.cn/article/S55TquLg.shtml

相关文章

LabVIEW编程LabVIEW控制NI cRIO-9066例程与相关资料

LabVIEW编程LabVIEW控制NI cRIO-9066例程与相关资料 NI cRIO-9066 667 MHz双核CPU,256 MB DRAM,512 MB存储容量,Zynq-7020 FPGA,8槽CompactRIO控制器—cRIO-9066是一款坚固耐用的无风扇嵌入式控制器,可用于高级控制和监…

LabVIEW示波器编程

CSDN话题挑战赛第2期 参赛话题:学习笔记 博客写作背景----项目中解决的问题 最近遇到一个使用stm32单片机多路采集信号的项目,还需要在上位机进行波形的查看,信号算法的处理,初步定为使用labview编写上位机程序进行处理。为啥用l…

LabVIEW编程语法学习笔记之变量

CSDN话题挑战赛第2期 参赛话题:学习笔记 与其他通用编程语言一样,LabVIEW中也有局部变量和全局变量的概念,用来控制变量的作用范围。 局部变量 局部变量的作用范围仅为其所在VI,其他VI对该局部变量不可见。 在LabVIEW中添加一…

labview编程笔记之条件结构

CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐&a…

LabVIEW编程LabVIEW开发在LabVIEW中复用现有代码

LabVIEW编程LabVIEW开发在LabVIEW中复用现有代码 使用LabVIEW,我们可以将多种编程方法与图形化数据流结合到单个应用程序中。基于这种灵活性,可以选择所需的工具来创建待测设备(DUT)的控制、配置或测量库。LabVIEW可将多种语言(如.m、C、Pyth…

LabVIEW编程LabVIEW开发使用LabVIEW访问Microsoft Access

LabVIEW编程LabVIEW开发使用LabVIEW访问Microsoft Access Microsoft Access是Microsoft提供的常见数据库工具包。该KB提供基本操作,包括通过LabVIEW创建和连接数据库,插入,删除,更新和选择记录,以便新用户更好地了解。…

【LabVIEW编程——循环读取文件夹及文件】

LabVIEW编程——循环读取文件夹及文件 小树不修不直溜,人不修他哏啾啾!老铁们,大家好!好久不见,甚是想念。全民抗疫的这两年里,大家都生活不易,病毒依旧强势,家人们,防范…

labview编程笔记之循环结构

CSDN话题挑战赛第2期 参赛话题:学习笔记 循环结构 While循环 在LabVIEW中如何创建一个While循环呢?方法很简单。如图1所示,首先,在“函数”选板→“编程”→“结构”子选板上,选中While循环,将它拖曳到程…

【LabVIEW视觉懒人教程】1.1labview编程方式介绍

打开labview界面 labview的文件后缀名是.vi,单个vi包含前面板和程序框图,前面板是程序运行时显示给用户的界面,程序框图里面是程序的代码。 前面板空白处鼠标右键,弹出控件选板。 程序框图空白处右键,弹出函数选板。 …

labview混合编程学习

由于开发需要,上位机需要采用labview设计,但是之前研究算法主要靠matlab或者python,因此考虑采用labview混合编程的方式。 目前,界面设计采用Labview,而算法部分采用Matlab或者python,即采用混合编程的方式…

了解LabVIEW编程

LabVIEW通其他编程语言和软件一样,安装容易,容易使用。 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文…

LabVIEW编程规范

LabVIEW编程规范 编写LabVIEW程序应该遵循哪些规范,使得编写的程序在运行效率、可读性和可维护性方面得到显著提高? 和本文编程语言类似,在LabVIEW中设计程序框图时也应该养成良好的编程习惯,使得设计出的图形化程序外观美观、便…

LabVIEW编程入门笔记

CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐&a…

LabVIEW学习入门(二)

一、Labview编程特点 基本无需code,是图形编程,选择部件,然后将其连接起来并行性运行,而非顺序执行基于数据流运行 二、Labview编程特点举例说明 实现顺序执行可借助“程序框图”页的"Programming"中的"Structu…

LabVIEW编程基础:事件结构框架编程

LabVIEW又称为G语言,简单易学、形象直观,采用图形化的编程方式,是专为测试、测量和控制应用而设计的系统工程软件。 前面几篇文章依次讲解了LabVIEW中顺序顺序结构、条件结构及循环结构的编程方法,下面再讲一种与软件界面响应有关…

LabVIEW编程基础:条件结构编程

目录 一、条件结构框架特点 二、示例1:布尔型的条件输入 三、示例1运行效果 四、示例2:数值型的条件输入 五、示例3:枚举型的条件输入 六、示例3:运行效果 七、示例4:字符串型的条件输入 八、示例4&#xff1a…

啊这!终于不用敲代码了?Labview牛逼!带你轻松入门Labview~

文章目录 一、Labview的三大特征1、图形编程2、并行性运行3、基于数据流 二、Labview编程小tips1、快捷键!2、善于利用Labview中的“即使帮助”3、运行之后某个控件或函数部分闪了?!——出错了!4、我喜欢有代码洁癖的程序员&#…

noip201506 Message 信息传递

试题描述: 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 T_i 的同学。游戏开始时,每人都只知道自己的生日…

Codevs 4511 信息传递

题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为的同学的信息传递对象是编号为的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中…

消息的传递

我们的郭嘉大大在曹操这过得逍遥自在,但是有一天曹操给了他一个任务,在建邺城内有 N 个袁绍的奸细,将他们从 1 到 N 进行编号,同时他们之间存在一种传递关系,即若C{i,j}1,则奸细 i 能将消息直接传递给奸细 …