成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

node.js基于dgram數(shù)據(jù)報模塊如何創(chuàng)建UDP服務器和客戶端-創(chuàng)新互聯(lián)

小編給大家分享一下node.js基于dgram數(shù)據(jù)報模塊如何創(chuàng)建UDP服務器和客戶端,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)建站網(wǎng)站建設公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務為基礎,以質量求生存,以技術求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,網(wǎng)站設計、成都做網(wǎng)站,塑造企業(yè)網(wǎng)絡形象打造互聯(lián)網(wǎng)企業(yè)效應。

node.js中 dgram 模塊提供了udp數(shù)據(jù)包的socket實現(xiàn),可以方便的創(chuàng)建udp服務器和客戶端。

一、創(chuàng)建UDP服務器和客戶端

服務端:

const dgram = require('dgram');
//創(chuàng)建upd套接字
//參數(shù)一表示套接字類型,'udp4' 或 'udp6'
//參數(shù)二表示事件監(jiān)聽函數(shù),'message' 事件監(jiān)聽器
let server = dgram.createSocket('udp4');
//綁定端口和主機地址
server.bind(8888, '127.0.0.1');
//有新數(shù)據(jù)包被接收時,觸發(fā)
server.on('message', function (msg, rinfo) {
  //msg表示接收到的數(shù)據(jù)
  //rinfo表示遠程主機的地址信息
  console.log('接收到的數(shù)據(jù) : ', msg.toString());
  console.log(rinfo);
  //發(fā)送數(shù)據(jù),如果發(fā)送數(shù)據(jù)之前沒有綁定過地址和端口,則會隨機分配端口。
  //參數(shù)一表示,要發(fā)送的數(shù)據(jù) string或buffer
  //參數(shù)二表示,發(fā)送數(shù)據(jù)的偏移量
  //參數(shù)三表示,發(fā)送數(shù)據(jù)的字節(jié)數(shù)
  //參數(shù)四表示,目標端口
  //參數(shù)五表示,目標主機名或IP地址
  //參數(shù)六表示,消息發(fā)送完畢后的回調函數(shù)
  server.send('你好', 0, 6, rinfo.port, rinfo.address);
});
//開始監(jiān)聽數(shù)據(jù)包時,觸發(fā)
server.on('listening', function () {
  console.log('監(jiān)聽開始');
});
//使用 close() 關閉socket之后觸發(fā)
server.on('close', function () {
  console.log('關閉');
});
//發(fā)生錯誤時觸發(fā)
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發(fā)送數(shù)據(jù)
client.send('你好', 0, 6, 8888, '127.0.0.1', function (error, bytes) {
  if (error) {
    console.log(error);
  }
  console.log(`發(fā)送了 ${bytes} 個字節(jié)數(shù)據(jù)`);
});

udp中服務器與客戶端并沒有嚴格的劃分,既可以作為服務器接收數(shù)據(jù)處理數(shù)據(jù),也可以像客戶端一樣請求數(shù)據(jù),彼此之間相對獨立。

二、通過UDP服務器進行廣播

我們知道一個IP地址是由網(wǎng)絡地址和主機地址組成的,而廣播IP的主機位全為1,當我們向一個廣播IP發(fā)送數(shù)據(jù)時,則該數(shù)據(jù)將分發(fā)給所有同網(wǎng)段的主機。

服務端:

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('廣播數(shù)據(jù)');
setInterval(function () {
  //向廣播IP發(fā)送數(shù)據(jù)
  //注意客戶端監(jiān)聽的端口要與這里的端口一致,不然無法接收到廣播
  server.send(buf, 0, buf.length, 6666, '192.168.1.255', function (error, bytes) {
    if (error) {
      console.log(error);
    }
    console.log(`發(fā)送 ${bytes} 個字節(jié)數(shù)據(jù)`);
  });
}, 3000);

客戶端:

