这里主要分为两部实现:1、服务器逻辑,2、客户端逻辑
简单代码实现一下主要过程
1、创建服务端(服务器)
主要逻辑过程
/*
主服务器
1.创建服务器
2.连接客户端
3.获取客户端发来的信息
4.将客户端发来的信息展示到自己的终端上( 广播 )
*/
模块的引入
const net = require( 'net' );
const port=4000;
const hostname='localhost';
//1、创建服务器
const server = new net.createServer();
//2、连接客户端
var clients={};
server.on('connection',client=>{ //client指的就是连接服务器的那个客户端
// 这个事件的触发( 订阅 )条件: 只要有客户端连接,就会触发
client.name = ++count; // 给每一个连接的客户端起一个名字
clients[ client.name ] = client;
// 将每一个客户端都存储在 clients集合中,clients中key就是client的名字
// 3. 获取客户端发来的信息
client.on( 'data', msg => { //msg就是获取的客户端信息
console.log( `客户端 ${ client.name }说: ${ msg.toString()}` )
boardcast( client, msg.toString() );
}) ;
//监听客户端的异常
client.on('error',error=>{
console.log(`error is ${error}`)
});
//监听客户端的下线行为
client.on('close',()=>{
delete clients[client.name]//将下线客户端清除
console.log(`客户端${client.name}已下线`)
})
});
// 4、将客户端发来的信息展示到自己的终端(广播)
function boardcast(client,msg){
//client 客户端
//msg 客户端发来的信息
for(var key in clients){
clients[key].write(msg);
}
};
//5、监听服务器
server.listen(port,hostname,()={
console.log(`The server is running at:http://${hostname}:${port})`)
})
**
2、创建客户端
主要逻辑过程
/*
1.创建socket
2. socket连接服务器
3.给服务器发送信息
*/
//引入所需模块
const net = require('net');//引入net模块
const port=4000;
const hostname='localhost';
//读取数据时需要引入模块读取
const readline=require ('readline');//引入一个模块,读取命令行内容
const rl=readline.createInterface({
input:process.stdin;
output:process.stdout;
});
//1.创建socket
const socket = new net.Socket();
//2.socket连接服务器
socket.connect(port,hostname,()=>{
//第一次连接成功向服务器发送一条消息
socket.write('欢迎xxx进入xxx直播室');
});
//客户端监听自己的异常
socket.on('error',error=>{
console.log(`socket error is ${error}`)
});
socket.on('close',()=>{
console.log(`socket connect closed~~~`)
})
//3.向服务器发送信息
socket.on('data',msg=>{
console(mgs.toString());//客户端显示自己输入信息
say();//发送信息时进行调用
});
//将发送信息封装为一个函数
function say(){
rl.question('请输入',(answer)=>{
if(answer==='bye'){//进行命令行的结束
socket.destory();//清除连接
rl.close();//关闭命令读取
}else{
socket.write(answer);//将读取内容发送到服务端
}
})
}