2021年9月12日 星期日

Node-Red TCP flow 的使用

 Node-Red TCP  flow 的使用 

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。不論是在計算機網絡OSI模型中,還是在因特網協議族(Internet protocol suite)中,TCP層都可以發送用於網間傳輸的、用8位字節表示的數據流,並把數據流分區成適當長度的報文段。之後TCP把結果包傳給IP層,由它來通過網絡將包傳送給接收端實體的TCP層。TCP為了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麽對應的數據包就被假設為已丟失將會被進行重傳。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和端口。


TCP控件作為客戶端

  講解時,為了方便,使用串口助手的網絡功能來模擬另一個設備。需要指明的是,串口助手雖然運行在電腦上,但是可以虛擬出一個IP,這個IP並不是電腦的物理IP,而是虛擬的,因此可以認為,node-red與串口助手雖然在同一台電腦上運行,但是IP是不一樣的,因此也就是2個不同的設備。

  TCP Test TOOL 的端口號選擇TCPServer,隨意填寫一個本地IP和端口,並點擊偵聽。





[ TCP test Tool ] 好用的TCP Server/Client工具

免費的TCP Server / Client工具
可以在自己的電腦建立TCP Server供外部連結測試
也可以同時在Client端測試建立的Server

下載 [LINK]


TCP控件作為服務器

  Node-red內的TCP控件可以作為服務器。但是不同於上一節的串口助手,TCP控件沒有辦法設置IP地址,因此只能使用電腦的物理IP。

TCP Test TOOL的端口號選擇TCPClient,遠程的IP與電腦對應,本地IP可以隨意填寫,與遠程不同即可。端口號要與node-red的程序對應。




TCP Test Tool 中點擊連接,並發送任意內容,可以看到接收框內顯示出收到的信息,與發出的信息內容完全一樣。



[{"id":"5030aac5.9b4a64","type":"tcp in","z":"493c8b6e.3cac64","name":"","server":"client","host":"192.168.1.110","port":"1777","datamode":"stream","datatype":"utf8","newline":"","topic":"","base64":false,"x":210,"y":140,"wires":[["bf927f4d.7d126","65b6c5d2.96904c"]]},{"id":"bf927f4d.7d126","type":"tcp out","z":"493c8b6e.3cac64","host":"192.168.1.110","port":"1777","beserver":"client","base64":false,"end":false,"name":"","x":590,"y":140,"wires":[]},{"id":"65b6c5d2.96904c","type":"debug","z":"493c8b6e.3cac64","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":410,"y":80,"wires":[]},{"id":"693cb601.57b2a8","type":"tcp in","z":"493c8b6e.3cac64","name":"","server":"server","host":"","port":"8888","datamode":"stream","datatype":"buffer","newline":"","topic":"","base64":false,"x":200,"y":240,"wires":[["a0757052.85d38","ef7d66ce.d5f9e8"]]},{"id":"a0757052.85d38","type":"tcp out","z":"493c8b6e.3cac64","host":"","port":"","beserver":"reply","base64":false,"end":false,"name":"","x":370,"y":240,"wires":[]},{"id":"ef7d66ce.d5f9e8","type":"debug","z":"493c8b6e.3cac64","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":390,"y":280,"wires":[]}]

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...