TCP Echo Server

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

可以正常结束了
SHXJ
Latest posts by SHXJ (see all)

发布留言