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); } })
鼓勵一下吧,賞杯咖啡喝吧!