服务器代码
let net = require('net');
// 创建服务器
let server = net.createServer(); // 定义一个数组 ,存放每一个连接服务器的客户端用户
let clients = []; server.on('connection',(client)=>{ //参数表示client 表示要连入的客户端对象
// 记录每一个连入的客户端 通过id
client.id = clients.length;
// 将连入的客户端存入数组中
clients.push(client);
// 服务器监听连入客户端 并将每一个客户端传送的数据 广播给其他用户
// 如果某个客户端存在 将客户端传入的数据发送给 其他的客户端
// 设置字符集
client.setEncoding('utf8');
client.on('data',(data)=>{
for(let i = 0;i < clients.length ; i++ ){
if( clients[i] ){
          //连入服务器的每个用户
clients[i].write(data) //返回每个客户端的数据内容
}
}
}) // 当前连入的客户端退出
client.on('close',(err)=>{
clients[client.id]=null;
})
client.on('error',(err)=>{
clients[client.id]=null;
}) }) server.listen('8000','127.0.0.1',()=>{
console.log('ok');
})

客户端代码:

let net  = require('net');
// 多人通信
let readline = require('readline');
// 创建一个客户端服务 let client = new net.Socket(); client.connect('8000','127.0.0.1');
// 服务器传来数据 这里做监听 client.setEncoding('utf8');
client.on('data',(data)=>{
console.log(data);
}); let rl = readline.createInterface({
input:process.stdin, //输入
output:process.stdout //输出
})
// 监听控制台输入的内容 发送给服务器
rl.on('line',(input)=>{
if(input==='quit'){
rl.close();
client.destroy();
}else{
client.write(input);
}
}) client.write("hello word!");

scoketio的更多相关文章

  1. flask-SocketIO

    本文来源:https://www.jianshu.com/p/d81397edd2b1 websocket是html5中实现了服务端和客户端进行双向文本或二进制数据通信的一种新协议,其实已经低于HTT ...

随机推荐

  1. MySQL高级知识(二)——Join查询

    前言:该篇主要对MySQL中join语句的七种情况进行总结. 0.准备 join主要根据两表或多表之间列的关系,从这些表中进行数据的查询. 首先创建两张表:tb_emp(员工表)和tb_dept(部门 ...

  2. 并发控制--Concurrency control--乐观、悲观及方法

    In information technology and computer science, especially in the fields of computer programming, op ...

  3. tensorflow 模型保存与加载 和TensorFlow serving + grpc + docker项目部署

    TensorFlow 模型保存与加载 TensorFlow中总共有两种保存和加载模型的方法.第一种是利用 tf.train.Saver() 来保存,第二种就是利用 SavedModel 来保存模型,接 ...

  4. sql 查询所有子节点示例

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code <!-- 查询机构的所有子机构 --> <select id=&qu ...

  5. Springboot根据浏览器实现网站资源国际化

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 根据浏览器地区主动选择资源 1.创建资源化文件 resource目录下创建messag ...

  6. robotframework使用中的一些注意事项

    1.关于\的转义.使用\\ 2.关于字符串的合并 3.切换到iframe,切出iframe 4.对对象右键点击 5.对对象实现按键操作,在处理一些下拉对象时需要用到. 6.当元素定位十分困难的时候,需 ...

  7. CF1083E The Fair Nut and Rectangles

    CF1083E The Fair Nut and Rectangles 给定 \(n\) 个平面直角坐标系中左下角为坐标原点,右上角为 \((x_i,\ y_i)\) 的互不包含的矩形,每一个矩形拥有 ...

  8. 原生js学习 选择dom

    连bootstrap5 都抛弃jquery了,重新使用原生js来写,所以最近在学习原生js. 一.选择dom元素: id let sure=document.getElementById('sure' ...

  9. 学号 20175329 2018-2019-3《Java程序设计》第四周学习总结

    学号 20175329 2018-2019-3<Java程序设计>第四周学习总结 教材学习内容总结 第五章 上周学习的第四章是体现了数据的封装,本章第五章主要是体现出对象的另外两个方面的重 ...

  10. Java多线程核心技术(五)单例模式与多线程

    本文只需要考虑一件事:如何使单例模式遇到多线程是安全的.正确的 1.立即加载 / "饿汉模式" 什么是立即加载?立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接 ...