建立一個 tcp_server.js 檔案,並且貼上以下程式碼
const net = require('net');
const server = net.createServer((c) => {
// 'connection' listener.
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.on('error'), (err) => {
//throw err;
}
c.write('hello\r\n');
c.pipe(c);
});
server.on('error', (err) => {
throw err;
});
server.listen(24567, () => {
console.log('server bound');
});
將程式跑起來,可以看到 server bound 表示程式執行中

開啟 putty 軟體,進入到 Terminal 的頁籤,設定 Local line editing 為 force on
回到 Session 頁籤,Hostname 輸入 localhost,port 輸入 24567,Connection type 選 telnet
按下 Open 看到 hello 表示連線成功
輸入 stust 4a6g0062 伺服器也會回覆一樣的東西
全部都是程式版本
再新增一個檔案 tcp_client.js ,並且貼上以下程式碼
const net = require('net');
const client = net.createConnection({ port: 24567 }, () => {
// 'connect' listener.
console.log('connected to server!');
client.write('world!\r\n');
});
client.on('data', (data) => {
console.log(data.toString());
client.end();
});
client.on('end', () => {
console.log('disconnected from server');
});
將 vscode 的終端機分成兩邊,左邊就是剛剛開啟的 server

右邊的視窗將 client 開啟
node .\tcp_client.js

TCP Echo Server
將 tcp_client.js 覆蓋以下程式碼
const net = require('net');
const { exit } = require('process');
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const client = net.createConnection({ port: 24567 }, () => {
// 'connect' listener.
console.log('connected to server!');
});
client.on('data', (msg) => {
console.log(`Client Received: ${msg}`);
})
console.log('Please Input your data:')
rl.on('line', (input) => {
// console.log(`Received: ${input}`);
if (input == 'exit') {
client.end();
exit();
}
client.write(input);
});
client.on('end', () => {
console.log('disconnected from server');
});
右邊的視窗一樣執行 tcp_client.js 並且隨意輸入文字

修正最後的斷線問題
將 tcp_server.js 以及 tcp_client.js 覆蓋以下程式碼
const net = require('net');
const server = net.createServer((c) => {
// 'connection' listener.
console.log('client connected');
c.on('data', (msg) => {
console.log(`server received:${msg}`);
c.write(msg);
});
c.on('end', () => {
console.log('client disconnected');
});
c.on('error', (err) => {
//throw err;
});
c.write('hello\r\n');
});
server.on('error', (err) => {
throw err;
});
server.listen(24567, () => {
console.log('server bound');
});
const net = require('net');
const { exit } = require('process');
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const client = net.createConnection({ port: 24567 }, () => {
// 'connect' listener.
console.log('connected to server!');
});
client.on('data', (msg) => {
console.log(`Client Received: ${msg}`);
})
console.log('Please Input your data:')
rl.on('line', (input) => {
// console.log(`Received: ${input}`);
if (input == 'exit') {
client.end();
return;
}
client.write(input);
});
client.on('end', () => {
console.log('disconnected from server');
exit();
});
左右分別執行 server 與 client

Latest posts by SHXJ (see all)
- 受保護的內容: NAS 版 Mathbot 管理網站與 Linebot 啟動方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 數學遊戲 - 2021 年 6 月 8 日



