今天是线上教学的第二天
家里冷气好舒服
–
新增一个资料夹并且在该资料夹开启 VScode
新增一个档案 tcp_chatserver.js 并且贴上以下程式码
// Load the TCP Library
net = require('net');
// Keep track of the chat clients
var clients = [];
// Start a TCP Server
net.createServer((socket) => {
// Identify this client
socket.name = socket.remoteAddress + ":" + socket.remotePort
// Put this new client in the list
clients.push(socket);
// Send a nice welcome message and announce
socket.write("Welcome " + socket.name + "\n");
broadcast(socket.name + " joined the chat\n", socket);
// Handle incoming messages from clients.
socket.on('data', function (data) {
var index = data.indexOf('/nickname ')
if (index != -1) {
this.name = data.slice(index + 10).toString();
return;
}
var index = data.indexOf('/msg ')
if (index != -1) {
var res = data.toString().split(" ");
var name = res[1];
var msg = res[2];
privateMessage(msg, name.toString());
return;
}
broadcast(socket.name + "> " + data, socket);
});
// Remove the client from the list when it leaves
socket.on('end', function () {
clients.splice(clients.indexOf(socket), 1);
broadcast(socket.name + " left the chat.\n");
});
function privateMessage(message, receiver_name) {
clients.forEach(function (client) {
// Don't want to send it to sender
if (client.name === receiver_name) {
client.write(message);
}
});
}
// Send a message to all clients
function broadcast(message, sender) {
clients.forEach(function (client) {
// Don't want to send it to sender
if (client === sender) return;
client.write(message);
});
// Log it to the server output too
process.stdout.write(message)
}
}).listen(5000);
// Put a friendly message on the terminal of the server.
console.log("Chat server running at port 5000\n");新增一个档案 tcpClient.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: 5000 }, () => {
// '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_chatserver.js
node tcp_chatserver.js
之后再开启三个终端机,都执行 client 端
node tcpClient.js

再来这三个聊天室就可以互相聊天

为伺服器加上暱称 (Nickname)
开启聊天室之后,客户端可以设定自己的暱称
在聊天室A输入以下的指令变更暱称
/nickname Tommy
之后再次输入讯息并查看其他聊天室,可以发现暱称变成 Tommy

更改所有人的暱称并且测试

传送私讯给其他聊天室
之后就可以传送私讯给其他人
在聊天室A输入以下的指令传送讯息给聊天室B(Mary)
/msg Mary helloMary

试着用 John 传送讯息给 Mary 告白
/msg Mary 我喜欢你,请跟我交往!

Latest posts by SHXJ (see all)
- 受保护的内容: NAS 版 Mathbot 管理网站与 Linebot 启动方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 数学游戏 - 2021 年 6 月 8 日


