node socket 简易聊天室

2023-11-18

服务端


const net = require('net')
const  server = net.createServer()

//用户列表
let clients = []

//监听连接
server.on('connection',client=>{
    client.on('data',(chunk)=>{
        let data  = chunk.toString()
        if(data.match(/login:(.*)/)){
            let name = data.match(/login:(.*)/)[1]
            client.name = name
            clients.push(client)
            console.log(`用户${name}上线`)
        }else{
            for (const client of clients) {
                if(client.name!==JSON.parse(data).name){
                    client.write(data)
                }

            }
        }
    })

    client.on('close',()=>{
        console.log(`用户${client.name}下线`)
    })

    client.on('error',()=>{
        console.log(`用户${client.name}发生错误`)
    })

})

server.on('error',(err)=>{
    console.log('服务器错误',err)
})

server.on('close',()=>{
    console.log('服务器关闭')
})

server.listen(9527,()=>{
    console.log("服务器开启")
})

客户端

const net = require('net')
const readline =  require('readline')
//读取输入的信息
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

//名字
const name  =  process.argv[2]
//连接服务器
const client = net.createConnection({port:9527},()=>{
    console.log(name+'连接到服务器');
    client.write(`login:${name}`)
    client.name = name
    //开始发送信息
    sendMsg(client)
})

client.on('data', (chunk) => {

    let data  = JSON.parse(chunk.toString())
    if(data){
        console.log(`[${data.name}] : ${data.msg}`)
    }
});
client.on('end', () => {
    console.log('已从服务器断开');
});
client.on('error', () => {
    console.log('服务器错误');
});

//一直递归输出
function sendMsg(client){

    rl.question('',(line)=>{
        client.write(JSON.stringify({
            name:client.name,
            msg:line
        }))
        sendMsg(client)
    })
}

演示

