Node实现 Socket 通信

这篇具有很好参考价值的文章主要介绍了Node实现 Socket 通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Node实现 Socket 通信

socket 通信流程 

        Socket通信,首先要知道 Socket 是什么,就是网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端被称为 socket ,举一个简单的例子就是两个人在线上进行聊天,即线上通信,那么socket通信的流程具体是怎样的?下面通过一张图来了解 socket 的通信流程:

Node实现 Socket 通信

        下面就来实现 socket通信,分两部分,其一是服务端,再者是客户端,那么先来按照图示的流程来完成对服务端(S端)的编写:

[ 小白注解:Node.js中提供了Net核心模块对 socket 的支持,需要引入Net模块,使用 net 提供的createServer() 方法创建基于流的 TCP 或 [IPC][] 服务器,创建一个变量保存客户端对象,使用 .on( 'connection' 监听用户是否接入,使用 .on('data' 对客户端发送消息的监听,同时对这个消息内容进行一个事件的广播,使用 .on('close' 监听数据错误的处理,使用 .on(close 对客户端关闭事件的监听,[可选] 进行一个服务器启动端口的监听使用listen()方法 ]

const net = require('net')

var chatServer = net.createServer(),    // 创建TCP服务器
    clientMap = new Object()            // 存储客户端对象

var i = 0   // 连接名称流水号

chatServer.on('connection', function (client) {
    console.log('客户端用户接入...')
    client.name = ++i
    clientMap[client.name] = client

    // 对客户端发送消息的监听
    client.on('data', function (data) {
        console.log('客户端传来:' + data)
        broadcast(data, client)
    })

    // 数据错误事件处理
    client.on('error',function (err) {
        console.log('Client Error : ' + err )
        client.end()
    })

    // 客户端关闭事件
    client.on('close',function (data) {
        delete clientMap[client.name]
        console.log(client.name + '下线了')
        client.broadcast(client.name + '下线了', client)
    })
})

// 消息广播
function broadcast(message, client){
    for (var key in clientMap) {
        clientMap[key].write(client.name + ':' + message + '\n')
    }
}

// 监听9000端口号
chatServer.listen(9000,() => {
    console.log('Socket Server Running ...')
})

        那么对服务端(S端)已经编写完成,可以自测一下是否启动成功,这里不再演示,待后续客户端一同演示;下面来完成客户端(C端)的编写:

[ 小白注解:引入Net模块,创建一个socket - new net.socket() ,connect()方法连接指定的服务端的端口 (host,port) ,连接到服务器(S端)之后,通过.on('data' 监听服务端传来的数据信息,同时可以向服务器进行数据发送传递,通过Node.js提供的 readline 模块,使用createInterface()方法构造,同时需要 .on('error' 做事件错误处理 和.on('close' 做用户下线反馈 ]

var net = require('net')

var port = 9000
var host = '127.0.0.1'

var client = new net.Socket()
client.setEncoding = 'UTF-8'

// 连接服务器
client.connect(port, host, function () {
    client.write('欢迎!')
})

// 收集
client.on('data',function (data) {
    console.log('服务端传来:' +  data)
    talk()
})

// 错误事件处理
client.on('error',function (err) {
    console.log('Error:' + err)
})

// 关闭连接
client.on('close',function (){ 
    console.log('Connection Closeed')
})

/* https://www.nodeapp.cn/readline.html#readline_readline
   readline - 用于从可读流读取数据 process.stdin-输入 process.stdout-输出  */

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

function talk() {
    rl.question('请输入:',(inputStr) => {
        if(inputStr != 'bye'){
            client.write(inputStr + '\n')
        }else{
            client.destroy()
        }
    })
} 

        以上已经完成S端和C端的代码编写,下面来进行测试运行!

socket 测试效果

· 打开CMD窗口切到编写目录文件进行运行( 运行命令: node + xx.js )

        S端文件 :SocketServer.js         ——  node SocketServer.js

        C端文件 :SocketClient.js          ——  node SocketClient.js


1. 启动服务器 

Node实现 Socket 通信

2. 启动客户端 

Node实现 Socket 通信

        启动客户端之后,此时客户端创建一个socket,连接服务器(127.0.0.1:9000),当客户端与服务器接入成功之后就会使用write()方法写入,此时服务器就会通过 .on('connection' 监听到有用户接入会进行一个打印,以及 .on('data' 监听到客户端传递的数据,调用 broadcast() 方法进行广播

3. 回看服务器

Node实现 Socket 通信

4. 在客户端中输入数据

Node实现 Socket 通信

         输入之后,会进行调用 talk()方法,进行一个写入,此时服务器监听到客户端的数据会对数据进行一个广播,此时被客户端监听到服务器广播的数据进行一个打印 .on('data',function(){ console.log('服务器传来'....) }) ,所以会返回服务端传...这段;可以看一下服务端是不是收到客户端传过去的这个 “在吗?” ,如下图:

Node实现 Socket 通信

 5. 再启动一个客户端

Node实现 Socket 通信

         启动第二个客户端之后,可以会看服务端,是否会有客户端接入的提示:如下

Node实现 Socket 通信

        那么第二个客户端的接入传到服务端会被服务端进行一个广播,此时在第一个客户端中是会监听来自服务端的一个广播并打印处理,如下:

Node实现 Socket 通信

6.在第二个客户端输入消息

· 第二个客户端

Node实现 Socket 通信

· 第一个客户端

Node实现 Socket 通信Node实现 Socket 通信

· 第二个客户端

Node实现 Socket 通信

        收到来自第一个客户端的广播信息 !

7. 下线

Node实现 Socket 通信

        以上就是使用Node中的Net模块对socket通信的一个实现,那么在之后回来将另外一个 WebSocket 实现通信,那么本篇内容就到此结束,感谢大家的支持!!!

Node实现 Socket 通信文章来源地址https://www.toymoban.com/news/detail-416015.html

到了这里,关于Node实现 Socket 通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • socket实现tcp通信

    tcp的详细细节后面讲解,先来用它的一些接口实现1个简单的通信。下面来看它的一套接口 功能:socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符;应用程序可以像读写文件一样用read/write在网络上收发数据; 函数原型: 参数说明: domain:协议域又称

    2024年02月01日
    浏览(33)
  • 【JAVA课设】-- Socket实现实时通信

    最近学期末了,Java要求做一个课程设计,需要用Java网络编程、JDBC、SWT进行设计。研究了 很久之后终于在各路大佬的指引下成功完工。 根据在计网学习的知识,通信大致分为两种,用Socket,ServerSocket类实现的TCP服务,和用DatagramSocket类实现的UDP通信服务。 详细代码使用可以参

    2023年04月08日
    浏览(25)
  • C++实现socket网络通信

    🍺SOCKET网络通信系列文章链接如下:🍺 🎈【小沐学python】(一)Python简介和安装🎈 🎈Python实现socket网络通信🎈 🎈C++实现socket网络通信🎈 🎈Android实现socket网络通信🎈 🎈nodejs实现socket网络通信🎈 《斗诗篇》 陈献章: 窗外竹青青,窗间人独坐。 究竟竹与人,原来无两

    2023年04月09日
    浏览(27)
  • 基于 Socket 接口实现自定义协议通信

    访问【WRITE-BUG数字空间】_[内附完整源码和文档] 根据自定义的协议规范,使用 Socket 编程接口编写基本的网络应用软件。 掌握 C 语言形式的 Socket 编程接口用法,能够正确发送和接收网络数据包 开发一个客户端,实现人机交互界面和与服务器的通信 开发一个服务端,实现并

    2024年02月06日
    浏览(29)
  • Python与Unity之间通信实现【Socket实现】

    最近做的项目需要实现Python与Unity之间的数据通信,Unity中也有python的插件如IronPython、PyUnity,但是我的python环境和模型都在WSL2中配置了,就选择了用Socket通信的方法实现。   思路就是把一个np二维/一维数组转换为list类型,然后两两数字之间插入\\\",\\\"作为分割转换为字符串类型

    2024年02月11日
    浏览(32)
  • 【Linux】socket 编程(socket套接字介绍、字节序、socket地址、IP地址转换函数、套接字函数、TCP通信实现)

    橙色 所谓套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进程通

    2024年02月09日
    浏览(37)
  • 基于python socket实现TCP/UDP通信

    两个应用程序如果需要进行通讯最基本的一个前提就是能够唯一的标示一个进程,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后

    2024年02月16日
    浏览(37)
  • Java网络编程-Socket实现数据通信

    本文主要是为下一篇Websockt做铺垫,大家了解socket的一些实现。 网络编程是指利用计算机网络进行程序设计、开发的技术。网络编程主要包含三个要素,分别是: IP地址和端口号 传输协议 Socket 在计算机网络中,每台计算机都有一个IP地址,用于唯一标识该计算机在网络中的

    2024年02月10日
    浏览(31)
  • Socket通信讲解及C/S结构实现UDP协议通信

    1.1 什么是套接字 所谓套接字( Socket ),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制,是支持 TCP/IP 协议的路通信的基本操作单元 1.2 套接字主要类型 TCP 流套接字

    2024年02月08日
    浏览(28)
  • Linux系统c语言socket实现TCP通信

    socket通信用到的函数 sockaddr_in结构体(在netinet/in.h中定义) 对于服务端 使用socket()创建套接字socket 使用bind()将创建的套接字绑定到一个本地地址和端口上 listen()将套接字设为监听模式,准备接收客户端请求 accept()接收连接请求,返回一个对应于此次连接的新的套接字 read()

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包