LabVIEWCompactRIO 开发指南21 使用TCP/IP时处理孤立套接字

简介: LabVIEWCompactRIO 开发指南21 使用TCP/IP时处理孤立套接字

LabVIEWCompactRIO 开发指南21


使用TCP/IP时处理孤立套接字


无法重新建立侦听TCP套接字是设计基于TCP/IP的应用程序时最常见的挑战之一。此症状是由终止客户端或服务器应用程序后发生的孤立套接字引起的。如果按照本节中所述的技术设计代码,则可以避免此问题。本节概述了孤立套接字以及使用TCP/IP进行网络通信时推荐的设计模式。


孤立套接字概述


使用基于TCP/IP的应用程序,有一个客户端/服务器方案,其中服务器侦听客户端打开连接的特定端口。建立连接后,客户端和服务器将交换数据,直到连接终止。终止可能由以下原因引起:


■故意终止(用户停止服务器或客户端应用程序)


■硬件断开连接或停机


■客户端或服务器应用程序崩溃


如果尝试在终止后立即恢复连接,则会看到一个错误对话框,错误代码为60,来自TCPListen.vi,类似于图4.27中的错误对话框。无法重新建立侦听TCPsocket是由孤立套接字引起的。孤立套接字是启动终止的套接字。如果在尝试重新建立连接之前等待60秒,错误消息将消失。但是,许多系统无法承受60秒的停机时间。


17d0896d7369540d94c72766c10d995a.png


图4.27.客户端/服务器连接终止时生成错误代码60。


60秒超时是有意为之。识别孤立套接字后,TCP/IP会使该套接字在60秒内不可用,以便其他套接字无法与其通信。如果将TCP/IP与邮政服务进行比较,终止相当于一个家庭搬出家。邮政服务暂时关闭该邮箱,以便在新人搬进来时,他们不会收到不属于他们的邮件。TCP/IP故意使套接字不可用,以便它可以通过网络可靠地发送数据。


防止孤立套接字


本节提供了两种防止孤立套接字的方法。


设计应用程序,以便只有客户端才能终止连接


在大多数情况下,孤立套接字问题在服务器端更为严重。通常,客户端端口是动态分配的,但服务器端口是固定的。当服务器关闭连接时,服务器端口将被锁定。如果连接始终从客户端终止,则可以显著降低处理错误60的风险。


设计服务器应用程序时,需要遵循三个规则:


1.不要在超时时忽略超时错误来关闭连接。


2.如果要停止服务器应用程序,请向客户端发送消息并让客户端终止连接。等待非超时错误(62或56),并在出现错误时关闭服务器应用程序。


3.不要在发生事件时关闭服务器应用程序。如果发生应停止应用程序的事件,请向客户端发送消息并让客户端终止连接。然后在出错时关闭服务器应用程序。


0e9a6f03996754bbcff5d10e00655dc6.png


图4.28.此示例VI阻止服务器关闭网络连接。


分配动态端口


避免孤立套接字的另一种方法是在客户端和服务器上分配动态端口。有两种方法可以做到这一点:手动使用UDP建立端口(如果安装了STM参考库,请参阅STM Distributed Clients示例)或使用NI服务定位器。要使用NI服务定位器,则需要必须有LabVIEW8.5或更高版本,并且NI服务定位器必须运行。使用NI服务定位器时,将服务名称传递到TCP开放连接和TCP创建侦器函数上的服务名称输入中。


64c57539c3af457478fcc1edfe3b73ce.png


图4.29.使用NI服务定位器确保客户端和服务器上的动态端口分配


需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。

相关文章
|
机器学习/深度学习 算法
【基础回顾】在回归任务中常见的损失函数比较(mse、mae、huber)
【基础回顾】在回归任务中常见的损失函数比较(mse、mae、huber)
1975 0
【基础回顾】在回归任务中常见的损失函数比较(mse、mae、huber)
|
安全 算法 API
支付宝支付加密规则梳理,写的太好了!
前言 支付是一个安全等级很高的场景,系统间交互的每一条数据的泄露都有可能造成及其大的损失。因此支付时系统间交互的每一
支付宝支付加密规则梳理,写的太好了!
|
11月前
|
机器学习/深度学习 算法 关系型数据库
强化学习:动态规划求解最优状态价值函数——手把手教你入门强化学习(四)
本文介绍了基于模型的强化学习算法,重点讲解动态规划(DP)。动态规划通过分解问题为子问题求解状态价值函数,利用贝尔曼期望方程迭代更新。其核心性质包括最优子结构和重叠子问题,适用于已知转移概率和奖励的MDP场景。文章回顾了前期强化学习基础,并展望了后续内容如蒙特卡罗法。适合初学者系统了解强化学习算法原理与应用。
476 7
|
设计模式 数据管理 测试技术
后端开发中的微服务架构设计哲学
【8月更文挑战第23天】在软件开发的海洋中,微服务架构如同一艘精心设计的船只,它以独特的设计理念和航行技巧,引领着后端开发的未来。本文将探讨微服务的核心概念、设计原则以及如何将这些理念融入到日常的开发实践中,旨在为读者提供一套清晰的微服务设计指南。
|
安全 Linux KVM
Linux虚拟化技术:从Xen到KVM
Xen和KVM是Linux平台上两种主要的虚拟化技术,各有优缺点和适用场景。通过对比两者的架构、性能、安全性、管理复杂性和硬件依赖性,可以更好地理解它们的适用场景和选择依据。无论是高性能计算、企业虚拟化还是云计算平台,合理选择和配置虚拟化技术是实现高效、稳定和安全IT环境的关键。
885 8
|
存储 数据可视化 前端开发
基于python的当当二手书数据分析与可视化系统设计与实现
本文设计并实现了一个基于Python的当当二手书数据分析与可视化系统,通过数据收集、清洗、聚类分析和可视化展示,为二手书市场提供全面的数据分析和决策支持,以促进资源循环利用和市场效率优化。
647 0
基于python的当当二手书数据分析与可视化系统设计与实现
|
开发框架 安全 编译器
【C/C++ 深入探讨构函数】C++ 编译器在什么情况下无法生成默认的析构函数?
【C/C++ 深入探讨构函数】C++ 编译器在什么情况下无法生成默认的析构函数?
395 1
|
jenkins 持续交付 开发工具
Jenkins 手动安装插件
Jenkins 手动安装插件
600 0
|
弹性计算 Linux 数据中心
2024年阿里云香港服务器租用价格表_香港云主机优惠活动
2024年阿里云香港服务器租用价格表_香港云主机优惠活动,阿里云香港服务器2核1G、30M带宽、40GB ESSD系统盘优惠价格24元/月,288元一年,每月流量1024GB,多配置可选,阿里云百科整理分享阿里云香港服务器优惠活动、详细配置价格表和购买条件
|
消息中间件 存储 数据可视化
【JAVA日志】关于日志系统的架构讨论
【JAVA日志】关于日志系统的架构讨论
212 0