node-red教程8 TCP控件的使用

  之前的程序基本都是“单机”使用,也就是说,只运行在一台设备上,并没有通过网络与别的设备进行交互。Node-red具备强大的网络功能,通过拖拽一些具备网络功能的节点,即可实现网络的功能。

8.1 TCP控件

8.1.1 TCP控件简介

  TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。不论是在计算机网络OSI模型中,还是在因特网协议族(Internet protocol suite)中,TCP层都可以发送用于网间传输的、用8位字节表示的数据流,并把数据流分区成适当长度的报文段。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验函数来检验数据是否有错误;在发送和接收时都要计算校验和。
  简单来说,TCP提供了不同设备之间的网络连接。在我们的设备中,树莓派与电脑通过TCP网络进行数据的交换。本节我们就来认识一下TCP控件。
  TCP输入节点:
这里写图片描述
  提供了TCP输入的选择。可以连接到远程TCP端口,也可以接收传入的连接。
TCP的输出
  提供TCP输出的选择。可以连接到远程TCP端口,接受传入的连接,或者回复从节点上的TCP接收到的消息。
  只发送msg.payload。
  如果msg.payload是一个包含二进制数据的Base64编码的字符串,Base64解码选项将使它在发送之前被转换回二进制。
  如果msg._session(会话)不存在,payload会发送给所有连接的从机(或者说客户端)。
  注意:在某些系统上,您可能需要root或管理员访问,以访问1024以下的端口。

  我们的TCP案例使用C/S结构。即Client/Server (客户端/服务器) 结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销。
  客户端和服务器的程序不同,用户的程序主要在客户端,服务器端主要提供数据管理、数据共享、数据及系统维护和并发控制等,客户端程序主要完成用户的具体的业务。
  作为server的时候必须配置端口。
  作为client的时候需指明server的IP和端口。

8.1.2 TCP控件作为客户端

  讲解时,为了方便,使用串口助手的网络功能来模拟另一个设备。需要指明的是,串口助手虽然运行在电脑上,但是可以虚拟出一个IP,这个IP并不是电脑的物理IP,而是虚拟的,因此可以认为,node-red与串口助手虽然在同一台电脑上运行,但是IP是不一样的,因此也就是2个不同的设备。
  串口助手的端口号选择TCPServer,随意填写一个本地IP和端口,并点击侦听。
这里写图片描述
  Node-red里我们实现一个应声虫的程序,即收到什么,就发什么。TCP in与TCP out节点各拖入一个。然后进行如下设置:
这里写图片描述
  类型选择连接,表示node-red里运行的是客户端。客户端需要指明服务器的IP和端口,要与串口助手的设置一样。
设置完成以后,连线并部署。如果程序没有问题,可以看到TCP控件显示已连接。
这里写图片描述
  在串口助手的输入框内输入任意内容,并点击发送,可以看到接收框内显示收到的信息,与发出的信息内容完全一样。
这里写图片描述
  在node-red内的调试窗口,可以看到debug节点打印出的调试信息内容也正确:
这里写图片描述
  说明,node-red中的TCP控件作为客户端的通信成功了。特别说明一下,在C/S结构中,一个服务器可以对应多个客户端,即便是有多个客户端连接一个服务器,通信也是可以成功的。
代码保存在这里:

[{"id":"9f870ced.fc5f6","type":"tcp in","z":"7a8c632b.0c701c","name":"","server":"client","host":"192.168.152.1","port":"7777","datamode":"stream","datatype":"buffer","newline":"","topic":"","base64":false,"x":260,"y":260,"wires":[["391263cc.578efc","a58b073a.670ec8"]]},{"id":"a58b073a.670ec8","type":"tcp out","z":"7a8c632b.0c701c","host":"192.168.152.1","port":"7777","beserver":"client","base64":false,"end":false,"name":"","x":690,"y":260,"wires":[]},{"id":"391263cc.578efc","type":"debug","z":"7a8c632b.0c701c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":510,"y":160,"wires":[]}]

8.1.3 TCP控件作为服务器

  Node-red内的TCP控件可以作为服务器。但是不同于上一节的串口助手,TCP控件没有办法设置IP地址,因此只能使用电脑的物理IP。
  在window平台下,可以在控制面板中找到网络和共享中心,点击连接的网络,一般是以太网,然后点击详细信息,就可以看到IPv4的地址。
这里写图片描述
这里写图片描述

  上图,我的IPv4的地址是192.168.3.243
  如果程序运行在树莓派里,打开终端,输入ifconfig就可以看到本机的地址,例如下图中的IP是192.168.3.3。
这里写图片描述
  串口助手里的端口号选择TCPClient,远程的IP与电脑对应,本地IP可以随意填写,与远程不同即可。端口号要与node-red的程序对应。
这里写图片描述
  Node-red里我们仍然编写应声虫的程序。拖入新的TCP in与TCP out节点,由于同一个IP与端口下只能有一个服务器,因此两个节点分别如下设置:
这里写图片描述
这里写图片描述
  连线并部署。
这里写图片描述
  串口助手中点击连接,并发送任意内容,可以看到接收框内显示出收到的信息,与发出的信息内容完全一样。
这里写图片描述
  Node-red里的调试窗口也显示出刚刚收到的消息,说明实验成功。
这里写图片描述
  此时,再打开一个串口助手,正确配置为client以后,也可以实现这些功能。因为一个服务器可以对应多个客户端。
程序保存在这里:

[{"id":"391263cc.578efc","type":"debug","z":"7a8c632b.0c701c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":410,"y":100,"wires":[]},{"id":"2fd6d4c8.b4930c","type":"tcp in","z":"7a8c632b.0c701c","name":"","server":"server","host":"","port":"8888","datamode":"stream","datatype":"buffer","newline":"","topic":"","base64":false,"x":240,"y":180,"wires":[["391263cc.578efc","561605fa.9e660c"]]},{"id":"561605fa.9e660c","type":"tcp out","z":"7a8c632b.0c701c","host":"","port":"","beserver":"reply","base64":false,"end":false,"name":"","x":430,"y":180,"wires":[]}]
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值