建立一个 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 日



