基于后端实现通信(使用Node.js中一个 net 模块实现)

这里主要分为两部实现: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);//将读取内容发送到服务端
        }
    })
}                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值