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


