https://www.youtube.com/watch?v=D62jtzr2Zcc&list=WL&index=4&t=4067s ## 簡介 本文將會講述以下重點 1. 如何使用 nodejs 撰寫 tcp 的伺服器 2. 透過 wireshark 等工具驗證傳輸的 Data 內容 ## 1. 如何使用 nodejs 撰寫 tcp 的伺服器 為了能夠有效展示透過 Nodejs 撰寫 TCP server 的傳輸資料流程 以下將透過撰寫兩個程式來做邏輯驗證 * simple-tcp-app.ts: 接收資料用的 TCP server * simple-sender.ts: 傳輸資料用的 TCP client ### 1.1 nodejs 的 net module[^1] net module 是 Nodejs 用來處理網路傳輸的最底層處理模組 可以用來處理底從封包資料的傳送 在其之上還有比較網路應用的處理模組比如 http[^2], https[^3] module 等等 這邊使用 net module 來做 tcp 這種比較底層資料格式資料的處理 ### 1.2 撰寫 TCP Server 邏輯 這邊主要使用 tcp server 來接收 tcp client 所傳入的資料並且顯示在 server console 上 實作邏輯如下: 1. 透過 net module 建立一個 TCP server 2. 設定服務阜口為 3099 ,並且設定監聽資料事件與啟動事件 ```typescript= import * as net from 'net'; const port = 3099; const server = net.createServer((socket) => { socket.on('data', (data) => { console.log(data); }); }); server.listen(port, '127.0.0.1', () => { console.log('opened server on', server.address()); }); ``` ### 1.2 撰寫 TCP Client 邏輯 這邊 tcp client 主要就是傳輸資料給 tcp server 因為 TCP 傳輸主要是透過 binary 資料傳輸 因此會使用 Buffer 來做資料轉換 實作邏輯如下: 1. 透過 net module 建立一個 TCP client 連線到服務阜口為 3099的服務 2. 設定連線後執行傳輸動作 ```typescript= import * as net from 'net'; const socket = net.createConnection({ host: '127.0.0.1', port: 3099 }, () => { const buffer = Buffer.alloc(8); buffer[0] = 12; buffer[1] = 34; socket.write(buffer); }); ``` ### 1.3 執行 client 與 server 來驗證傳輸 測試步驟: 1. 啟動 server  2. 啟動 client 執行接收  3. 檢查 server 接收 log  ## 2. 透過 wireshark 等工具驗證傳輸的 Data 內容 1. 開啟 wireshark 檢查資料 loopback interface 封包如下  2. 故意把傳輸 size 改小再度驗證 ```typescript= import * as net from 'net'; const socket = net.createConnection({ host: '127.0.0.1', port: 3099 }, () => { const buffer = Buffer.alloc(2); buffer[0] = 12; buffer[1] = 34; socket.write(buffer); }); ``` 3. 故意把傳輸 size 改小再度驗證 oopback interface 封包如下  ## 3. 參考文件 [^1]:https://nodejs.org/api/net.html [^2]:https://nodejs.org/api/http.html [^3]:https://nodejs.org/api/https.html
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up