Skip to main content

Command Palette

Search for a command to run...

使用 Nodejs net module 撰寫 TCP server

Updated
2 min readView as Markdown
使用 Nodejs net module 撰寫 TCP server

簡介

本文將會講述以下重點

  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

net module 是 Nodejs 用來處理網路傳輸的最底層處理模組

可以用來處理底從封包資料的傳送

在其之上還有比較網路應用的處理模組比如 http, https module 等等

這邊使用 net module 來做 tcp 這種比較底層資料格式資料的處理

1.2 撰寫 TCP Server 邏輯

這邊主要使用 tcp server 來接收 tcp client 所傳入的資料並且顯示在 server console 上

實作邏輯如下:

  1. 透過 net module 建立一個 TCP server

  2. 設定服務阜口為 3099 ,並且設定監聽資料事件與啟動事件

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. 設定連線後執行傳輸動作

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 改小再度驗證

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);
});
  1. 故意把傳輸 size 改小再度驗證 oopback interface 封包如下

3. 參考文件

[1]:net module [2]:http module [3]:https module

More from this blog

AI 時代下的系統可理解性問題

GAI 的時代下,近一年很流行 Vibe-coding,幾乎人人都在草率地使用 Vibe-coding 一詞來指一系列的軟體工程實踐。它指的是一種開發者不親自手打 coding,而是僅透過自然語言向 AI 描述需求(給出「方向」或「感覺」),完全放手讓 AI 代理去自動生成、拼湊出整個應用程式的開發風格。 然而,在專業的軟體工程領域,這股看似美好的「Vibe」背後,隱藏著極高的安全隱患與系統崩潰危

Aug 24, 20263 min read94
AI 時代下的系統可理解性問題

Get Your Hands Dirty on Clean Architecture CH5 Use Case

書本連結 前言 會挑這本書看的人,應該都是關心自己負責專案的軟體架構的人。不只希望開發的軟體能滿足客戶的明確需求,也希望能滿足可維護性(maintainability)的隱性需求,以及自己對結構與美觀習慣的要求。 要能滿足上述這些要求很難,因為專案通常不會按照計畫進行。可能變因有 deadline,最後的 API 與承諾的不同,又或者我們的設計無法很好的貼合需求的變化所需。。因此完美的架構只有在一

Jul 2, 20264 min read68
Get Your Hands Dirty on Clean Architecture CH5 Use Case
M

MicroFIRE

75 posts