node.jsでUDPサーバーを作る1

投稿者: sota 投稿日:

Pocket

今作っているソフトの関係で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パケットの送信部分を実装して、パケットを受信したら返答するようにします。続き

参考リンク

  1. UDP in Node.js
カテゴリー: node.js

2件のコメント

foreverを使ったnode.jsのサービス運用 | なんてこったいブログ · 2011年8月15日 7:55 PM

[…] node.jsでUDPサーバーを作ったので、いざこれを適当なサーバー上で運用させてみようと思ったところ、どういった形で運用すればよいのかわからない…。開発時にはnodeコマンドを使って […]

[はてブ] node.jsでUDPサーバーを作る1 | なんてこったいブログ | WEBで何かつくるよ · 2015年12月10日 10:09 AM

[…] node.jsでUDPサーバーを作る1 | なんてこったいブログ [node][javascript][UDP]後で試す […]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です