[OpenR8 解決方案] Socket (雙向網路通訊)

一、Socket 介紹

 

Socket 是雙向通訊的一種接口,主要分成 TCP 與 UDP 兩種, Socket 根據協定的不同,它的架構也會不太一樣,在 openR8 的解決方案中,使用的是 TCP 協定,所以這裡就只介紹 Socket 之 TCP 的 Server (伺服器端) 與 Client (客戶端),其流程架構如圖 1

 

圖 1.Server 與 Client 之間關係圖 .png

圖 1.Server 與 Client 之間關係圖 。

 

 

二、Socket 資料夾介紹

 

Socket 位於 OpenR8 的 solution 資料夾內,如圖 2,內有兩個 flow 檔案,如圖 3

 

  1. server.flow:server (伺服器端) 解決方案。
  2. client.flow:client (客戶端) 解決方案。

 

圖 2.Socket 位置 .png

圖 2.Socket 位置 。

 

圖 3.Socket 資料夾 .png

圖 3.Socket 資料夾 。

 

 

 

 

 

 

三、server.flow、client.flow — 伺服器端與客戶端之間傳送資料

 

請點選【檔案】=>【開啟】=>【進入到 OpenR8 底下的 solution 資料夾】=>【選擇 Socket 資料夾】=>【選擇 server.flow 開啟】,如圖 4圖 5

 

圖 4.選擇 server.flow .png

圖 4.選擇 server.flow 。

 

圖 5.開啟 server.flow .png

圖 5.開啟 server.flow 。

 

※ 如果【Socket_初始化】的欄位是 unload,如圖 6,請如圖 7 引用 Socket 函式庫,重啟 R8.exe。

 

圖 6.未引用 Socket 函式庫 .png

圖 6.未引用 Socket 函式庫 。

 

圖 7.勾選 Socket 引用函式庫 .png

圖 7.勾選 Socket 引用函式庫 。

 

再額外另開一個新的 R8.exe,然後請點選【檔案】=>【開啟】=>【進入到 OpenR8 底下的 solution 資料夾】=>【選擇 Socket 資料夾】=>【選擇 client.flow 開啟】,如圖 8圖 9

 

圖 8.選擇 client.flow .png

圖 8.選擇 client.flow 。

 

圖 9.開啟 client.flow .png

圖 9.開啟 client.flow 。

 

※這裡的 server.flow 範例主要為接收 client (客戶端) 的資料,再回傳其他資料給 client 後結束連線;而 client.flow 則為傳送資料給 server (伺服器端),再接收 server 回傳的訊息,最後結束連線,如圖 10

 

圖 10.解決方案範例關係圖 .png

圖 10.解決方案範例關係圖 。

 

於是,先 client.flow 選擇要發送給 server 的資料 (圖 11 選擇的檔案只是範例,請使用者自行選擇自己電腦內的檔案),如圖 11

 

圖 11.選擇要傳送給 server 的資料 .png

圖 11.選擇要傳送給 server 的資料 。

 

再選擇 server 收到資料後,要回傳給 client 的檔案 (選擇的檔案只是範例,請使用者自行選擇自己電腦內的檔案),如圖 12

 

圖 12.選擇要發送給client的資料 .png

圖 12.選擇要發送給client的資料 。

 

先執行 server.flow,開啟伺服器端,等待客戶端連線,如圖 13

 

圖 13.server 等待 client 連線 .png

圖 13.server 等待 client 連線 。

 

再執行 client.flow,與 server (伺服器端) 連線,傳送檔案給 server,如圖 14。

 

圖 14. client 傳送資料給 server .png

圖 14. client 傳送資料給 server 。

 

圖 15. 執行結果與流程的關係 .png

圖 15. 執行結果與流程的關係 。

 

 

四、Socket 函式介紹

 

圖 16. Socket 函式 .png

圖 16. Socket 函式 。

 

  1. 【Socket_初始化】:初始化一個 socket 物件。
  2. 【Socket_連結】:即為 socket 中的 bind() 函式,可以設定使用 TCP 或 UDP 協定與使用哪個 port (埠),限定 Server 端使用。
  3. 【Socket_監聽】:即為 socket 中的 listen() 函式,可以設定 backlog (監聽數) 連線數量,限定 Server 端使用。
  4. 【Socket_讀】:即為 socket 中的 recv() 函式,負責讀取透過 socket 傳送的內容。
  5. 【Socket_寫】:即為 socket 中的 send() 函式,負責透過 socket 傳送資料。
  6. 【Socket_關閉】:結束 socket 連線。
  7. 【Socket_連線】:即為 socket 中的 connect () 函式,使用 socket 連線到 server (伺服器) ,限定 Client 端使用。

 

※由於這裡的範例是簡單的讀取與傳送,若要一直讀取或傳送,需自行更改流程,像是加迴圈...等。


延伸閱讀

1.
OpenR8 社群版 - 人人都會用的 AI 軟體 (免費下載)

[CP 值最好的 AI 人工智慧電腦熱賣中]
硬體採用最新最快的 Titan RTX, RTX-2080Ti-11G, 及 TESLA V100!
視窗圖控介面,易學易用。
硬體優勢:針對深度學習最佳化設計,且經過客戶端 24H 運作驗證。
軟體優勢:事先安裝人工智慧軟體及優化設定,每週提供最新 AI 演算法下載。
公司優勢:專業人工智慧機器人設計公司,資本額一億。
歡迎企業、學校、及公家機關大量採購。
可租用,歡迎來信或來電洽詢。
詳細資料請參閱以下網址: https://tw.openrobot.club/ai_computer