低代码编程-TCP/IP通讯
曹正
·
创建日期: 2022-05-17 14:33:51
·
2
1
0
65

TCP/IP通讯一直是通讯领域中最为常见的协议栈,低代码毫无疑问的对其进行了全面的支持。

我们先看一下TCPIP功能块:

该功能块较为复杂,具有多种工作模式,我们首先逐次介绍一下每一个引脚及其功能。

  • 模式引脚

1、系统通讯单元

系统通讯单元指的是ProfControl自己的内部通讯单元,使用系统通讯单元时,不再需要配置TCPIP选项,该配置在ProfControl系统中实现。

2、独立单元

独立单元指的是可以随意建立自由的TCPIP通讯,独立单元包括了以下几种工作类型:

  1. TCP服务器
  2. TCP客户端
  3. UDP

一旦选择使用独立单元,我们可以根据需要在协议类型中选择所需的协议

  • 通讯单元名称 (仅工作于系统通讯单元模式)

当工作于系统通讯单元模式时,此处填写通讯单元的配置名称,如下图所示:

  • 协议类型【输入】 (仅工作于独立单元模式)
  • TCP模式【输入】 (仅工作于独立单元模式)
  • 发送数据【输入】(单输入)

需要发送的数据,该输入引脚不会清除数据,可以不间断的发送。

  • 发送数据【输入】 (支持多输入)

需要发送的数据,支持多输入连接,需要注意的是,该引脚内部具有一个FIFO,先到的数据一旦发送自动清除!

  • 发送数据对象【输入】

这是一个复合对象,将目的IP地址及数据组合成字典形式输入给该引脚,可以实现发送给不同的客户端的功能。

  • 立即发送【输入】

一个布尔信号,一旦由低到高跳变,则将数据发送出去。

  • 已连接【输出】

一个状态输出,一旦建立连接则该信号为True。需要注意的是,在TCP服务器模式或UDP模式下,该引脚始终为True。

  • 数据到达【输出】

一个状态输出,一旦有数据到达,该引脚快速由False跳变至True,这个可以通过微型控制台观察,仅靠人眼,由于变化速度过快,无法观察到。

  • 接受数据【输出】

以字节数组的形式输出接收到的数据。

  • 接受字符串【输出】

以字符串的形式输出接受到的数据。


TCP工作类型

如果选择了TCP协议,则在TCP模式中选择所需的工作类型:

工作类型分为服务器和客户端

 

服务器模式:

当选择了服务器模式,我们根据需要填写服务器的以下三个参数:

  • 本地IP(必填)
  • 本地端口(必填)
  • 客户端IP(选填)

无论工作于什么模式,TCP服务器都是需要定义本地IP及端口的。有些系统不需要填写本地IP,这其实是不对的,当我们电脑只有一个网卡时,也就只有一个对应的IP地址,那么此时确实可以不需要填写本地IP,通过localhost即可;但是当我们电脑存在多个网卡,那么就有可能存在多个IP地址,通常情况下,我们不希望侦听来自于多个网卡的通讯,所以明确IP服务器地址很有必要。值得注意的是,如果使用本地IP地址通讯,一定要在系统中将网卡的IP地址进行定义,而避免使用DHCP自动获取地址,因为DHCP获取的地址是根据当前网络情况分配的,有可能会变动,导致后期运行异常

TCP通讯依赖于IP地址及端口,端口实际上对应于一个应用或某个功能。在TCP服务器模式下,我们需要定义服务器的侦听端口,注意,端口定义尽量绕过“知名端口”,并且务必与当前运行环境下已经使用的端口避开,否则将导致侦听失败。对于TCPIP通讯,我们建议在具备基本知识储备的前提下使用。

客户端IP地址不是必须的,当只作为接收数据的功能块处理时,不需要填写;当需要向客户端发送时,配置该参数。

 

客户端模式:

当选择了客户端模式,我们需要填写客户端的以下四个参数:

  • 本地IP
  • 本地端口
  • 远程IP
  • 远程端口

TCP客户端支持随机端口连接及固定端口连接两种方式,当我们填写了本地IP、远程IP及远程端口时,客户端工作于随机端口模式;所谓随机端口,指的是客户端随机选择一个未使用的端口向服务器发起连接,这种方式最为常用。

