IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Part5-1-3 Nodejs 通信 -> 正文阅读

[网络协议]Part5-1-3 Nodejs 通信

通信必要条件

主机之间需要有传输介质(网线,wifi,蓝牙)

主机上必须有网卡设备(调制与解调制,将电压与二进制数据进行转换)

主机之间需要协商网络速率

常见通讯方式

交换机通讯

路由器通讯

建立多台主机互联

定位局域网中的其他主机

通过 Mac 地址来唯一标识一台主机

但是交换机无法满足互联网需求:

交换机的接口数量有上限

局域网存在大量主机会造成广播风暴

?明确目标主机 IP 地址

网络层次模型

OSI七层模型:

应用层:用户与网络的接口

表示层:数据加密、转换、压缩

会话层:控制网络连接建立与终止

传输层:控制数据传输可靠性

网络层:确定目标网络

数据链路层:确定目标主机

物理层:各种物理设备和标准

数据从 A 至?B,先封装再解封

TCP协议

TCP 属于传输层协议

TCP 是面向连接的协议

TCP 用于处理实时通信

常见控制字段

SYN = 1 表示请求建立连接

FIN = 1 表示请求断开连接

ACK = 1 表示数据信息确认

三次握手

创建 TCP 通信

Net 模块实现了底层通信接口

通信过程:

创建服务端:接收和回写客户端数据

创建客户端:发送和接收服务端数据

数据传输:内置服务事件和方法读写数据

通信事件:

listening 事件:调用 server.listen 方法之后触发

connection 事件:新的连接建立时触发

close 事件:当 server 关闭时触发

error 事件:当错误出现的时候触发

通信事件 & 方法:

data 事件:当接收到数据的时候触发该事件

write 方法:在 socket 上发送数据,默认是 utf8 编码

end 操作:当 socket 的一端发送 FIN 包时触发,结束可读端

server.js

const net = require('net')

// 创建服务端实例
const server = net.createServer()

const PORT = 1234
const HOST = 'localhost'

server.listen(PORT, HOST)

server.on('listening', () => {
  console.log(`服务端已经开启在 ${HOST}: ${PORT}`)
})

// 接收消息 回写消息
server.on('connection', (socket) => {
  socket.on('data', (chunk) => {
    const msg = chunk.toString()
    console.log(msg)

    // 回数据
    socket.write(Buffer.from('您好' + msg))
  })
})

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

server.on('error', (err) => {
  if (err.code == 'EADDRINUSE') {
    console.log('地址正在被使用')
  }else{
    console.log(err)
  }
})

client.js

const net = require('net')

const client = net.createConnection({
  port: 1234, 
  host: '127.0.0.1'
})

client.on('connect', () => {
  client.write('前端工程')
})

client.on('data', (chunk) => {
  console.log(chunk.toString())
})

client.on('error', (err) => {
  console.log(err)
})

client.on('close', () => {
  console.log('客户端断开连接')
})

1

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:15:05  更:2022-04-22 19:15:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:52:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码