使用Socket在cmd命令行聊天


 

Socket:两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端就称为Socket

特性:持久链接,双向通信

首先要有服务器与客户端两端

开一个服务器server,引用node的核心模块net

const net = require("net");
const clients = [];

const server = net.createServer();server.on("connection",(client) => {

  //当一个用户连接进来是,第一步先给用户一个id
  //把用户存入所有用户的这个数组中
  client.id = clients.length;
  clients.push(client);

  //设置编码集合
  client.setEncoding("utf8");
  //监听用户(客户端)是否给服武器发了数据
  //如果发送了数据
  //服务器把数据转发给其他所有用户
       client.on("data",(data) => {
          for(var i=0; i<clients.length; i++) {
               if(clients[i]){
                 clients[i].write(data)
                 }
          }
 })

  //监听用户是否退出群聊
  //如果退出,就移除用户
       client.on("close",() =>{
          clients[client.id] = null;
       })

  //监听用户是否连接是否出错
  //如果出错,就移除用户
       client.on("error",() =>{
                 clients[client.id] = null;
              })
        })


  server.listen("9000","127.0.0.1");

 

开一个客户端,用来与服务器通信,引入核心模块net和readline
const net = require("net");
  const readline = require("readline");
  //创建客户端
  const client = new net.Socket();

  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
  //连接服务器
  client.connect("9000","127.0.0.1");

  //服务器传来数据,做监听
  client.setEncoding("utf8");
  client.on("data", (data) => {
               console.log(data);
   })
  //client.write("ma zheng");
  //监听控制台输入的内容,发送给服务器
  rl.on("line",(input) => {
           if (input === "quit") {
               rl.close();    //聊天框关闭
               client.destroy(); //如果输入quit,对话终止
        }else{
          client.write(input);
   }

})

 

 

鼓励一下吧,赏杯咖啡喝吧!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM