Nodejs:UDP極簡入門例子

程式猿小卡_casper發表於2018-02-02

模組概覽

dgram模組是對UDP socket的一層封裝,相對net模組簡單很多,下面看例子。

文字同步收錄於GitHub主題系列《Nodejs學習筆記》

UPD客戶端 vs UDP服務端

首先,啟動UDP server,監聽來自埠33333的請求。

server.js

// 例子:UDP服務端
var PORT = 33333;
var HOST = '127.0.0.1';

var dgram = require('dgram');
var server = dgram.createSocket('udp4');

server.on('listening', function () {
    var address = server.address();
    console.log('UDP Server listening on ' + address.address + ":" + address.port);
});

server.on('message', function (message, remote) {
    console.log(remote.address + ':' + remote.port +' - ' + message);
});

server.bind(PORT, HOST);
複製程式碼

然後,建立UDP socket,向埠33333傳送請求。

client.js

// 例子:UDP客戶端
var PORT = 33333;
var HOST = '127.0.0.1';

var dgram = require('dgram');
var message = Buffer.from('My KungFu is Good!');

var client = dgram.createSocket('udp4');

client.send(message, PORT, HOST, function(err, bytes) {
    if (err) throw err;
    console.log('UDP message sent to ' + HOST +':'+ PORT);
    client.close();
});
複製程式碼

執行 server.js。

node server.js
複製程式碼

執行 client.js。

➜  2016.12.22-dgram git:(master) ✗ node client.js 
UDP message sent to 127.0.0.1:33333
複製程式碼

服務端列印日誌如下

UDP Server listening on 127.0.0.1:33333
127.0.0.1:58940 - My KungFu is Good!
複製程式碼

廣播

通過dgram實現廣播功能很簡單,服務端程式碼如下。

var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var port = 33333;

server.on('message', function(message, rinfo){
    console.log('server got message from: ' + rinfo.address + ':' + rinfo.port);
});

server.bind(port);
複製程式碼

接著建立客戶端,向地址'255.255.255.255:33333'進行廣播。

var dgram = require('dgram');
var client = dgram.createSocket('udp4');
var msg = Buffer.from('hello world');
var port = 33333;
var host = '255.255.255.255';

client.bind(function(){
    client.setBroadcast(true);
    client.send(msg, port, host, function(err){
        if(err) throw err;
        console.log('msg has been sent');
        client.close();
    });
});
複製程式碼

執行程式,最終服務端列印日誌如下

➜  2016.12.22-dgram git:(master) ✗ node broadcast-server.js
server got message from: 192.168.0.102:61010
複製程式碼

相關連結

https://nodejs.org/api/dgram.html

《Nodejs學習筆記》

相關文章