NodeJS中的UDP通信

本文介绍了如何使用Node.js 16创建UDP服务器和客户端进行通信,并讨论了UDP协议的优缺点,以及如何通过应用层实现数据可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UDP通信,适用于实时性要求高的场景,一般作为流媒体应用、语音交流、视频会议所使用的传输层协议,还有许多基于互联网的电话服务使用的VOIP(基于IP的语音)也是基于UDP运行的,实时视频和音频流协议旨在处理偶尔丢失的数据包,因此,如果重新传输丢失的数据包,则只会发生质量略有下降,而不是出现较大的延迟。
UDP优点:简单,轻量。
UDP缺点:没有流控制,没有应答确认机制,不能解决丢包、重发、错序问题。

并不是所有使用UDP协议的应用层都是不可靠的,应用程序可以通过增加确认和重传机制,自己实现可靠的数据传输,

下面我们使用nodejs16来实现一个简单的UDP通信。

服务端

//server.mjs
import dgram from 'dgram'

const server = dgram.createSocket('udp4',(msg,rinfo)=>{
  console.log(msg.toString(),rinfo.address,rinfo.port,rinfo.size)
  server.send('Hello I\'m server:',rinfo.port, rinfo.address)
})

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

server.on('listening', ()=>{
  const address = server.address()
  console.log(`server listening ${address.address} on ${address.port}`)
})

server.bind(41234)

客户端

//client.mjs
import dgram from 'dgram'

const client = dgram.createSocket('udp4', (msg, rinfo)=>{
  console.log(msg.toString(),rinfo.address,rinfo.port,rinfo.size)
})

client.connect(41234,'127.0.0.1',()=>{
  client.send('World2! from client',(err)=>{
    if(err) console.log(err)
    // client.close()
  })
})

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

client.on('connect', ()=>{
  const rinfo = client.remoteAddress()
  console.log('connect to: ',rinfo.address,rinfo.port,rinfo.family)
  client.send('World! from client',rinfo.port,rinfo.address)
})

setTimeout(()=>{
  client.close()
},2000)

运行效果

服务端

服务端运行

客户端

客户端运行

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值