Re: note

技術的な知見やポエムなど役に立たない情報を書き連ねる場所

Node.jsでUDP通信する

f:id:hik0leaf:20190608234421p:plain

以下のサイトを参考にして実際にNode.jsでUDP通信を行ってみました。

dgramを使うと簡単にUDP通信できるようです。

nodejs.org

1. 準備

以下のコマンドを入力します。

$ npm init
$ npm install dgram

2. コード

UDP通信では明確にサーバとクライアントで区別できないため、今回は便宜上、片方をterminal_a、もう一方をterminal_bとします。以下のサンプルコードは同じPC上で動かすため、IPアドレスは同じで異なるPORTで通信を行います。

terminal-a.js

const dgram = require('dgram');

const PORT_A = 3002;
const HOST_A = '127.0.0.1';

const PORT_B = 3003;
const HOST_B = '127.0.0.1';

const socket = dgram.createSocket('udp4');

socket.on('listening', () => {
    const address = socket.address();
    console.log('UDP socket listening on ' + address.address + ":" + address.port);
});

socket.on('message', (message, remote) => {
    console.log(remote.address + ':' + remote.port +' - ' + message);

    socket.send(message, 0, message.length, PORT_B, HOST_B, (err, bytes) => {
        if (err) throw err;
    });
});

socket.bind(PORT_A, HOST_A);


terminal-b.js

const dgram = require('dgram');

const PORT_A = 3002;
const HOST_A ='127.0.0.1';

const PORT_B = 3003;
const HOST_B ='127.0.0.1';

const socket = dgram.createSocket('udp4');

var count = 0;

setInterval(() => {
    count++;
    const data = Buffer.from(String(count));
    socket.send(data, 0, data.length, PORT_A, HOST_A, (err, bytes) => {
        if (err) throw err;
    });
}, 500);


socket.on('message', (message, remote) => {
    console.log(remote.address + ':' + remote.port +' - ' + message);
});

socket.bind(PORT_B, HOST_B);

3. 実行

terminal-aとterminal-bを別々のコンソールを立ち上げて以下のコマンドをそれぞれ入力します。正常に動作していればterminal-bからintervalでカウントアップ文字列を送り、terminal-aでエコーバックしていることが確認できます。

$ node terminal-a.js
$ node terminal-b.js