当然,特殊情况下,通讯系统对端期望我们使用固定的端口与其进行连接,此时我们需要填写所有的四个参数,那么系统会自动的使用配置的本地端口与服务器进行连接,这种方式很少遇到。

 


UDP工作类型

如果选择了UDP协议,由于UDP不区分实际的服务器及客户端,无需配置工作类型。

UDP具有以下四个参数:

  • 本地IP
  • 本地端口
  • 远程IP
  • 远程端口

UDP是一种基于数据包的通讯协议,与TCP这种基于连接的通讯协议不同。UDP连接链路的概念(很多教材中会提出UDP服务器或客户端的概念,实际上是一种故意与TCP贴合的描述方式,而UDP由于基于数据包的传输,实际上并不存在这种硬性概念),所有UDP可以工作于以下三种模式:

  • 单纯的接收数据端
  • 单纯的发送数据端
  • 同时拥有收发的数据端

当需要工作于单纯的接收数据端时,只需要配置本地IP及本地端口即可;

当需要工作于单纯的发送数据端时,只需要配置远程IP及远程端口即可;

当需要工作于同时拥有收发的数据端时,这四个参数均要配置。

 


TCP服务器测试

首先我们放置一个TCPIP功能块,并配置其为独立单元;将协议类型设置位TCP,模式为服务器。由于我的电脑只有一个网卡,我可以简单的设置IP地址为localhost,当然也可以设置为网卡的IP地址,这里我们假设服务器端口为10018。所有配置如下:

此时我们打开一个TCP调试工具,这种工具有很多,我使用的是cktszsss32.exe。打开调试工具,将通讯模式设置为TCP客户端,并且连接端口设置为10018,然后点击连接。

此时我们可以看到,调试工具已经连接了。至此,我们很方便的建立了一个TCP服务器。接下来我们看数据处理。

当我们在调试工具中点击发送按钮,可以看到,调试工具将hello发送至了TCP服务器功能块。

为了看的更清楚,我们可以放置一个微型控制台,然后将TCP功能块的接收字符串连接至微型控制台。在调试工具端不断的发送hello,可以看到微型控制台也进行了相关的打印。

一个TCP接收服务器就建立好了,如果我们想发送数据至客户端,由于服务器对于客户端而言是一对多,我们必须指明要发送的客户端IP地址。此时我们在功能块内填入客户端的IP地址(由于我是单机测试,所以客户端IP地址也就是服务器地址,在我这个测试环境中是192.168.0.105)。具体效果如下图所示。

 

TCP客户端测试

首先我们放置一个TCP功能块,将其配置成独立模式,协议选择TCP,TCP模式选择为客户端,紧接着我们配置TCP的四个参数,我们首先采用随机连接端口模式,将本地IP、远程IP及端口配置为localhost-192.168.0.105-10020。然后我们使用调试工具,将其配置为服务器模式,IP地址配置为192.168.0.105,侦听端口设置为10020;所有配置如下图所示:

此时我们可以看到,TCP功能块已经连接。我们如上一个例子一样,将TCP功能块的接受字符串连接至一个微型控制台,然后在调试工具里发送hello,可以看到,微型控制台已经准确接受到数据。

从TCP客户端发送数据至服务器相对简单,我们不需要再额外配置IP地址,直接填写发送数据,并通过立即发送引脚即可将数据发送出去。如下图所示:

如果要采用固定端口向服务器发起连接,请将本地端口在内的所有4个参数全部配置完整,其他的与随机端口连接无差异,此时我们可以很清楚的看到,服务器接受的连接,其端口正是我们配置的11180:

 

UDP测试

UDP是一种基于数据包的通讯模型,所有没有明确的服务器及客户端,收发两端是平等的。

首先,我们放置一个TCP功能块,将其配置成独立模式,协议选择UDP,紧接着我们配置UDP的四个参数,将本地IP、本地端口、远程IP及远程端口配置为localhost-10018-192.168.0.105-10020。然后我们使用调试工具,将其配置为UDP模式,UDP的远程IP地址配置为192.168.0.105,端口配置为10018,本地IP配置为192.168.0.105,端口配置为10020;所有配置如下图所示,然后类似上述方式,我们可以快速的建立UDP的收发: