本文實例講述了node.js基于dgram數據報模塊創建UDP服務器和客戶端操作。分享給大家供大家參考,具體如下:
node.js中 dgram 模塊提供了udp數據包的socket實現,可以方便的創建udp服務器和客戶端。
一、創建UDP服務器和客戶端
服務端:
const dgram = require('dgram');//創建upd套接字//參數一表示套接字類型,'udp4' 或 'udp6'//參數二表示事件監聽函數,'message' 事件監聽器let server = dgram.createSocket('udp4');//綁定端口和主機地址server.bind(8888, '127.0.0.1');//有新數據包被接收時,觸發server.on('message', function (msg, rinfo) { //msg表示接收到的數據 //rinfo表示遠程主機的地址信息 console.log('接收到的數據 : ', msg.toString()); console.log(rinfo); //發送數據,如果發送數據之前沒有綁定過地址和端口,則會隨機分配端口。 //參數一表示,要發送的數據 string或buffer //參數二表示,發送數據的偏移量 //參數三表示,發送數據的字節數 //參數四表示,目標端口 //參數五表示,目標主機名或IP地址 //參數六表示,消息發送完畢后的回調函數 server.send('你好', 0, 6, rinfo.port, rinfo.address);});//開始監聽數據包時,觸發server.on('listening', function () { console.log('監聽開始');});//使用 close() 關閉socket之后觸發server.on('close', function () { console.log('關閉');});//發生錯誤時觸發server.on('error', function (err) { console.log(err);});客戶端:
const dgram = require('dgram');let client = dgram.createSocket('udp4');client.bind(3333, '127.0.0.1');client.on('message', function (msg, rinfo) { console.log(msg.toString());});client.on('error', function (err) { console.log(err);});//給8888端口的UDP發送數據client.send('你好', 0, 6, 8888, '127.0.0.1', function (error, bytes) { if (error) { console.log(error); } console.log(`發送了 ${bytes} 個字節數據`);});udp中服務器與客戶端并沒有嚴格的劃分,既可以作為服務器接收數據處理數據,也可以像客戶端一樣請求數據,彼此之間相對獨立。
二、通過UDP服務器進行廣播
我們知道一個IP地址是由網絡地址和主機地址組成的,而廣播IP的主機位全為1,當我們向一個廣播IP發送數據時,則該數據將分發給所有同網段的主機。
服務端:
const dgram = require('dgram');let server = dgram.createSocket('udp4');//注意setBroadcast()必須在綁定socket成功后才能調用server.bind(8888, '192.168.1.102', function () { //啟用廣播 server.setBroadcast(true); server.setTTL(128);});server.on('message', function (msg, rinfo) { console.log(msg.toString()); console.log(rinfo);});let buf = Buffer.from('廣播數據');setInterval(function () { //向廣播IP發送數據 //注意客戶端監聽的端口要與這里的端口一致,不然無法接收到廣播 server.send(buf, 0, buf.length, 6666, '192.168.1.255', function (error, bytes) { if (error) { console.log(error); } console.log(`發送 ${bytes} 個字節數據`); });}, 3000);
新聞熱點
疑難解答
圖片精選