const dgram = require('dgram');
let client = dgram.createSocket('udp4');
//如果監(jiān)聽不到廣播數(shù)據(jù),設置成 0.0.0.0 看看
client.bind(6666, '192.168.1.111');
client.on('message', function (msg, rinfo) {
  console.log(msg.toString());
});

三、通過UDP進行組播

組播就是將網(wǎng)絡中的主機進行邏輯上的分組,向一個組播地址發(fā)送數(shù)據(jù),該組下的所有主機都會收到數(shù)據(jù)。

實現(xiàn)組播,并不是直接把數(shù)據(jù)發(fā)送給目標地址,而是將數(shù)據(jù)發(fā)送給組播主機,然后分發(fā)給組內的所有成員。

在網(wǎng)絡中,使用D類地址作為組播地址,范圍是 224.0.0.0 - 239.255.255.255。

分為四類:

1、224.0.0.0 ~ 224.0.0.255 地址224.0.0.0保留不做分配,其它供路由協(xié)議使用。

2、224.0.1.0 ~ 224.0.1.255 公用組播地址,可以用于Internet。

3、224.0.2.0 ~ 238.255.255.255 為用戶可用的組播地址(臨時組地址),全網(wǎng)范圍內有效。

4、239.0.0.0 ~ 239.255.255.255 為本地管理組播地址,僅在特定的本地范圍內有效。

通過 addMembership() 將 socket 加入組播中,dropMembership() 方法退出組播。

服務端:

const dgram = require('dgram');
//組播地址
const multicastAddr = '224.1.1.1';
let server = dgram.createSocket('udp4');
//注意setMulticastLoopback()要在綁定成功后設置
server.bind(8888, '192.168.1.102', function () {
  //設置數(shù)據(jù)包的生存時間
  server.setMulticastTTL(128);
  //將socket加入組播組中
  server.addMembership(multicastAddr);
  //開啟組播
  server.setMulticastLoopback(true);
});
server.on('message', function (msg, rinfo) {
  console.log(msg.toString());
});
let buf = Buffer.from('組播數(shù)據(jù)');
setInterval(function () {
  //向組播IP發(fā)送數(shù)據(jù)
  //注意,客戶端監(jiān)聽的端口要與這里一致
  server.send(buf, 0, buf.length, 6666, multicastAddr, function (error, bytes) {
    console.log(`發(fā)送 ${bytes} 字節(jié)數(shù)據(jù)`);
  });
}, 3000);

客戶端:

const dgram = require('dgram');
const multicastAddr = '224.1.1.1';
let client = dgram.createSocket('udp4');
client.bind(6666, '0.0.0.0', function() {
  //將socket加入組播組中
  client.addMembership(multicastAddr);
});
client.on('message', function (msg, rinfo) {
  console.log(msg.toString());
});

看完了這篇文章,相信你對“node.js基于dgram數(shù)據(jù)報模塊如何創(chuàng)建UDP服務器和客戶端”有了一定的了解,如果想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當前題目:node.js基于dgram數(shù)據(jù)報模塊如何創(chuàng)建UDP服務器和客戶端-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article4/djejoe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站全網(wǎng)營銷推廣、關鍵詞優(yōu)化品牌網(wǎng)站制作、網(wǎng)站建設、電子商務

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司
谷城县| 吉木乃县| 巫山县| 东明县| 星座| 广丰县| 肃宁县| 莱芜市| 聂拉木县| 牡丹江市| 新余市| 龙岩市| 讷河市| 金山区| 榆社县| 金山区| 固原市| 通海县| 山东省| 门头沟区| 柞水县| 宾阳县| 额尔古纳市| 日土县| 阳曲县| 儋州市| 台北县| 周宁县| 息烽县| 海南省| 湘西| 苏尼特左旗| 犍为县| 天水市| 海门市| 古丈县| 石泉县| 特克斯县| 磐安县| 道孚县| 秦安县|