LabVIEW开发TCP网络通讯程序2
初始化侦听器状态
此状态目前仅执行一次,其工作是创建启动与远程客户端连接的侦听器。节点有两个输入,第一个是侦听器将监视的端口。尽管我可以对此数字进行硬编码,但我选择从应用程序的属性派生此值。在独立可执行文件中,应用程序在启动时从其文件中读取此值,从而使其在部署应用程序后可重新配置。如果文件中不存在该键,则运行工引擎默认为LabVIEW的官方端口号3363。
在开发环境中运行时,此值仍可重新配置,但通过目标的VI服务器设置进行设置。要更改此值,请在项目资源管理器窗口中单击鼠标右键,然后选择。在出现的对话框中,选择“类别”。此时,端口号字段在页面部分中可见,但已禁用。要编辑此值,请选中该框以启用该设置,进行所需的更改,然后取消选中该框,然后单击按钮。请务必记住在离开此设置之前取消选中。如果不这样做,项目将链接到指定的端口,并且测试平台应用程序中的TCP服务器在尝试启动时将引发错误60。
节点的另一个输入是超时。但是,这不是节点等待完成侦听器创建的时间。将在一台计算机上测试此代码,因此不必担心网络出现故障之类的事情。然而,出错的机会很多。例如,当客户端连接到我们的服务器时,网络可能出现问题。在通过指定连接尝试侦听器等待连接完成的时间,来解决这种情况。
等待连接状态
此状态等待连接尝试,当出现连接尝试时,完成连接。该操作采用轮询操作形式,其中代码会检查连接尝试,如果没有连接尝试,则等待一小段时间,然后再次检查。需要较短的等待期,以使整个流程有机会响应可能发生的其他事件。
如果在进行调用时没有挂起的连接尝试,或者在5毫秒的窗口内未收到尝试,则节点将终止,错误代码为56。查找并捕获该错误代码,以便其出现可用于决定下一步该做什么。如果子VI发现错误56,则将重复当前状态并将超时设置为1000毫秒。
如果连接尝试成功,节点还会输出该特定连接独有的新引用。此新引用将传递到移位寄存器,该寄存器可用于下一个状态。
生成处理程序状态
在此状态下,代码调用一个子VI(Launch Connection Handler.vi),该子VI生成一个进程来处理在先前状态下建立的远程连接。此连接处理程序采用可重入VI的形式,接受两个输入:对TCP连接的引用和启用调试操作的布尔输入。
连接处理程序必须是可重入进程非常重要,原因有两个:首先,我们希望代码能够一次处理多个连接。其次,listener需要尽快重新监听另一个新连接。
关闭侦听器状态
最后,当进程停止时,此事件将关闭打开的连接,将超时设置为-1,并停止事件循环。
但是,为什么有两个连接需要关闭?为管理远程连接而启动的连接处理程序是否不会处理关闭该引用?虽然这一点是正确的,但其背后的逻辑是有缺陷的。在远程连接完成和开始执行之间有一个很小但有限的延迟。如果停止命令应该发生在这么小的时间窗口内,则处理程序将永远不会启动,因此无法关闭该新连接及其关联的引用。
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。