服务端
在这里插入图片描述
客户端1
在这里插入图片描述
客户端2
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node socket 简易聊天室 的相关文章

  • EF Core 5.0 中的多对多关系是否可以配置为仅保留一个导航属性(在一侧)?

    我已使用以下代码配置了 DbContext EF Core 5 0 protected override void OnModelCreating ModelBuilder modelBuilder modelBuilder Entity
  • #region 描述编译到.net 中的.exe 中?

    region endregion 指令 描述 是否编译到 NET 中的 EXE 中 我知道注释不是 但我经常在一个区域内对代码组进行分块并给出有用的描述 我想确保这些描述在我编译的代码中不可见 我不是在寻找混淆信息 不过 谢谢 不 他们不是
  • 人们应该选择 ImmutableDictionary 还是 ImmutableSortedDictionary?

    我听说 NETSystem Collections Immutable集合被实现为平衡二叉树 以满足其不变性约束 甚至是传统上对哈希表进行建模的集合 例如Dictionary 通过使用积分值GetHashCode作为排序键 如果我有一种类型
  • VB.NET 使用 system.net.tcpclient 编写 telnet 客户端

    当我连接到我的Solaris盒子时这对我不起作用 服务器正在回传 有谁知道我做错了什么 Imports System Net Imports System Net Sockets Imports System Text Public Cla
  • 将 ASP.Net Identity 表链接到用户详细信息表

    我正在尝试将我的身份用户表链接到我创建的用于跟踪其他用户信息的用户详细信息表 该用户详细信息表称为 UserProfile 我发现了这个链接 但它在 NET Core 2 1 中不起作用 将 ASP NET Identity 用户链接到用户
  • .NET Winforms 中让用户输入时间范围的好方法?

    有谁知道让用户使用 winforms 控件输入时间量 小时和分钟 的好方法 目前 我有两个数字上下 一个代表时间 一个代表分钟 然后我解析它们以创建时间跨度 我唯一的另一个想法是一个文本框 用户可以在其中输入 00 00 时间 并验证输入
  • 有没有办法在 .Net 中创建“自托管”网站? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 类似于 WCF 自托管 有没有办法创建一个在控制台应用程序中 自托管 的网站或dll 提出这个问题的方
  • nUnit Assert.That(method,Throws.Exception) 不捕获异常

    有人可以告诉我为什么这个检查异常的单元测试失败了 显然我真正的测试是检查其他代码 但我使用 Int32 Parse 来显示问题 Test public void MyTest Assert That Int32 Parse abc Thro
  • 如何在 C++/CLI 中转发声明委托?

    How 以下内容无效 delegate MyDelegate ref class MyDelegate delegate void MyDelegate 申报工作如下 public delegate void MyDelegate Obje
  • 将日期时间转换为时间跨度

    我想转换一个DateTime实例化为TimeSpan举例来说 可能吗 我环顾四周 但找不到我想要的东西 我只找到了时差 更具体地说 我想转换DateTime实例以毫秒为单位 然后将其保存到IsolatedStorage 中 您可以只使用日期
  • App.config 连接字符串相对路径

    我需要在 app config 中设置 sqlite 连接字符串 我想设置相对于调试 发布文件夹的路径 数据库文件将复制到这些文件夹
  • 如何在vs2008中使用C#使用卷影复制

    我想制作一个使用卷影复制服务进行备份 恢复的 C 应用程序 如何从 C 访问 VSS API 查看AlphaVSS https github com alphaleonis AlphaVSS 我相信这正是医生所吩咐的
  • 为什么 Point 和 Rectangle 不能用作可选参数?

    我试图将一个可选参数传递给一个几何函数 称为offset 可能会或可能不会指定 但 C 不允许我执行以下任何操作 有办法做到这一点吗 默认为空 错误 类型的值无法用作默认参数 因为没有到 System Drawing Point 类型的标准
  • 如何将资源添加到现有签名程序集

    鉴于 程序集 例如 SomeLib dll 文本文件 例如 myconfig xml 我需要将文件 myconfig xml 嵌入到现有程序集 SomeLib dll 中 在按 回答 之前请考虑 我知道编译过程中的资源嵌入 csc exe
  • DataGridView 的替代品有哪些? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们希望在 Winforms 应用程序中替换 DataGridView 我们应该评估哪些替代方案 商业或
  • 将 MySQL 与实体框架结合使用 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在 Google 上找不到任何有关实体框架 MySQL 的信息 所以我希望有人知道 已发布 获取适用于
  • iTextSharp 居中对齐文档对象内的对象

    是否有一种快速而简单的方法可以将文档对象中的对象居中对齐 Without执行任何计算逻辑 即 获取页面宽度 获取内容宽度 除以二等 我在 Document 对象内的 Paragraph 对象中有一个 PdfPTable 对象 我想将段落对象
  • Web API 获取多部分/表单数据响应的最简单方法

    我有问题 但我看不到我做错了什么 我想用最简单的方法来让它工作 稍后我会让它变得更复杂 但目前只想命中 post 方法 我什至不关心里面的代码当前是否正在工作 我唯一关心的是它会发回 OK 200 回复 目前 我要么收到内部服务器错误 50
  • .NET 电话号码解析库

    有谁知道 NET 的通用电话号码解析库吗 理想情况下 我正在寻找类似于 Ruby 的东西Phone http github com carr phone图书馆 我会选择 Google libphonenumber 库的 C 端口 https
  • 将 VBA 转换为 .NET 语言 [重复]

    这个问题在这里已经有答案了 可能的重复 是否可以将 VBA 转换为 C https stackoverflow com questions 388819 is it possible to convert vba to c 假设我有一个大型

