使用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