?什么是UDP?
UDP(User Datagram Protocol,用戶數據報協議)是一種無連接的網絡傳輸協議,位于 OSI 模型的傳輸層(第四層),與 TCP(傳輸控制協議)同為互聯網的核心協議之一。它具有以下特點:
無連接
- 發送數據前無需建立連接(如 TCP 的三次握手),直接發送數據包。
- 優點:低延遲,適用于實時應用(如視頻流、語音通話)。
- 缺點:不保證數據到達或順序
不可靠傳輸
- 不保證數據包:
- 順序性(可能亂序到達)。
- 完整性(可能丟失)。
- 到達(無確認機制)
怎么在nodejs中使用UDP?
直接上代碼:
服務端
// 創建udp *************************************************
const dgram = require("dgram");
const server = dgram.createSocket("udp4");
// 監聽
server.on("message", (msg, rinfo) => {console.log(`接收到來自 ${rinfo.address}:${rinfo.port} 的消息: ${msg.toString()}`);setInterval(()=>{let t = Date.now()+""// t 必須是Buffer或字符串server.send(t, rinfo.port, rinfo.address, (err, bytes) => {console.log("發送:"+t)});},1000)
});
// 監聽建立連接
server.on("listening", () => {console.log("server:" + server.address().port);});
// 注冊UDP服務
server.bind("5000");
客戶端
// 創建udp *************************************************
const dgram = require("dgram");
const client = dgram.createSocket("udp4");// 監聽建立連接
client.on("listening", () => {console.log("udp:" + client.address().port);});
// 注冊UDP服務
client.bind(5001);// 向服務器發送消息
setTimeout(()=>{client.send("你好,服務器!","5000","192.168.1.64",(err,bytes)=>{if(err){console.log("消息發送失敗!")client.close();return;}client.on('message', (msg, rinfo) => {console.log(`接收到來自服務器 ${rinfo.address}:${rinfo.port} 的響應: ${msg.toString()}`);});})
},5000)
用node啟動后