随机推荐

  • 使用markedjs预览md文件

  • 神经网络时间序列预测PyTorch-Forecastin!

    来源 数据STUDIO 深度学习初学者 本文约5200字 建议阅读8分钟 本文为你介绍了神经网络时间序列预测PyTorch Forecastin PyTorch Forecasting 1 使用神经网络的时间序列预测对数据科学工作者和研究人
  • 地推里的t1结算啥意思

    T1结算 通常是指在地推活动中 结算员工提成的时间点 在这种情况下 T1代表第一天或第一周期的结算时间 即在活动结束后的第一天或第一周进行结算 例如 如果地推活动是在一个星期内进行的 那么T1结算可能是指在活动结束后的第一周内结算员工提成
  • 二叉树的创建和遍历实现

    1 前言 提到 树 Tree 结构 很容易联想到 大树 想到这是 一对多关系 特性的数据结构 其相关的名词 概念很多 子树 SubTree 结点 Node 根结点 Root 叶子 Leaf 终端结点 分支结点 非终端结点 内部结点 孩子 C
  • 在Windows2012下配置Mercurial

    所需的安装文件 xampp win32 1 8 3 4 VC11 installer exe python 2 7 7 amd64 msi tortoisehg 3 0 1 x64 msi mercurial 3 0 1 win amd64
  • windows下使用FFmpeg生成PCM音频文件并播放(通过命令的方式)

    一 PCM文件的定义 PCM文件 模拟音频信号经模数转换 A D变换 直接形成的二进制序列 该文件没有附加的文件头和文件结束标志 Windows的Convert工具能够把PCM音频格式的文件转换成Microsoft的WAV格式的文件 将音频
  • python 历险记(五)— python 中的模块

    目录 前言 基础 模块化程序设计 模块化有哪些好处 什么是 python 中的模块 引入模块有几种方式 模块的查找顺序 模块中包含执行语句的情况 用 dir 函数来窥探模块 python 的内置模块有哪些 结语 参考文档 系列文章列表 前言
  • 大千世界无奇不有,设计师又遇一无赖暴击!

    黑客技术 点击右侧关注 了解黑客的世界 Java开发进阶 点击右侧关注 掌握进阶之路 Linux编程 点击右侧关注 免费入门到精通 有网友发文感叹道 大千世界无奇不有 设计师又遇一无赖暴击 你们的设计我很满意 但是我不会付款的 为什么 你们
  • kylin: build cube Hbase: Region Server 意外退出

    背景 跑kylin 的 build cube 任务 总是在跑任务 数据量200M 的时候挂掉 各种调节yarn的参数都不行 关键跑的时候还没涉及到hbase 因为我跑的是kylin on druid 但是总是跑着跑着 直接ERROR 查看h
  • C++顺序检索、二分检索,并统计比较次数,体现最好、最差、平均三种情况

    实验四 include
  • vscode自动化写代码插件 自动生成代码插件

    直接在vscode中搜索chatGPT中文版安装即可 在代码仓中右侧 就去搜索你想要的代码啦 比如想搜索一个深拷贝
  • COW奶牛!Copy On Write机制了解一下

    前言 只有光头才能变强 在读 Redis设计与实现 关于哈希表扩容的时候 发现这么一段话 执行BGSAVE命令或者BGREWRITEAOF命令的过程中 Redis需要创建当前服务器进程的子进程 而大多数操作系统都采用写时复制 copy on
  • 分布式记账的意义

    今天正式开始 区块链方法论 的第二部分 寻根溯源 的第一章节 说到区块链 大多数的人说的最多的就是分布式记账 没错 分布式记账是区块链技术中最广为人知的特征之一 但几乎没有多少人知道为什么要采用分布式记账 所以 今天我们就来说一说分布式记账
  • 记录一下Popmenu的使用以及一些坑:自定义Popupmenu、Menu、Popupmenu添加icon

    今天就记录一下昨天写bug的时候使用Popupmenu的时候遇到的一些问题吧 尝试使用Popupmenu 避免不必要的坑 我贴的代码都是我最后的代码 记录自己看一下 后来参考的人就看看步骤就行 先看看我最后的效果图 壹 Popupmenu的
  • nginx系统学习5--常用配置6--网络限速配置

    6 6 网络限速配置 6 6 1 操作 01 修改配置文件 worker processes 1 events worker connections 1024 http include mime types default type app
  • SpringBoot自动配置原理,一文搞懂

    阅读收获 1 type 1 2 理解SpringBoot自动配置原理 SpringBoot是什么 SpringBoot 的诞生就是为了简化 Spring 中繁琐的 XML 配置 其本质依然还是Spring框架 使用SpringBoot之后可
  • Win11的Linux子系统WSL2安装Ubuntu的关键步骤

    安装Ubuntu 主要参考 官网教程 注意WSL2的重启时机与WSL有所不同 在Ubuntu 22中 配置用户名和子系统分区的界面已经与官网教程有所不同 用户名不能有大写 分区可以采用默认设置 若卡在Ubuntu安装页面 在Windows设
  • 面试宝典:从MobileNetV1到V3,一文全面梳理移动端深度学习模型

    面试宝典 MobileNetV1 V3 MobileNet的设计及实现 MobileNet是一种适用于移动设备的通用计算机视觉神经网络 可用于分类 目标检测和语义分割等多种任务 为了在移动设备上实现高效的计算和减小模型大小 我们可以采用以下
  • DEBUG:Generate Bitstream失败

    问题 约束失败 解决 确保IO初始化引脚正确 和选择合适的电平
  • node socket 简易聊天室

    服务端 const net require net const server net createServer 用户列表 let clients 监听连接 server on connection client gt client on d