在node环境下,实现一个基于控制台的简单聊天室,客户端和服务端能收发消息即可(假设在同一个局域网内访问)。
思路及算法
- 首先要创建一个服务端
- 给服务端分配一个端口,用作客户端访问它的
门(入口)
,同时监听服务器的启动情况。 - 给服务端创建一个事件监听器,用来处理当服务端在控制台有输入时,将其输入的信息发送到客户端。
- 给服务端创建一个事件监听器,用来处理当有数据从客户端发来时的操作。
- 创建一个客户端。
- 客户端通过服务端给出的端口和IP创建对它的链接(如果是在同一台机器上,则IP可忽略)。
- 给客户端创建一个事件监听器,用来处理当客户端在控制台有输入时,将其输入的信息发送到服务端。
- 给客户端创建一个事件监听器,用来处理当有数据从服务端发来时的操作。
代码
// server.js
const net = require('net');
// 创建一个socket服务器
let server = net.createServer(socketConnect)
// 当有客户端与我链接时触发
function socketConnect(socket){
console.log('有人连接我了!!!');
// 监听有数据从客户端发过来时
socket.on('data',(chunk)=>{
// 将客户端发过来的数据显示出来
process.stdout.write(chunk.toString());
});
// 当服务端在控制台主动写数据时
process.stdin.on('data',(chunk)=>{
// 将输入传入socket,客户端才可以接收。
socket.write('server > '+chunk.toString()); // 往socket里面写东西
});
}
// 给此项服务分配一个端口
let myPort = 2003;
//启动服务,并监听服务器启动情况。
server.listen(myPort,(err)=>{
if(err) throw err;
console.log(`服务器已启动,正在监听【 ${myPort} 】端口`);
});
// client.js
const net = require('net');
// 服务端的端口
const serverPort = 2003;
// 此处我们假设客户端和服务端在一台主机上,则不考虑IP这个因素。
// 建立与服务端的链接
let client = net.connect(serverPort,(err)=>{
if(err) throw err;
console.log(`已连接到服务器`);
// 当服务端在控制台主动写数据时
process.stdin.on('data',(chunk)=>{
// 将输入传入socket,服务端才可以接收。
client.write('client > '+chunk.toString()); // 往socket里面写东西
})
});
// 监听有数据从服务端发过来时
client.on('data',(chunk)=>{
// 将服务端发过来的数据显示出来
process.stdout.write(chunk.toString());
});
测试运行结果
在控制台的两个窗口分别输入以下命令
nodemon server.js
nodemon client.js
在服务端和客户端控制台随便写入一些信息,则可看到双方接收情况,下面是我自己的测试结果:

网友评论