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