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


UDPパケットの受信はできたので、今度は送信してみます。

UDPパケットの送信

パケットの送信用には

dgram.send(buf, offset, length, port, address, [callback])

というメソッドが用意されています。見ての通り、宛先を指定して、データを送るメソッドですが、DNSエラー等が起きたとき用にコールバックも指定できるようになっています(省略可能)。送るデータはbufで指定されたデータからoffset, lengthで位置を指定することができますが、まあ単純に文字列を生成して送ったりする場合は基本的にoffset=0, length=buf.lengthを指定する形になります。映像等の大きなデータを分割して送る場合等にはoffset, lengthを活用する必要がでてきます。

なおbufに関しては、コールバックブロックが実行されるより前のタイミングでリユースしてはいけないようです。

応答させる

さっきの受信用サーバーを改造して、send関数を使いパケットを送ってきた相手に”nantekottai”を返すようにしてみます。

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));

  var message = new Buffer("nantekottai.");
  sock.send(message, 0, message.length, rinfo.port, rinfo.address);
});

sock.bind(8000, '0.0.0.0');

C言語を比較対象にするのはあまり本質的ではないかもしれませんが、今までC言語でUDPサーバーを作ってきたのと比べると、圧倒的な便利さ。まだまだこれは序章なので、これからnode.jsならではの発展をさせていきます。


“node.jsでUDPサーバーを作る2” への 1 件のフィードバック

コメントを残す

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