前端通信

基于后端的通信( pc端用 )

***为自定义内容
/* 
  客户端client.js:
    1. 创建socket
    2. socket连接服务器
    3. 给服务器发送信息
*/

// 1. 创建socket
  const net = require( 'net' );
  const socket = new net.Socket();
  const port = ***;
  const hostname = '***';

  const readline = require( 'readline' );//这是用来做命令行读取
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
// 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 connection closed ~~~` )
  })

// 3. 给服务器发送信息

  socket.on( 'data', msg => {
    console.log( msg.toString() )//客户端自己显示写的内容
    say()
  })


  function say () {
    rl.question('请输入: ', ( answer ) => {
      if( answer === 'bye' ){
        //要进行命令行的结束
        socket.destroy() //清除连接
        rl.close()// 关闭命令行读取
      }else{
        socket.write( answer )
      }
    });
  }
/-------------------------------------------------------------------------------/
/* 

  主服务器server.js:
    1. 创建服务器
    2. 连接客户端
    3. 获取客户端发来的信息
    4. 将客户端发来的信息展示到自己的终端上( 广播 )
*/

const net = require( 'net' );
const port = ***;
const hostname = '***';
const clients = {}; //是用来存储每一个客户端的
let count = 0; //是用来给客户端编号的

// 1. 创建服务器
  const server = new net.createServer();
// 2. 连接客户端
  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', () => {
      //将下线的客户端清除 -- 清除一个对象中的一个属性   clients = { '0': client }
      delete clients[ client.name ]
      console.log(`客户端 ${ client.name } closed~~`)
    })
  })

// 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 }` );
  })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值