今作っているソフトの関係でUDPサーバーを用意したくなり、せっかくなのでnode.jsを使って作ってみました。node.js自体はHTTPサーバーをたててみて遊んでみたことはありますが、UDPで使うのははじめてです。
開発環境を作る
Mac上に開発環境を作る手順はこちら。
UDPパケットの受信
node.jsでUDPサーバーを作る方法についてこんな記事を見つけました。どうやらdgram(Datagram)なるものが用意されていて、これを使うとUDPソケット関連の処理を実装できるみたいなので、まずは受信側から試してみます。
UDPの受信はものすごく簡単で、createSocket関数をsocketのタイプとコールバックの内容を記述して呼ぶだけです。
dgram.createSocket(type, [callback])
typeにはudp4, udp6, unix_dgramが指定可能。コールバックはmessageイベントが発生したときの内容を記述します。messageイベントは
function (msg, rinfo) { }
バッファー(msg)と送信者情報とデータのバイト数を表す情報(rinfo)から構成されます。以上をふまえて、UDPで送られてきた文字列を表示するプログラムをこちらの記事を参考に書くと、こうなります。受信したデータはただのバイト列なので、toStringを使って文字列(ここではascii文字列)に変換しています。
var dgram = require('dgram'); sock = dgram.createSocket("udp4", function (msg, rinfo) { console.log('got message from '+ rinfo.address +':'+ rinfo.port); console.log('data len: '+ rinfo.size + " data: "+ msg.toString('ascii', 0, rinfo.size)); }); sock.bind(8000, '0.0.0.0');
本来であれば、必要なくなったタイミングで
sock.close();
を呼んでソケットを閉じる必要がありますが、今回は省略しています。
次は、UDPパケットの送信部分を実装して、パケットを受信したら返答するようにします。続き
「node.jsでUDPサーバーを作る1」への2件のフィードバック